Mysql

mysqlbinlog - Binlog 在讀取轉儲文件時出現錯誤的幻數錯誤

  • June 10, 2021

我正在學習 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';"

從這裡開始,我想在我們INSERTed Jimi Jones 之後,但在我們執行UPDATEwithout the WHEREclause 之前恢復這一點。

我建議的流程是:

  • 恢復完整備份(將我們帶到添加 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

也就是說,您仍然需要讀取原始日誌文件。

引用自:https://dba.stackexchange.com/questions/293942