详解MySQL用户与授权、MySQL日志管理、数据乱码解决方案。
数据库是信息系统中非常重要的环节,合理高效的对它进行管理是很重要的工作。通常是由总管理员创建不同的管理账户,然后分配不同的操作权限,把这些账户交给相应的管理人员使用。本篇我们在CentOS7.5操作系统上应用MySQL5.7版本。
用户与授权(用户管理、授权控制)
一、用户管理包括:新建用户、删除用户、重命名用户、给用户设置密码、忘记root密码的解决办法;
select User,authentication_string,host from user; //查看有多少个用户及用户信息 :
create user 'test01'@'localhost' identified by '123123'; //创建用户及密码:
grant all on . to 'test02'@'localhost' identified by '123123'; //给任何库任何表创建全部权限的用户及密码:
drop user 'test01'@'localhost'; //删除用户:
rename user 'test02'@'localhost' to 'user01'@'192.168.100.70'; //用户重命名:
select password('123123'); //将密码的明文转化成密文:
create user 'user01'@'localhost' identified by password '*E56A114692FE0DE073F9A1DD68A00EEB9703F3F1'; //新创建用户user01并制定密文密码
set password for 'user01'@'localhost' = password('123123'); // 如果密码忘了 可以重新更改密码 :
使用MySQL时,如果忘记了其他用户的密码,可以使用root用户重新设置,但是如果忘记了root密码,就需要采取特殊的方法进行操作。这里直接修改授权表可以修改root密码,下面介绍它 的使用步骤:
[root@localhost bin]# systemctl stop mysqld.service //先关闭MySQL数据库
[root@localhost bin]# netstat -ntap | grep 3306 //查看一下监听端口
[root@localhost bin]# vim /etc/my.cnf //修改MySQL配置文件
在[mysqld]项插入 skip-grant-tables //插入skip-grant-tables 跳过验证表
[root@localhost bin]# systemctl start mysqld.service //开启MySQL数据库
[root@localhost bin]# netstat -ntap | grep 3306 //查看监听端口
登录 mysql //然后直接mysql 就能登录到数据库中
update mysql.user set authentication_string = password('123123') where user='root'; //更新数据库信息 将root密码改为123123
退出quit
[root@localhost bin]# vim /etc/my.cnf //然后再进入配置文件将刚才的skip-grant-tables删掉
删除 skip-grant-tables
[root@localhost bin]# systemctl restart mysqld.service //重启服务
[root@localhost bin]# mysql -uroot -p //账号、密码登录MySQL
Enter password: 123123
二、授权控制包括授予权限、查看权限、撤销权限、权限列表说明等。
主要命令操作如下:
grant select,update on . to 'user01"@"localhost' identified by '123123'; //给用户user01授予任意库,组的select、update权限
语法:revoke 权限 on数据库.表 from 用户@主机;
revoke updtae on . from ‘user01’@’localhost’; //撤销用户user01任意库,组的的updta的权限
show grants for "user01'@'localhost'; // 查看用户权限
MySQL日志管理(错误日志、通用查询日志、二进制日志、慢查询日志)
接下来修改MySQL的配置文件,将以上四种日志的配置文件插入到[mysqld]中:
[root@localhost bin]# cd /usr/local/mysql/data/ //mysql日志存放位置
[root@localhost bin]# vim /etc/my.cnf // 将以下内容插入到[mysqld]中:
#错误日志
log-error=/usr/local/mysql/data/mysql_error.log //在此路径下定义错误日志的存放位置、文件名
#通用日志
general_log=ON //开启
general_log_file=/usr/local/mysql/data/mysql_general.log //指定日志文件存放位置、文件名
#二进制日志(记录用户对数据库的操作)
log_bin=mysql-bin //指定二进制日志
#慢日志
slow_query_log=ON //开启
slow_query_log_file=mysql_slow_query.log //指定日志文件存放位置、文件名
long_query_time=1 //设置最长记录时间
查看已经配置好的日志文件:
错误日志:
1.主要记录当MySQL启动或停止时,以及在运行过程中发生任何错误时的相关信息。错误日志默认保存在MySQL的安装路径data文件夹下,后缀名是.err。
2.在MySQL的配置文件中,可以指定日志文件的保存位置和日志的文件名。log-error=file_name选项来指定保存错误日志的位置,file_name 指定日志文件名,如果没有指定文件名,使用host_name.err作为文件名。重启MySQL后生成mysql_error.log用来记录错误日志。
通用查询日志:
1.通用查询日志用来记录MySQL的所有连接和语句,默认是关闭的。使用show语句可以查询出日志的信息。
2.修改MySQL配置文件的general_log=ON选项,可以打开通用查询日志,general_log_file=name定义通用查询日志的位置,如果没有指定file_named的值,默认名是host_name.log。重启MySQL后通用查询日志生效。
show variables like 'general%'; //查看通用日志文件状态:
二进制日志:
1.二进制日志用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,主要目的是在恢复数据时能够最大程度的恢复数据库。二进制日志默认是开启的,在data文件夹下,以mysql-bin命名,数据量大时,它会自动分割成多个日志文件,以数字做扩展名。
2.二进制日志可以使用MySQL的工具mysqlbinlog查看二进制文件:
mysqlbinlog --no-defaults mysql-bin.000001 //5.7版本MySQL 查看二进制日志文件
show variables like 'log_bin%'; //查看二进制日志文件状态(是否开启):
慢查询日志:
1.慢查询日志记录所有执行时间超过long_query_time秒的SQL语句,用于找到哪些查询语句执行时间长,以便对其进行优化。默认慢查询日志是关闭的,slow_query_log是,慢查询的选项,默认是OFF。
2.使用SQL语句开启慢查询功能。
3.慢查询时间设置默认为10秒,记录10秒内的查询,可以通过global long_query_time选项进行修改。使用show语句查看慢查询日志。
show variables like '%slow%'; //查看慢查询日志文件状态(是否开启):
show variables like 'long_query_time'; //查看最长记录时间:
set global slow_query_log=ON; //开启慢查询日志:
慢查询测试:select sleep(6); //延迟6秒:
[root@localhost data]# vim mysql_slow_query.log //进入慢日志文件查看记录信息,可以看到相应的记录。
数据乱码解决方案
MySQL服务器使用中经常有乱码产生,主要有以下几种原因:
1.服务器系统字符设置问题
2.数据表语系设置的问题
3.客户端连接语系的问题
总结:乱码问题原因简单解释就是 在使用、存储数据的时候,各个环节设置的字符集如果不同,就会产生乱码。