mysql - 从许多 mysql bin 日志文件中恢复数据库

标签 mysql mysqlbinlog

我有一些 MYSQL 二进制日志文件以及二进制索引文件 ( https://dev.mysql.com/doc/refman/5.6/en/point-in-time-recovery.html )。

文件如下所示:log-bin.000001 , log-bin.000002 , log-bin.000003 .

我还有一个log-bin.index文件看起来像这样:

/path/to/mysql-bin-dump-logs/log-bin.000001
/path/to/mysql-bin-dump-logs/log-bin.000002
/path/to/mysql-bin-dump-logs/log-bin.000003

根据文档,使用这些日志文件恢复数据库的方法如下:

mysqlbinlog log-bin.000001 log-bin.000002 log-bin.000003 | mysql -u root -p

当恢复少量文件时,这还不算太糟糕,但当从许多文件(例如 1000 个日志文件)恢复时,这会带来很大的不便。

如何在不明确说明每个文件的情况下恢复我的数据库?

最佳答案

定期进行备份。

您只需将二进制日志重播回进行备份时的当前状态即可。

备份工具可以选择记录备份运行时当前的二进制日志文件和位置。例如:

mysqldump --master-data=1 ...

仅使用二进制日志来恢复数据库效率很低,特别是如果数据库更改历史记录包括一些更新和删除、更改表、删除表等。因为二进制日志会重播所有更改,即使那些后来被撤销或删除的内容。

如果您使用数据库备份,它仅记录数据的当前状态,跳过备份前数百天所做的所有更改。

恢复备份要快得多,并且不需要您永远保留数千个二进制日志文件。

<小时/>

要从字面上回答您的问题 - 如何方便地针对 1000 个文件运行 mysqlbinlog - 您可以使用 findxargs:

find . -name 'log-bin.[0-9]*' | sort | xargs mysqlbinlog | mysql -u root -p

关于mysql - 从许多 mysql bin 日志文件中恢复数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40118443/

相关文章:

mysql - phpmyadmin,mysql - token 不匹配,但我成功创建了一个表

MySQL,mysqlbinlog加载错误后恢复数据库?

MySQL插入当前时间戳

php - 如果用户在 1 小时内发表超过 5 条评论,则重定向用户

mysql - 添加与主 ID 键链接的其他表中的名称

mysql - 从/var/log/mysql中删除mysql-bin.****文件

Mysql - 仅从数据库中复制几个表

mysql - 当您不知道第一个文件名时(由于远程服务器上的轮换),如何检索所有远程 mysql 二进制日志文件

java - 是否可以使 Debezium 引擎与 binglog_format 为 MIXED 而不是 ROW 的 mysql 一起工作

mysql - SQL - 仅 if 语句