我正在使用以下命令在MySQL
mysqldump -uusername -ppassword db_name --flush-logs > D:\dbname_incremental_backup.sql
然而,该sql
文件与完整备份一样大,显然导入它也需要很长时间。谁能告诉我如何创建增量备份并仅从每个增量备份中导入新数据,而不是再次导入整个数据库?
我已经阅读了 dev.mysql.com 中的所有相关文章,但仍然不明白该怎么做。
mysqldump
仅创建完整备份。增量备份没有内置功能。
对于那种事情,您可能需要Percona xtrabackup但这仅适用于 InnoDB 表。这通常不是问题,因为使用 MyISAM 表被认为是极其有害的。
默认情况下,mysql 转储将删除表,从而无法进行增量更新。如果您打开生成的文件,您将看到如下内容:
DROP TABLE IF EXISTS `some_table_name`;
您可以使用--no-create-info选项创建转储而不转储和创建新表。为了使您的转储对增量导入友好,您还应该使用 --skip-extended-import 它将插入拆分为每行一个插入语句。结合 using --force
on import 将意味着插入存在的行将失败,但导入将继续。您最终会在日志中看到已经存在的行的错误,但会根据需要插入新行。
您应该可以使用以下命令导出(我还建议不要在命令中输入密码,以免它出现在您的历史记录中)
mysqldump -u username -p --no-create-info --skip-extended-insert db_name --flush-logs > D:\dbname_incremental_backup.sql
然后,您可以使用以下命令导入:
mysql -u username -p --force db_name < D:\dbname_incremental_backup.sql