我用mysqldump备份的整个数据库,恢复备份文件时,会替换数据库中原有的记录。
因为备份时备份了表的主键,恢复时的INSERT语句中也包含了主键的值。数据库中记录的主键和备份文件的主键相同时,前者就被后者替换。
可是我要的不是这种效果,我想恢复时,数据库中已有的记录不动,备份文件恢复时是增量的。目前我的解决办法是用程序代码直接修改备份文件,去掉INSERT语句中的主键部分。但算法一直有问题,而且感觉这样效率很低。大家有什么办法吗?比如在备份时就直接忽略主键?
因为备份时备份了表的主键,恢复时的INSERT语句中也包含了主键的值。数据库中记录的主键和备份文件的主键相同时,前者就被后者替换。
可是我要的不是这种效果,我想恢复时,数据库中已有的记录不动,备份文件恢复时是增量的。目前我的解决办法是用程序代码直接修改备份文件,去掉INSERT语句中的主键部分。但算法一直有问题,而且感觉这样效率很低。大家有什么办法吗?比如在备份时就直接忽略主键?
binlog是实现增量备份的好方法
要想进行增量备份,我们需要保存增量更改。应使用--log-bin选项启动MySQL服务器,以便更新数据时将这些更改保存到文件中。该选项启用二进制日志,因此服务器写将每个更新数据的SQL语句写入MySQL二进制日志。让我们看看用--log-bin选项启动的已经运行多日的MySQL服务器的数据目录。我们找到以下MySQL二进制日志文件:一个变通的办法是启用binlog(二进制日志),然后每天刷新一下,产生新的binlog,把旧的日志备份起来,就相当于增量备份了。
导入到另一个数据库中的表中,用
INSERT INTO NEWTT
SELECT A.* FROM LSB A LEFT JOIN NEWTT B ON A.ID=B.ID WHERE B.IS IS NULL这种方法不如直接用增量备份
因为备份时备份了表的主键,恢复时的INSERT语句中也包含了主键的值--------------------------
你这样是全量备份了
其实你这样的需求,用差异备份恢复就可以轻松实现了:只需要第一次进行全量备份恢复,之后都用增量备份恢复就可以了,至于“增量备份恢复”的方法,前面几楼的都说得很清楚了
最好的解决方法
先执行FLUSH LOGS刷新日志,同步日志缓存到磁盘,关闭当前的日志并产生新的日志文件。
拷贝上一次完整备份或增量备份后的一个或一些日志文件到一个安全的地方。
这样就制作了一个增量备份。增量恢复:
使用mysqlbinlog执行增量备份的日志文件。