一、MySQL分为四种日志
存放位置一般放在数据目录下
1、错误日志:记录 MySQL数据库的启动、运行和关闭过程
/mysql/data/mysql.err 主机名.err
mysql> show variables like 'log_error'; 查看错误日志存在的绝对路径
+---------------+-----------------------+
| Variable_name | Value |
+---------------+-----------------------+
| log_error | /mysql/data/MySQl.err |
+---------------+-----------------------+
1 row in set (0.00 sec)
2、二进制日志(重要),开启二进制日志情况下,不能删除二进制日志,否则数据库可能起不来
记录用户对数据库所做的所有的DDL和DML的写操作,不会记录查询语句,对数据的容灾恢复有至关重要的作用。常用于AB复制和数据恢复。
DDL:create、drop、alter、truncate
DML:insert、update、delete
二进制日志的作用:做AB复制、恢复
3、通用查询日志:general_log show variables like 'general_log';
mysql> show variables like 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log | OFF |
+---------------+-------+
1 row in set (0.00 sec)
记录所有对数据库的请求信息(包括登录、查询),默认不开启
日志量较大、占用磁盘空间,一般不开启
4、慢查询日志:记录的是查询时间超过指定时间的查询语句,一般用于优化查询,默认不开启
二、开启各种日志,修改配置文件
临时开启,重启服务失效
mysql> show variables like 'general_log';查看通用日志状态
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log | OFF |
+---------------+-------+
1 row in set (0.00 sec)
mysql> set global general_log=on;临时开启通用查询日志
Query OK, 0 rows affected (0.10 sec)
mysql> show variables like 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log | ON |
+---------------+-------+
1 row in set (0.00 sec)
通用查询日志/var/lib/mysql/短主机名.log cat /mysql/data/localhost.logmy
cat /car/lib/mysql/ULA.log
永久设置
# vim /etc/my.cnf
log=general_select_log #=号右边的日志文件名可以自定义
重启服务之后生效
2、开启慢查询日志
5.5以前的版本开启方法
# vim /etc/my.cnf
log-slow-queries=slow-log #=号右边的日志文件名可自定义
long_query_time=5 #设置慢查询超时时间 单位是:秒 超过规定查询时间会被系统界定为慢查询
5.5及以后的版本开启方法
# vim /etc/my.cnf
slow_query_log_file= slowlog 定义慢查询的文件名
long_query_time=5 定义慢查询超时时间为5秒
slow_query_log=on 定义是否开启慢查询,on表示开启,1也表示开启。
重启服务
# mysql -u root -p2
MariaDB [(none)]> select sleep(6); #执行一个超过5秒的查询操作
# cat /var/lib/mysql/slow-log
3、开启二进制日志
# vim /etc/my.cnf
在[mysqld]模块下面添加如下两行
log-bin=log_bin.log #=号右边的日志文件名可自定义
log-bin-index=log_bin.index
重启服务
进入MySQL数据库之后可以使用如下命令查看是否已经开启二进制日志
MariaDB [(none)]> show variables like 'log_bin';
二进制日志的查看 mysqlbinlog
# mysqlbinlog log_bin.000001
# at 4 #事件发生的位置信息
#170606 14:51:00 #事件发生的时间信息
使用二进制日志进行数据恢复 位置点和事件发生的时间可以混合使用
使用位置点进行恢复
# mysqlbinlog --start-position=245 --stop-position=534 log_bin.000001 |mysql -u root -p2
--start-position 起始位置点
--stop-position 结束位置点
使用事件发生的时间
# mysqlbinlog --start-datetime='17-06-06 15:25:04' --stop-datetime='17-06-06 15:26:15' log_bin.000002 | mysql -u root -p2
--start-datetime 起始时间
--stop-datetime 结束时间
查看日志信息
MariaDB [(none)]> show master logs;
+----------------+-----------+
| Log_name | File_size |
+----------------+-----------+
| log_bin.000001 | 1079 |
| log_bin.000002 | 1523 |
+----------------+-----------+
2 rows in set (0.00 sec)
查看二进制日志里的操作记录
MariaDB [(none)]> show binlog events in 'bin-log.000006';
查看当前使用的二进制日志文件及所处的位置
MariaDB [(none)]> show master status\G
对日志的管理
删除日志 不要轻易删除,使用purge master logs进行删除二进制日志,不要使用rm -rf命令进行删除。
1)删除某个日志文件之前的所有日志
MariaDB [(none)]> purge master logs to 'log_bin.000002';
Query OK, 0 rows affected (0.05 sec)
2)删除多少天以前的日志文件
MariaDB [(none)]> purge master logs before date_sub(current_date,interval 1 day);
3)重置二进制日志(删除所有的二进制日志)
MariaDB [(none)]> reset master;
4)手动生成新的二进制日志文件
MariaDB [(none)]> flush logs;