本文选用的MySQL版本是5.7
MySQL日志类型:
MySQL有四种日志:二进制日志、错误日志、常规查询日志、慢查询日志。
日志的相关配置(my.cnf)和数据库系统变量(variables)
从配置文件开启日志
mysql的配置文件对于变量支持下划线和短线两种形式,即bin_log 和 bin-log是等同的。数据库系统变量是下换线形式,推荐格式统一。
[mysqld]
log_bin=/dir/filename #开启二进制日志binlog
binlog_format=statement #或者 row level
expire_logs_days=15 #日志保留天数
log_error=/dir/filename #开启错误日志
general_log=on #开启常规查询日志
general_log_file=/dir/filename
slow_query_log=on #开启慢查询日志
slow_query_log_file=/dir/filename
long_query_time=2 #慢查询SQL最小时间,单位秒,最小值0
log_timestamps=system #日志时间显示
日志介绍和日志查看
二进制日志
内容:只记录数据库模式变更(修改表结构等)和数据修改(增改删),可以做数据同步和备份。
格式:二进制文件,可以用mysqlbinlog /dir/filename.n命令查看。
说明:此日志由filename.index和filename.00000n组成,filename.index是文本文件,罗列了所有filename.n组成的binlog日志。filename.n即我们常说的binlog日志,其中n从1开始递增,每次服务启动n+1并创建一个新的文件。mysqladmin -uuser -p flush-logs命令也会重新穿件filename.n文件。
MySQL的binlog日志有三种模式:statement、row、mixed。statement按照数据库执行的sql语句来记录日志(会附加sql语句上下文,例如use db);row按照实际变化的数据来记录日志;mixed模式会使用statement和row的记录方式,按具体的sql来决定记录方式。
错误日志
内容: 数据库启动日志,数据库关闭日志,检查修复表的日志
格式:文本文件
常规查询日志
内容:所有DDL、DML
格式:文本文件
慢查询日志:
内容:查过指定时间的sql
格式:文本文件
说明:mysqldumpslow命令可以统计文件中慢查询的次数、时间等信息,-s参数表示排序,-t参数表示限制显示条数。
例如:mysqldumpslow -s t -t 1 /dir/slow_query.log 表示按总时间排序,只显示一条记录
日志管理
运行时修改设置
打开关闭二进制日志 set sql log_bin = off
打开关闭常规查询日志 set global general_log = off
打开关闭慢查询日志 set global slow_query_log = off
日志清理
二进制日志的管理方式特殊,另外三种可以直接在磁盘上手动操作,(删除文件后要通过mysqladmin flush-logs重新写文件)。附上官方演示移动错误日志的例子 : https://dev.mysql.com/doc/refman/5.7/en/error-log-rotation.html
二进制日志有四个操作:
1、清除全部binlog : reset master
2、清除filename.n之前的binlog : purge master logs to '/dir/filename.n';
3、清除特定时间之前的binlog : purge master logs before 'YYYY-MM-DD hh:mm:ss'; (Q:!)
附上官方用法示例: https://dev.mysql.com/doc/refman/5.7/en/purge-binary-logs.html
错误记录:
1、配置文件格式错误
问题:
Found option without preceding group in config file
error: Found option without preceding group in config file: /etc/my.cnf at line: 1
解决:
在mysql配置文件最上面加一行
[mysqld]
2、MySQL存储data的文件目录权限异常
问题:
ERROR 1030 (HY000): Got error 168 - 'Unknown (generic) error from engine' from storage engine
解决:
chown -R mysql /var/run/mysqld
chgrp -R mysql /var/run/mysqld
3、单词写入的数据量太大 ,超过 max_allowed_packet 的限制
问题:
MySQL会根据配置文件会限制server接受的数据包的大小。如果写入大数据时,因为默认的配置太小,插入和更新操作会因为 max_allowed_packet 参数限制,而导致失败。
解决:
修改配置中 max_allowed_packet 的值