mysql - 如何使用 .sql 文件对 mysql 数据库进行增量备份?

标签 mysql sql-update

情况:我们的生产 mysql 数据库每天都会转储到 .sql 文件中。我想保留一个相对最新的影子数据库。
我知道要从 .sql 文件创建 mysql 数据库,可以使用:

mysql -u USERNAME -p DATABASENAME < FILE.SQL

对于我们的数据库,这需要 4-5 小时。不用说,我想减少它,并且我想知道是否有一种方法可以用新的/更改的内容来更新数据库。在第二天,有没有办法使用从生产数据库转储的新 .sql 文件来更新我的影子数据库?

最佳答案

MySQL 复制是正确的选择。

但是,如果无法做到这一点,请使用以下过程:

在所有表中都有一个修改后的时间戳列,并在插入/更改行时更新此值。

使用以下 mysqldump 选项获取增量 SQL 文件(这使用 REPLACE 命令而不是 insert 命令,因为现有记录将在备份数据库中更新)。

将时间戳值保存在文件系统中的某个位置。并在where条件下使用它。 MDFD_DATE 是您需要过滤的列名。成功备份后,更新文件中存储的值。

skip-tz-utc 阻止 MSQL 根据您的时区自动调整时间戳值。

mysqldump --databases db1,db2 --user=user --password=password --no-create-info --no-tablespaces --replace --skip-tz-utc --lock-tables --add-locks --compact --where=MDFD_DATE>='2012-06-13 23:09:42' --log-error=dump_error.txt --result-file=result.sql

使用新的 sql 文件并在您的服务器中运行它。

限制:

如果数据库中的某些记录被删除,此方法将不起作用。您需要手动从备份数据库中删除它们。否则,保留 DEL_FLAG 列并将其在生产中针对已删除的记录更新为“Y”,并使用此条件删除备份数据库中的记录。

关于mysql - 如何使用 .sql 文件对 mysql 数据库进行增量备份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11593319/

相关文章:

mysql - 选择所有数据,但在选择所有数据时对某些字段使用新名称

PHP SQL 从 2 个表中获取数据并输出想要的信息

mysql - 查询按字段中最后一个字符选择组

sql - 如何只更新 PostgreSQL 9.4 中另一个表的更改值?

mysql用另一个字符替换一个字符

mysql - 优化 MySQL 数据库的加载时间

mysql - 查询以获取项目计数,包括缺失数据的零

javascript - 如何用jsp变量传递onclick并直接到其他页面

sql - 将 JOIN 查询重写为子查询/更快的变体

sql - 来自两个有序数组的单个更新查询