Mysql运维篇–日志文件
一、错误日志
记录MySQL启动及停止时,以及服务器运行过程中发生任何严重错误相关信息
该日志默认开启的,默认存放目录/var/log(根据具体安装路径而定)
文件名:mysqld.log 位置:
show variables like '%log_error%';
二、二进制日志
记录DDL语句和DML语句、在Mysql8版本默认开启二进制日志
**文件名:binlog.000001 位置:
show variables like '%log_bin%';
show variables like '%binlog_format%';
STATEMENT | 基于SQL语句的记录,对数据进行修改的SQL都会记录其中 |
---|---|
ROW | 基于行的数据记录,记录的是每一行的数据变更(默认) |
MXED | 混合以上两种模式,某些情况下会自动切换为ROW进行记录 |
修改二进制日志类型:
在配置文件/etc/my.cf中添加以下参数:
binlog_format=STATEMENT
二进制日志文件的查看:
mysqlbinlog [参数选项] logfilename
常用参数:
-d 指定数据库名称,只列出指定数据库相关操作
-v 将行事件重构为SQL语句(ROW)
-w 将行事件重构为SQL语句,并输出注释信息
[root@master data]# mysqlbinlog -uroot -pmysql mysql-bin.000001
ERROR:mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8'
原因是mysqlbinlog这个工具无法识别binlog中的配置中的default-character-set=utf8这个指令。
解决方法:
1、修改配置文件:将default-character-set=utf8 修改为 character-set-server = utf8
2、使用:mysqlbinlog --no-defaults mysql-bin.000004 命令打开
二进制日志文件删除:
Show variables like ‘%binlog_expire%’;
- 删除日志之前的所有二进制日志文件:purge binary logs to ‘Log_name’; 会修改index中相关数据。
- 清除某个时间点以前的二进制日志文件:purge binary logs before ‘2017-03-10 10:10:00’;
- 清除7天前的二进制日志文件:purge master logs before date_sub( now( ), interval 7 day);
- 清除所有的二进制日志文件(当前不存在主从复制关系):reset master;
- **设置自动清理expire_logs_days参数,其默认值为0,表示不启用过期自动删除功能,**如果启用了自动清理功能,表示超出此天数的二进制日志文件将被自动删除,自动删除工作通常发生在MySQL启动时或FLUSH日志时。
三、查询日志
记录了客户端的所有操作语句,而二进制日志不包含查询数据的SQL语句,默认不开启。
show variables like '%general%';
开启查询日志需修改配置文件,添加
general_log=1
general_log_file=/opt/mysql/mysql-8.0.33/data/localhost.log
四、慢查询日志
记录所有执行时间超过参数long_query_time设置并且扫描记录不小于min_examined_row_limit的所有SQL语句的日志,默认未开启。
slow_query_log=1 #慢查询日志
long_query_time=10 #执行时间参数
log_slow_admin_statements=1 #记录执行比较慢的管理语句
log_queries_not_using_indexes=1 #记录执行较慢的未使用索引的语句