首页 > 代码库 > MySQL的日志

MySQL的日志

  • Error log:错误日志
  • Query Log:查询日志    general query log/slow query log:超过设定时间(long_query_time)或者没走索引的语句
  • Binary Log:二进制日志,记录数据被修改的相关信息


开启查询日志(一般不开):

mysql> show variables like general_log%;
+------------------+---------------------------+
| Variable_name    | Value                     |
+------------------+---------------------------+
| general_log      | ON                        |
| general_log_file | /data/3307/data/MySQL.log |
+------------------+---------------------------+

2 rows in set (0.00 sec)

慢查询参数
long_query_time=1  #查询超过1秒钟的
slow_query_log_file = /data/3307/log/mysql-slow.log #日志路径
log_queries_not_using_indexes  #没使用索引的语句
slow_query_log = 1


二进制日志

mysql> show variables like %log_bin%;
+---------------------------------+---------------------------------+
| Variable_name                   | Value                           |
+---------------------------------+---------------------------------+
| log_bin                         | ON                              |
| log_bin_basename                | /data/3307/data/mysql-bin       |
| log_bin_index                   | /data/3307/data/mysql-bin.index |
| log_bin_trust_function_creators | OFF                             |
| log_bin_use_v1_row_events       | OFF                             |
| sql_log_bin                     | ON                              |
+---------------------------------+---------------------------------+
6 rows in set (0.00 sec)


错误日志
log_error = /data/3307/log/mysql-error.log


二进制日志三种工作模式:
1、statement level:
每一条会修改数据的sql都会记录到master的bin-log中,slave在复制的时候sql进程会解析成和原来master端执行郭的相同sql来再次执行
优点:解决了row level下的缺点,不需要记录每一行数据的变化,减少bin-log日志量,节省IO,只记录master上执行的sql及上下文信息
缺点:很多情况下会有复制问题出现,在使用函数,存储过程等

2、row level
日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改
优点:不记录执行sql上下文信息,只记录哪一行被修改,可以解决存储过程,function,trigger的调用和触发无法被正确复制的问题。
缺点:记录一条语句改变的每行,日志量大,特别是表结构发生变化的时候。

3、mixed
根据执行的每一条具体sql来区分对待日志形式,例如遇到表结构改变等,就会用statement level模式,如果sql语句update,delete等修改数据的语句,会记录所有行的变更。

mysql> mysql> show variables like %binlog_format%;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)

 

配置文件修改:
binlog_format=STATEMENT,ROW,MIXED

会话级别修改:set session binlog_format="STATEMENT","ROW","MIXED"
全局级别修改:set global binlog_format="STATEMENT","ROW","MIXED"


下面这条命令,可以将row模式下的binlog解析成statement模式进行分析
[root@MySQL data]# mysqlbinlog --base64-output=decode-rows -v mysql-bin.000006

 

mysql> show variables like %binlog_format%;
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)

mysql> set session binlog_format="row";
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> 
mysql> show variables like ‘%binlog_format%‘;
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.01 sec)

 

mysqlbinlog -->解析mysql的bin-log日志

mysqlbinlog mysql-bin.0000001 --start-position=234 --stop-position=345 -r full.sql

 

MySQL的日志