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模式進行分析
[[email protected] 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的日誌