情况:我们的生产 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/