首页 > 代码库 > 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的日志