1. 程式人生 > >MySQL的日誌

MySQL的日誌

rust dex 路徑 bin-log val blog log_file eight 行數據

  • 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的日誌