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