mysqlbinlog 恢復數據注意事項
前言:
上次有個有個朋友恢復 MySQL 數據,一直恢復不成功,也沒有報錯信息,使用的環境是 MySQL 5.7 使用了 GTID 以及 binlog 格式為 ROW。現在我主要總結下沒有恢復成功可能的原因以及解決方法。
1.不要使用 base64-output=decode-rows 參數
--base64-output=decode-rows
主要是解析 ROW 級別 binlog 日志時使用。
我們解析日志的時候都會使用:
# mysqlbinlog -v --base64-output=decode-rows --start-position=XXX --stop-position=XXX mysql-bin.0000XX
這是我們解析 binlog 日志時使用的命令,我們可以很直觀的分析 binlog 日志。
但是我們想要恢復到數據庫中的時候,不能使用--base64-output=decode-rows
參數,否則是無法恢復到數據庫的。
2.是否使用--skip-gtids=true 參數
--skip-gtids=xxx
的作用為:mysqldump
是否使用--skip-gtids=true
參數,要根據情況來定;
第一種情況:
如果我們是要恢復數據到源數據庫或者和源數據庫有相同 GTID 信息的實例,那么就要使用該參數。如果不帶該參數的話,是無法恢復成功的。因為包含的 GTID 已經在源數據庫執行過了,根據 GTID 特性,一個 GTID 信息在一個數據庫只能執行一次,所以不會恢復成功。
# mysqlbinlog --skip-gtids=true mysql-bin.000012 |mysql -uroot -p
或者
# mysqlbinlog --skip-gtids=true mysql-bin.000012 > backup.sql mysql -uroot -p < backup.sql
第二種情況:
如果是恢復到其他實例的數據庫並且不包含源實例的 GTID 信息,那么可以不使用該參數,使用或者不使用都可以恢復成功。
轉自
mysqlbinlog恢復數據注意事項 – UnixFBI 運維特工 http://www.unixfbi.com/499.html