我有一个MySQL
数据库,其中包含一些表,每天都会向每个表添加一些记录。我已经开发了一个shell script
包含mysqldump
命令,每天从每个表的第一条记录备份该数据库。我想知道是否有办法在数据库中备份新生成的数据而不是第一条记录中的所有数据。
答案 0 :(得分:1)
正如Backup and Recovery Types所述:
通过启用二进制日志进行增量备份
MySQL支持增量备份:您必须使用
--log-bin
选项启动服务器以启用二进制日志记录;见Section 6.4.4, “The Binary Log”。二进制日志文件为您提供了在执行备份之后复制数据库所需的信息。目前,您要进行增量备份(包含自上次完全备份或增量备份以来发生的所有更改),您应该使用FLUSH LOGS
轮换二进制日志。完成此操作后,您需要将所有二进制日志复制到备份位置,这些日志的范围从上次完全备份或增量备份到最后一个备份之一。这些二进制日志是增量备份;在恢复时,您按照Section 8.5, “Point-in-Time (Incremental) Recovery Using the Binary Log”中的说明应用它们。下次执行完整备份时,还应使用FLUSH LOGS
或mysqldump --flush-logs轮换二进制日志。请参阅Section 5.5.4, “mysqldump — A Database Backup Program”。
答案 1 :(得分:1)
您不会使用mysqldump获得增量备份,但您可以启用二进制日志记录,然后偶尔获取日志。显然,你也需要一个干净的,相当新近的数据文件副本。请查看手册以获取更多信息和策略:http://dev.mysql.com/doc/refman/5.7/en/backup-and-recovery.html
答案 2 :(得分:1)
您可以让MySQL编写所有已执行的插入/更新语句的(二进制)日志,并在恢复时重放该日志。 MySQL也建议将其用于灾难恢复(http://dev.mysql.com/doc/refman/5.7/en/binary-log.html)。
使用mysqlbinlog
工具完成查看和恢复,您可以将其输出直接传递给mysql
以执行语句。
如果您采用此策略,请确保在完成数据库的完全转储后让MySQL将二进制日志翻转到新文件,以确保备份后的新更改最终会在binlog中结束
某些系统每次更新时都会更新行中的时间戳。如果您的软件这样做,您可以使用它,或者您可以添加自己的列并通过为每次更新/插入执行的数据库触发器更新它。但请记住,这可能会减慢操作速度,特别是对于大量数据集的批处理,您应该找到不同的解决方案。