2

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

mysql -u USERNAME -p DATABASENAME < FILE.SQL

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

4

3 回答 3

1

这个问题可以使用 mysql同步来解决。

于 2012-07-21T15:19:04.263 回答
1

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”以用于已删除的记录,并使用此条件删除备份数据库中的记录。

于 2012-07-21T15:33:02.527 回答