MySQL主要日志
- 错误日志
- 通用查询日志
- 慢查询日志
- 二进制日志
- DDL日志
1. 错误日志 (error log)
默认情况下,错误日志是默认开启的。除错误日志外其他日志默认都是关闭状态。
2. 通用查询日志 (general query log )
通用查询日志是记录所有MySQL数据库请求信息的,客户端连接或断开连接的信息都会写入此日志,并记录从客户端接收到的每条SQL语句。也就是说不管你对数据库做了啥,有没有得到正确的反馈,都会被记录下来。
开启有风险,操作需谨慎~ 会影响一定的性能 生产环境下不建议开启!!!
一般有两种输出形式,一种是输出到文件中,一种是写入数据表格中。
show variables like '%general_log%'; #查看开启状态
set global general_log = on; #开启查询日志
set global general_log=off; #关闭查询日志
show variables like 'log_output'; #查看输出日志方式
set global log_output='table'; #切换输出日志到表中
3. 慢速查询日志 (slow query log)
慢查询日志就是用来记录执行时间超过指定时间的查询语句,long_query_time的最小值和默认值分别 为0和10(秒)。
默认情况下,慢查询日志是禁用的。可以手动开启,然后通过慢查询日志,查找出哪些查询语句的执行效率低,进行优化。
慢查询日志支持将记录写入文件,也支持将记录写入数据库表。
#开启慢查询日志,仅本次生效
sqlset global slow_query_log=1;
#查看慢日志查询状态和存储路径
sqlshow variables like '%slow_query_log%';
#查看设置的时间阈值
show global variables like 'long_query_time';
#设置时间阈值
set global long_query_time=10;
#查看日志文件内容
more /www/server/data/mysql-slow.log
永久生效方法:
修改配置文件my.cnf文件,增加或修改参数slow_query_log 和slow_query_log_file,然后重启MySQL服务。
slow_query_log =1long_query_time=3 #(慢查询设置的时间阈值,表示运行超过3秒的sql语句都会被记录下来)
slow_query_log_file=/www/server/data/mysql-slow.log #(此处为你想指定的存放路径)
log-queries-not-using-indexes #(表示记录下没有使用索引的查询)
4. 二进制日志(binary log)
MySQL的二进制日志记录了对mysql数据库执行更改的所有操作,并且记录了更新数据语句发生时间、执行时长、等额外信息,但是不记录查询等不修改数据的SQL语句。顾名思义,它是一个二进制文件,主要用于数据库恢复和主从复制,以及审计操作。
show variables like 'log_bin'; #查看开启状态
mysql-bin.index的文件是存储所有二进制日志文件的清单,又称为二进制文件的索引。
开启方法:直接修改配置文件my.cnf文件中mysqld下面添加
log_bin=/mysql/bin_log/mysql_binlog
二进制日志有两个重要目的
对于复制,主复制服务器上的二进制日志提供了要发送给从服务器的数据更改记录。主服务器将其二进制日志中包含的事件发送给其从服务器,从服务器执行这些事件,以对主服务器进行相同的数据更改。
某些数据恢复操作需要使用二进制日志。备份恢复后,重新执行备份后记录的二进制日志中的事件。这些事件从备份的角度使数据库保持最新状态。
purge binary logs before '2018-05-20 00:00:00'; #清除某个时间点以前的二进制日志文件
reset master; #清除所有的二进制日志文件
show binary logs;
5. DDL日志 (DDL log )
DDL日志或元数据日志记录由数据定义语句(如DROP TABLE或者 ALTER TABLE) 生成的元数据操作。MySQL用此日志来恢复元数据操作中发生的崩溃。
元数据操作的记录会写入到MySQL数据目录中的ddl_log.log(二进制文件)中。
目前,ddl_log.log最多可容纳1048573个条目,大小相当于4 GB。
超过此限制后,必须重新命名或删除文件,才能执行其他DDL语句。