本文选用的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 的值