解决办法: cp /usr/share/mysql/my-medium.cnf /etc/my.cnf ;
编辑:增加两个编码变量
[client]
default-character-set=gbk
[mysqld]
character_set_server=gbk
datadir=/var/lib/mysql
socket = /var/lib/mysql/mysql.sock
上面设置好后,重启mysql即可。
1.2 创建用户:
mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));
2.为用户授权
授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
2.3 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限):
mysql>grant all privileges on testDB.* to test@localhost identified by '1234';
mysql>flush privileges;//刷新系统权限表
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
2.4 如果想指定部分权限给一用户,可以这样来写:
mysql>grant select,update on testDB.* to test@localhost identified by '1234';
mysql>flush privileges; //刷新系统权限表
2.5 授权test用户拥有所有数据库的某些权限:
mysql>grant select,delete,update,create,drop on *.* to test@"%" identified by "1234";
//test用户对所有数据库都有select,delete,update,create,drop 权限。
//@"%" 表示对所有非本地主机授权,不包括localhost。(localhost地址设为127.0.0.1,如果设为真实的本地地址,不知道是否可以,没有验证。)
3. 删除用户
@>mysql -u root -p
@>密码
mysql>Delete FROM user Where User='test' and Host='localhost';
mysql>flush privileges;
mysql>drop database testDB; //删除用户的数据库
删除账户及权限:>drop user 用户名@'%';
>drop user 用户名@ localhost;
4. 修改指定用户密码
@>mysql -u root -p
@>密码
mysql>update mysql.user set password=password('新密码') where User="test" and Host="localhost";
mysql>flush privileges;
/******************************************************
建议进行如下设置:
原来Linux下的MySQL默认是区分表名大小写的,通过如下设置,可以让MySQL不区分表名大小写:
1、用root登录,修改 /etc/my.cnf;
2、在[mysqld]节点下,加入一行: lower_case_table_names=1
3、重启MySQL即可;
******************************************************/
4. MySQL实现序列效果
一般使用序列(Sequence)来处理主键字段,在MySQL中是没有序列的,但是MySQL有提供了自增长(increment)来实现类似的目的,但也只是自增,而不能设置步长、开始索引、是否循环等,最重要的是一张表只能由一个字段使用自增,但有的时候我们需要两个或两个以上的字段实现自增(单表多字段自增),MySQL本身是实现不了的,但我们可以用创建一个序列表,使用函数来获取序列的值
1. 新建序列表
***************重要********************
set global log_bin_trust_function_creators=1;
//在/etc/my.cnf中找到[mysqld],在它下面添加这样一行:
log_bin_trust_function_creators = 1
DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
seq_name VARCHAR(50) NOT NULL,
current_val INT NOT NULL,
increment_val INT NOT NULL DEFAULT 1,
PRIMARY KEY (seq_name)
) ENGINE=InnoDB;
DROP FUNCTION IF EXISTS currval;
CREATE DEFINER=`xfxd`@`%` FUNCTION `currval`(v_seq_name VARCHAR(50)) RETURNS int(11)
begin
declare value integer;
set value = 0;
select current_val into value from sequence where seq_name = v_seq_name;
return value;
end
DROP FUNCTION IF EXISTS nextval;
CREATE DEFINER=`xfxd`@`%` FUNCTION `nextval`(v_seq_name VARCHAR(50)) RETURNS int(11)
begin
update sequence set current_val = current_val + increment_val where seq_name = v_seq_name;
return currval(v_seq_name);
end
DROP FUNCTION IF EXISTS setval;
CREATE DEFINER=`xfxd`@`%` FUNCTION `setval`(v_seq_name VARCHAR(50), value INTEGER) RETURNS int(11)
BEGIN
UPDATE sequence
SET current_val = value
WHERE seq_name = v_seq_name;
RETURN currval(v_seq_name);
END
2. 新增一个序列
INSERT INTO sequence VALUES ('seq_test1_num1', '0', '1');
INSERT INTO sequence VALUES ('seq_test1_num2', '0', '2');
4. 查询当前值
select currval('seq_test1_num1');
8. 新建触发器 插入新纪录前给自增字段赋值实现字段自增效果
CREATE TRIGGER `TRI_test1_num1` BEFORE INSERT ON `test1` FOR EACH ROW BEGIN
set NEW.num1 = nextval('seq_test1_num1');
set NEW.num2 = nextval('seq_test1_num2');
END
/*********************************************
ln -s /usr/lib64/mysql/libmysqlclient.so /usr/lib/libmysqlclient.so
***********************************************/
5. Mysql导出表结构及表数据 mysqldump用法
命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 脚本名;
1、导出数据库为dbname的表结构(其中用戶名为root,密码为dbpasswd,生成的脚本名为db.sql)
mysqldump -uroot -pdbpasswd --default-character-set=gbk -d dbname >db.sql;
2、导出数据库为dbname某张表(test)结构
mysqldump -uroot -pdbpasswd --default-character-set=gbk -d dbname test>db.sql;
3、导出数据库为dbname所有表结构及表数据(不加-d)
mysqldump -uroot -pdbpasswd --default-character-set=gbk dbname >db.sql;
4、导出数据库为dbname某张表(test)结构及表数据(不加-d)
mysqldump -uroot -pdbpasswd --default-character-set=gbk dbname test>db.sql;
备份MySQL数据库为带删除表的格式,备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库
mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql
直接将MySQL数据库压缩备份
mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz
还原MySQL数据库的命令
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
还原压缩的MySQL数据库
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename
5.如果需要导出mysql里面的函数或者存储过程
mysqldump -hhostname -uusername -ppassword -ntd -R databasename > backupflie.sql
mysqldump -hlocalhost -uroot -ntd -R hqgr > hqgr.sql
其中的 -ntd 是表示导出存储过程;-R是表示导出函数
只导数据不导结构
mysqldump -t 数据库名 -uroot -p > xxx.sql
全导:(函数、表结构、数据)
mysqldump -hhostname -uusername -ppassword -R databasename > backupflie.sql