我解释了我的情景。我有几个网站(例如,让我们说Wordpress,但我的问题是一般性的),包括自动更新,一些带有自动更新的插件,一个管理员(标准pc用户),他们写帖子,创建页面,... 我每天都会对每个站点的文件和数据库进行完整备份,并将其存储在存储设备上6个月。
我们假设在第1天一切正常。 在第2天,我的网站成功进行了自动更新。 在第3天,管理员插入了很多东西,例如许多页面和许多帖子。 在第4天,管理员注意到插件停止正常工作(可能是由于更新)。 在第5天,管理员建议维护网站(我)关于插件的问题。
问题 :使用第1天的备份恢复数据库,但是从第3天的备份中插入内容。
在Wordpress上,我可以通过恢复第1天db来手动解决问题,并将wp_post
表替换为第3天db。
到目前为止,我的问题更为通用 :我如何每天(或每小时)保存一个SQL文件(或其他格式)仅修改,添加或删除了数据库的行? 所以在解释的场景中,我应该有这样的备份文件:
day1diffs.sql
day2diffs.sql
...
我如何获得此结果?或者更好,遵循这条线可能有用吗?
答案 0 :(得分:1)
这是一个棘手的问题。当我们只谈InnoDB表时,你有两个原因:
<强>第一强>
使用xtrabackup,您可以每次进行增量备份。 1个月你可以备份0(完整),每个星期日级别1.它只是级别0和其他天级别2级备份和每小时级别3备份之间的差异。所以你有很小的碎片,可以回到每个时间点。 这个备份不会停止或阻止服务器(只有很短的时间)从每个Tablediff生成一个二进制副本,然后保存这个二进制日志。
<强>第二强>
每周制作一次mysqldump或者你想要的东西,并将二进制日志保存一周以上。你可以用rsync复制它来存档它。因此,您也可以转到每个时间点,但必须恢复备份,然后必须将备份点中的binlog插入到您想要的位置。如果你的mysqldump 5天大,所以你必须全部导入! binlogs以转储日期开始到您想要的日期。这可能需要很长时间。
答案 1 :(得分:1)
进行每日备份并打开MySQL二进制日志记录,以维护完整的分步更改列表。有了这个,您可以恢复到备份和登录的任何时间点。
log-bin=mysql-bin.log
relay-log=mysqld-relay-bin
server-id=1
binlog-format=MIXED
expire_logs_days=29
您可以使用二进制日志重播上次备份时的所有查询,并且有工具以不同的形式从日志中提取数据。
发出&#34; FLUSH LOGS&#34;在进行备份以从备份点创建新日志文件时查询数据库。
获得更高级功能,还有tools可以近乎实时地将日志复制到远程主机,让您高枕无忧。