日志类型 | 描述 |
---|---|
错误日志 (Error Log) | 该日志文件会记录 MySQL 服务器的启动、关闭和运行错误等信息 |
通用查询日志(General Query Log) | 该日志记录 MySQL 服务器的启动和关闭信息、客户端的连接信息、更新、查询数据记录的 SQL 语句等 |
慢查询日志(Slow Query Log) | 记录执行事件超过指定时间的操作,通过工具分析慢查询日志可以定位 MySQL 服务器性能瓶颈所在 |
二进制日志(Binary Log) | 该日志文件会以二进制的形式记录数据库的各种操作,但不记录查询语句 |
错误日志
参数
mysql> show variables where variable_name="log_error" or variable_name="log_warnings";
+---------------+---------------------------------------------------+
| Variable_name | Value |
+---------------+---------------------------------------------------+
| log_error | D:\application\mysql-5.7.9-winx64\data\xxx_x.err |
| log_warnings | 2 |
+---------------+---------------------------------------------------+
log_error:错误日志的存放路径
log_warnings:表示是否记录告警信息到错误日志,0表示不记录告警信息,1表示记录告警信息,大于1表示各类告警信息,例如有关网络故障的信息和重新连接信息写入错误日志
通用查询日志
参数
mysql> show variables where variable_name like "%general_log%" or variable_name = "log_output";
+------------------+---------------------------------------------------+
| Variable_name | Value |
+------------------+---------------------------------------------------+
| general_log | OFF |
| general_log_file | D:\application\mysql-5.7.9-winx64\data\sp0029.log |
| log_output | FILE |
+------------------+---------------------------------------------------+
general_log:表示查询日志是否开启,ON表示开启,OFF表示未开启,默认为OFF
log_output:表示当查询日志开启以后,以哪种方式存放。FILE表示存放于文件中,TABLE表示存放于表mysql.general_log中(慢查询存放于表mysql.slow_log),FILE,TABLE表示同时存放于文件和表中,NONE表示不记录日志,log_output不仅控制查询日志,还控制慢查询日志。
general_log_file:表示查询日志存放于文件的路径
修改my.ini配置文件,需重启mysql服务生效
[mysqld]
general_log=ON
log_output=FILE
general_log_file=D:/application/mysql-5.7.9-winx64/general_log.log
动态设置通用查询日志,无需重启mysql服务
-- 开启
mysql> SET GLOBAL general_log = 'ON’;
-- 关闭
mysql> SET GLOBAL general_log = 'OFF';
慢查询日志
参数
mysql> SHOW VARIABLES WHERE variable_name LIKE 'slow_query%' OR variable_name = 'long_query_time' OR variable_name = 'log_queries_not_using_indexes';
+-------------------------------+--------------------------------------------------------+
| Variable_name | Value |
+-------------------------------+--------------------------------------------------------+
| log_queries_not_using_indexes | OFF |
| long_query_time | 10.000000 |
| slow_query_log | OFF |
| slow_query_log_file | D:\application\mysql-5.7.9-winx64\data\sp0029-slow.log |
+-------------------------------+--------------------------------------------------------+
slow_query_log:表示查询日志是否开启,ON表示开启,OFF表示未开启,默认OFF
slow_query_log_file:表示查询日志存放于文件的路径
long_query_time:表示多长时间的查询被认为"慢查询",默认10s
log_queries_not_using_indexes:表示如果运行的sql语句没有使用到索引,也被记录到慢查询日志,OFF表示不记录,ON表示记录,默认OFF
修改my.ini配置文件,需重启mysql服务生效
[mysqld]
slow_query_log=ON
slow_query_log_file=D:/application/mysql-5.7.9-winx64/slow_query_log.log
long_query_time=0.01
动态设置慢查询日志,无需重启mysql服务
-- 开启
mysql> SET GLOBAL slow_query_log = 'ON';
-- 关闭
mysql> SET GLOBAL slow_query_log = 'OFF';
分析慢日志
mysqldumpslow工具
可以借助perl (windows版下载地址: http://strawberryperl.com/)
perl ./bin/mysqldumpslow.pl slow_query_log.log
二进制日志
参数
mysql> show variables where variable_name="log_bin" or
variable_name="log_bin_basename" or variable_name="max_binlog_size" or
variable_name="log_bin_index" or
variable_name="binlog_format" or
variable_name="sql_log_bin" or
variable_name="sync_binlog";
+------------------+------------+
| Variable_name | Value |
+------------------+------------+
| binlog_format | ROW |
| log_bin | OFF |
| log_bin_basename | |
| log_bin_index | |
| max_binlog_size | 1073741824 |
| sql_log_bin | ON |
| sync_binlog | 1 |
+------------------+------------+
log_bin:表示二进制日志是否开启,ON表示开启,OFF表示未开启,默认OFF
max_binlog_size:二进制日志文件的最大大小,超过此大小,二进制文件会自动滚动
log_bin_index:二进制日志文件索引文件名,用于记录所有的二进制文件
binlog_format:决定了二进制日志的记录方式,STATEMENT以语句的形式记录,ROW以数据修改的形式记录,MIXED以语句和数据修改混合形式记录
sql_log_bin:决定是否对二进制日志进行日志记录,ON表示执行记录,OFF表示不执行记录,默认OFF,这个是会话级别变量可以通SET sql_log_bin = {0|1}来改变该变量值
sync_binlog:决定二进制日志写入磁盘时机,如果sync_binlog为0,操作系统来决定什么时候写入磁盘,如果sync_binlog为N(N=1,2,3..),则每N次事务提交后,都立即将内存中的二进制日志写入磁盘,如何选择取决于安全性与性能的权衡
二进制日志记录方式
- STATEMENT
记录对数据库做出修改的语句,比如,update A set test='test',那么这条update语句将被记录到二进制日志中
优点:
binlog日志量少,IO压力小,性能高
缺点:
记录语句本身外,可能还需要记录一些相关信息,而且,在使用一些特定函数时,并不能保证恢复操作与记录完全一致 -
ROW
记录对数据库做出的修改的语句所影响到的数据行以及这些行的修改,比如,update A set test='test',如果使用row模式,那么这条update所影响到的行所对应的修改,将会记录在binlog中
优点:
能完还原和复制被日志记录时的操作
缺点
日志量较大,IO压力比较大,性能消耗比较大 -
MIXED
混合上述两种模式,一般使用statement方式进行记录,如果遇到一些特殊函数使用row方式进行记录,这种记录方式称为mixed
修改my.ini配置文件,需重启mysql服务生效
[mysqld]
server-id=1
log_bin=my-bin
binlog_format=MIXED
常用binlog日志操作命令
查看所有binlog日志列表
show master logs;
查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值
show master status;
flush 刷新log日志,自此刻开始产生一个新编号的binlog日志文件
flush logs;
重置(清空)所有binlog日志
reset master;
查看binlog日志
mysqlbinlog工具
Usage: mysqlbinlog [options] log-files
mysqlbinlog --base64-output=decode-rows -v my-bin.000003
[options]节选
--base64-output=name :base64输出,[never/ decode-rows / auto]
-d, --database=name : 指定数据库
--start-datetime=name :开始时间, for example: 2004-12-25 11:25:56
--stop-datetime=name :结束时间, for example: 2004-12-25 11:25:56
--start-position=# :从二进制日志中读取指定position 事件位置作为开始
--stop-position=# :从二进制日志中读取指定position 事件位置作为事件截至
binlog events
mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
参数描述
IN 'log_name':指定要查询的binlog文件名(不指定就是第一个binlog文件)
FROM pos:指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
LIMIT [offset]:偏移量(不指定就是0)
row_count :查询总条数(不指定就是所有行)