Binlog 是 MySQL 數據恢復、主從複制的核心。本文以 CentOS 6.5 + MySQL 5.1 為環境,詳解 SHOW BINLOG EVENTS、mysqlbinlog 工具的時間點/位置過濾、導出 SQL 文件、增量恢復等實操技巧,附完整命令示例與輸出解讀。
UPDATE ... LIMIT 1 可能導致主從不一致)、Row(基於行,記錄每行變更,複雜 UPDATE/DELETE 有優勢)、Mixed(混合模式)。-- 僅查看第一個 binlog 文件
SHOW BINLOG EVENTS;
-- 查看指定文件
SHOW BINLOG EVENTS IN 'binlog.000007';
-- 查看當前正在寫入的文件
SHOW MASTER STATUS \G;
-- 獲取所有 binlog 文件列表
SHOW BINARY LOGS;
/usr/local/mysql/bin/mysqlbinlog --no-defaults \
--start-datetime='2014-08-04 00:00:00' \
--stop-datetime='2014-08-13 23:59:59' \
-d wordpress binlog.000007
/usr/local/mysql/bin/mysqlbinlog --no-defaults \
--start-position=107 --stop-position=1000 \
-d wordpress binlog.000007
-force 強制讀取-vv 參數解析以 Windows 環境為例,逐段導出並驗證:
mysqlbinlog --start-position=4 --stop-position=106 \
yueliangdao_binglog.000001 > c:\test1.txt
輸出包含 START 事件、ROLLBACK 等元信息。
SET INSERT_ID=1
CREATE TABLE a1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
STR VARCHAR(1000)) ENGINE=MYISAM
INSERT INTO a1(str) VALUES ('I love you'),('You love me')
管道直接導入:
mysqlbinlog --start-position=134 --stop-position=330 \
yueliangdao_binglog.000001 | mysql -uroot -p
導出文件再 source:
mysqlbinlog --start-position=134 --stop-position=330 \
yueliangdao_binglog.000001 > test1.txt
mysql> SOURCE c:\test1.txt;
驗證:SELECT * FROM a1; 成功恢復兩行數據。
# 整個文件導出
cd /usr/local/mysql
./mysqlbinlog /usr/local/mysql/data/mysql-bin.000001 > /opt/001.sql
# 按時間導出單文件
./mysqlbinlog --stop-date="2009-04-10 17:41:28" \
/usr/local/mysql/data/mysql-bin.000002 > /opt/004.sql
# 按時間導出多文件(空格分隔,寫全路徑)
./mysqlbinlog --start-date="2009-04-10 17:30:05" \
--stop-date="2009-04-10 17:41:28" \
/usr/local/mysql/data/mysql-bin.000002 \
/usr/local/mysql/data/mysql-bin.000003 > /opt/004.sql
# 導出並直接導入
./mysqlbinlog --start-date="2009-04-10 17:30:05" \
--stop-date="2009-04-10 17:41:28" \
/usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p123456