Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 备份和还原数据库的一部分_Mysql_Database_Backup - Fatal编程技术网

Mysql 备份和还原数据库的一部分

Mysql 备份和还原数据库的一部分,mysql,database,backup,Mysql,Database,Backup,我解释我的情况。我有几个自动更新的网站(比如Wordpress,但我的问题是一般性的),一些自动更新的插件,一个写文章、创建页面的管理员(标准pc用户)。。 每天我都对每个站点的文件和数据库进行完整备份,并将其存储在存储设备上6个月 让我们假设在第一天一切都正常。 在第2天,我的网站自动更新成功。 在第三天,管理员会插入很多东西,比如很多页面和帖子。 在第4天,管理员注意到插件停止正常工作(可能是因为更新)。 在第5天,管理员就插件的问题向维护站点的人(我)提出建议 问题:使用第1天的备份还原数

我解释我的情况。我有几个自动更新的网站(比如Wordpress,但我的问题是一般性的),一些自动更新的插件,一个写文章、创建页面的管理员(标准pc用户)。。 每天我都对每个站点的文件和数据库进行完整备份,并将其存储在存储设备上6个月

让我们假设在第一天一切都正常。 在第2天,我的网站自动更新成功。 在第三天,管理员会插入很多东西,比如很多页面和帖子。 在第4天,管理员注意到插件停止正常工作(可能是因为更新)。 在第5天,管理员就插件的问题向维护站点的人(我)提出建议

问题:使用第1天的备份还原数据库,但插入第3天备份中的内容。 在Wordpress上,我可能可以手动修复问题,恢复第1天的db,并用第3天的db替换
wp_post

到目前为止,我的问题更为笼统:如何每天(或每小时)只保存修改、添加或删除数据库行的SQL文件(或其他格式)? 因此,在解释的场景中,我应该有如下备份文件:

day1diffs.sql
day2diffs.sql
...

我怎样才能得到这个结果?或者更好,遵循这条路线是否有用

这是个难题。当我们只讨论InnoDB表时,您有两个原因:

第一名:

使用xtrabackup,您可以在每个月的第1天进行增量备份。您可以在每个星期日进行0(完整)备份,级别为1。这只是0级备份与其他日期的2级备份和每小时3级备份之间的区别。所以你有非常小的片段,可以回到每个时间点。 此备份不会停止或阻止服务器(仅在很短的时间内)从每个Tablediff生成二进制副本,然后保存二进制日志

秒:


每周一次mysqldump或者你想要的任何东西,并保存二进制日志一周以上。您可以使用rsync将其复制以存档。因此,您也可以转到每个时间点,但必须恢复备份,然后必须将Binlog从备份点插入到所需的点。如果你的mysqldump已经5天了,那么你必须全部导入!!!binlogs从转储日期开始到您想要的日期。这可能需要很多时间。

每天备份并打开MySQL二进制日志记录,以维护完整的逐步更改列表。有了它,您可以恢复到任何有备份和日志的时间点

log-bin=mysql-bin.log
relay-log=mysqld-relay-bin
server-id=1
binlog-format=MIXED
expire_logs_days=29
您可以使用二进制日志来重播上次备份时的所有查询,并且有工具以不同的形式从日志中提取数据

执行备份以从备份点创建新日志文件时,向数据库发出“刷新日志”查询


更高级的是,还可以将日志以近乎实时的方式复制到远程主机,以获得额外的安心。

解决方案1可能与我正在寻找的类似。你能深入一点吗?解决方案1只能使用外部软件执行,还是可以编写一些触发器?我的目标是回到时间的每一点,可能有或没有一些片段(即问题),xtrabackup“只是”一个用于备份和恢复的工具,您可以直接从命令行使用它。因此,我编写了一个小的shell脚本,每周备份0,每天早上备份1,每小时备份2,并将结果存储在目录树中(每周一个目录,每天一个子目录在此目录中,每小时一个目录用于小时备份),这样我就必须立即恢复。这个工具是免费的,我找到了一个很好的教程:你可以更好地阅读它。我的英语不是很好,不能把每件事都说清楚。如果你有更多的问题,你可以写信或打电话给我——对不起,我很想听听你的意见——你的英语足够好,可以说很多好话。非常感谢。一旦我测试了它,我就会发布结果。