5

I have two mysql databases on two machines. Let's say first is production db and the second one is identical clone. My php app uses production db for default. But I need to have both dbs identical at the same time. It means I need solution for cases when production db is unavailable (for example connection error) so I just manually set second one and my app runs as usual. I would like to make it "failure resistant".

How should I do this? I think of making dump every minute but it is not a good solution when db is complex with many data...

4

1 回答 1

1

这些答案假定标准复制不是您的选择,无论出于何种原因:

以下选项是众所周知的手动数据同步的现有方法,并且当包装成脚本语言(如bash等)时会很好,用于根据需要使用一些逻辑来指定特定表的 cronjob,保证它是安全的在生产箱上根据负载等运行它们。

选项 1:pt-table-sync

Percona MySQL 工具包中的pt-table-sync工具允许在现有复制方案中按需进行主-主、主从同步。或者您可以使用它来同步两个没有任何关系的服务器。

来自 Percona 的文档

按照示例,一种方式同步。

pt-table-sync --execute h=sourcehost1,u=msandbox,p=msandbox h=desthost d=yourdb t=yourtables

此外,还存在以下功能:

  1. 空运行模式 (--dry-run) - 程序将连接、计划同步、分析冲突并告诉您它将如何解决同步。这是确保您以正确方式使用这个强大工具的关键。
  2. 冲突分析 - 查看数据如何比较 - 将其反馈到您的脚本中以捕捉潜在问题,或者如果没有差异则不执行同步以节省时间。

据我了解,主从关系不一定存在 - 但如果确实存在同步会更有效,因为可以使用更有效的校验和算法来比较数据。

选项 2:使用 XtraDb 进行热/流备份 或者,您可以在主机模式下使用免费的 Percona XtraBackup 之类的东西streaming来保持备份文件同步,并根据需要恢复到您的开发盒。

XtraBackup 为 Percona Server、MySQL、MariaDB 和 Drizzle 的所有版本进行 MySQL 热备份。它执行流式、压缩和增量 MySQL 备份。

选项 C:LVM 快照 LVM 快照可能不是生产设备的最佳选择,如果由于短暂的锁定/IO 问题而需要以任何频率获取它们,但尽管如此,请继续:使用 LVM 快照的 MySQL 备份

所有这些工具都可以单向或双向移动数据 - 因为彻底了解如何使用它们对于避免数据丢失至关重要。

于 2013-08-11T22:17:31.557 回答