首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysqlbinlog - Binlog在读取转储文件时有错误的魔术号错误。

问mysqlbinlog - Binlog在读取转储文件时有错误的魔术号错误。
EN

Database Administration用户
提问于 2021-06-08 14:58:57
回答 1查看 531关注 0票数 1

我正在学习MySQL,并在Windows10上使用MySQL服务器8.0执行一个测试点的时间恢复。我有一个问题-重播二进制日志如下。

首先,建立测试数据库。

代码语言:javascript
复制
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 Jones之后,但在我们执行不带WHERE子句的UPDATE之前,恢复这个点。

我提议的程序是:

  • 恢复完整的备份(带我们到约翰·史密斯被添加的地步)
  • 将二进制日志从采取完整备份的点还原到运行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可以使用的二进制日志文件

如果我尝试使用mysqlbinlog将我转储到文件中的binlog显示到它的完整性中的屏幕上:

mysqlbinlog C:\test\binlog.txt

我得到了

代码语言:javascript
复制
/*!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*/;

我可以使用mysqlbinlog --verbose MyPC-bin.000003 --database StackOverflow从服务器读取binlog。

但不能把它转储到一个文件里去读。

我在想,也许这是正在转储的文件的编码问题?

请有人告诉我如何使用mysqlbinlog读取转储的文件mysqlbinlog。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2021-06-10 16:39:32

使用mysqlbinlog --verbose MyPc-bin.000003 --database StackOverflow > C:\test\binlog.txt (即文件C:\test\binlog.txt )转储的不是二进制日志,因此不能将其用作binlog命令的源。

你应该做的是:

代码语言:javascript
复制
mysqlbinlog MyPc-bin.000003 --start-position=89925 --stop-position=90568 | mysql -uroot

也就是说,您仍然需要读取原始日志文件。

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/293942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档