我有一些 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 - 您可以使用 find
和 xargs
:
find . -name 'log-bin.[0-9]*' | sort | xargs mysqlbinlog | mysql -u root -p
关于mysql - 从许多 mysql bin 日志文件中恢复数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40118443/