mysqlbinlog - Binlog 在讀取轉儲文件時出現錯誤的幻數錯誤
我正在學習 MySQL 並在 Windows 10 上使用 MySQL Server 8.0 執行測試時間點還原。我在重新播放二進制日誌時遇到問題,如下所示。
一、設置測試數據庫
mysql -uroot -e "DROP DATABASE IF EXISTS StackOverflow;" mysql -uroot -e "CREATE DATABASE StackOverflow;" mysql -uroot StackOverflow -e "CREATE TABLE Users(FirstName VARCHAR(100),LastName VARCHAR(100));" mysql -uroot StackOverflow -e "INSERT INTO Users VALUES ('John','Smith');"
執行完整備份
mysqldump --databases StackOverflow --master-data=2 -uroot > C:\Test\SO.sql
更改更多數據
mysql -uroot StackOverflow -e "INSERT INTO Users VALUES ('Jimi','Jones');"
錯誤執行更新:
mysql -uroot StackOverflow -e "UPDATE Users SET LastName = 'Walker';"
從這裡開始,我想在我們
INSERT
ed Jimi Jones 之後,但在我們執行UPDATE
without theWHERE
clause 之前恢復這一點。我建議的流程是:
- 恢復完整備份(將我們帶到添加 John Smith 的位置)
- 將二進制日誌從進行完整備份的點恢復到
UPDATE
執行之前的點我執行如下:
將完整備份後的所有二進制日誌轉儲到文本文件中進行分析:
mysqlbinlog --verbose MyPc-bin.000003 --database StackOverflow > C:\test\binlog.txt
在這裡,我可以
C:\test\binlog.txt
在文本編輯器中打開併計算出我需要停止的日誌編號執行完全還原:
mysql -uroot < C:\Test\SO.sql
重播日誌:
mysqlbinlog C:\test\binlog.txt --start-position=89925 --stop-position=90568 | mysql -uroot
在這裡,我遇到了一個錯誤,我得到了
錯誤:Binlog 有錯誤的幻數;它不是這個版本的 MySQL 可以使用的二進制日誌文件
如果我嘗試只顯示我轉儲到文件中的 binlog,使用 mysqlbinlog 顯示到整個螢幕:
mysqlbinlog C:\test\binlog.txt
我明白了
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; ERROR: Binlog has bad magic number; It's not a binary log file that can be used by this version of MySQL SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
我可以使用從伺服器讀取 binlog
mysqlbinlog --verbose MyPC-bin.000003 --database StackOverflow
但不能將其轉儲到文件中並讀入。
我在想這可能是正在轉儲的文件的編碼問題?
請有人建議我如何使用 mysqlbinlog 讀取轉儲的文件 mysqlbinlog
您使用 轉儲
mysqlbinlog --verbose MyPc-bin.000003 --database StackOverflow > C:\test\binlog.txt
的內容,即文件C:\test\binlog.txt
,不是二進制日誌,因此您不能將其用作binlog
命令的來源。你應該做的是:
mysqlbinlog MyPc-bin.000003 --start-position=89925 --stop-position=90568 | mysql -uroot
也就是說,您仍然需要讀取原始日誌文件。