MySQL的二進制日志可以說是MySQL最重要的日志了,它記錄了所有的DDL和DML(除了數據查詢語句)語句,以事件形式記錄,還包含語句所執行的消耗的時間,MySQL的二進制日志是事務安全型的。一般來說開啟二進制日志大概會有1%的性能損耗(參見MySQL官方中文手冊 5.1.24版)。二進制有兩個最重要的使用場景:
其一:MySQL Replication在Master端開啟binlog,Mster把它的二進制日志傳遞給slaves來達到master-slave數據一致的目的。
其二:自然就是數據恢復了,通過使用mysqlbinlog工具來使恢復數據。
二進制日志包括兩類文件:二進制日志索引文件(文件名后綴為.index)用於記錄所有的二進制文件,二進制日志文件(文件名后綴為.00000*)記錄數據庫所有的DDL和DML(除了數據查詢語句)語句事件。
一、開啟binlog
在[mysqld] 區塊設置/添加 log-bin=mysql-bin 確認是打開狀態(值 mysql-bin 是日志的基本名或前綴名);
二、通過mysql的變量配置表,查看二進制日志是否已開啟
mysql> show variables like 'log_%'; +----------------------------------------+---------------------------------------+ | Variable_name | Value | +----------------------------------------+---------------------------------------+ | log_bin | ON | ------> ON表示已經開啟binlog日志 | log_bin_basename | /usr/local/mysql/data/mysql-bin | | log_bin_index | /usr/local/mysql/data/mysql-bin.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | log_error | /usr/local/mysql/data/martin.err | | log_output | FILE | | log_queries_not_using_indexes | OFF | | log_slave_updates | OFF | | log_slow_admin_statements | OFF | | log_slow_slave_statements | OFF | | log_throttle_queries_not_using_indexes | 0 | | log_warnings | 1 | +----------------------------------------+---------------------------------------+
三、binlog日志內容查看
binlog日志有二種查看方式,具體如下:
1、mysql查看binlog
mysql> show binlog events; #只查看第一個binlog文件的內容 mysql> show binlog events in 'mysql-bin.000002';#查看指定binlog文件的內容 mysql> show binary logs; #獲取binlog文件列表 mysql> show master status; #查看當前正在寫入的binlog文件
2、使用mysqlbinlog工具
mysqlbinlog是一個查看mysql二進制日志的工具,可以把mysql上面的所有操作記錄從日志里導出,這個工具默認的安裝路徑為:/usr/local/mysql/bin/mysqlbinlog
可以通過find / -name "mysqlbinlog"命令查找mysqlbinlog的工具路徑。
基於開始/結束時間:
/usr/local/mysql/bin/mysqlbinlog --start-datetime="2013-03-01 00:00:00" --stop-datetime="2014-03-21 23:59:59" /usr/local/mysql/var/mysql-bin.000007 -r test2.sql
參見:http://www.yaoguangkeji.com/a_4brldYkw.html
http://www.boydwang.com/2014/03/use-mysqlbinlog-to-restore-accidentally-deleted-data/