【问题标题】:Importing incremental backups in MySQL在 MySQL 中导入增量备份
【发布时间】:2018-07-24 13:22:28
【问题描述】:

我正在使用以下命令在MySQL中创建增量备份

mysqldump -uusername -ppassword db_name --flush-logs > D:\dbname_incremental_backup.sql

但是sql 文件与完整备份一样大,显然导入它也需要很长时间。谁能告诉我如何创建增量备份并仅从每个增量备份中导入新数据,而不是再次导入整个数据库?

我已经阅读了 dev.mysql.com 中的所有相关文章,但仍然不明白该怎么做。

【问题讨论】:

    标签: mysql backup


    【解决方案1】:

    mysqldump 仅创建完整备份。增量备份没有内置功能。

    对于那种你可能想要Percona xtrabackup 的东西,但这仅适用于 InnoDB 表。这通常不是问题,因为使用 MyISAM 表被认为是极其有害的。

    【讨论】:

    • 我使用 InnoDB 表,所以这不是问题。令我惊讶的是,如果我必须从昨天开始导入数据库上的数据,我需要进行完整备份
    【解决方案2】:

    默认情况下,mysql 转储会删除表,从而无法进行增量更新。如果您打开生成的文件,您将看到如下内容: DROP TABLE IF EXISTS `some_table_name`;

    您可以使用--no-create-info 选项创建转储而不转储并创建新表。为了使您的转储对增量导入友好,您还应该使用 --skip-extended-import 它将插入拆分为每行一个插入语句。结合在导入中使用--force 将意味着插入存在的行将失败,但导入将继续。您最终会在日志中看到已存在行的错误,但会根据需要插入新行。

    您应该可以使用以下命令导出(我还建议您不要在命令中输入密码,这样它就不会出现在您的历史记录中) 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

    【讨论】:

    • 这看起来很有希望!您有没有找到更好的方法来实现这一目标?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 2017-05-05
    相关资源
    最近更新 更多