测试 MySQL 数据库复制/同步

测试 MySQL 数据库复制/同步

我正在设置一个 MySQL 主数据库,它可以复制到几个从属数据库。

我的问题是,监控和/或测试从属数据库是否是最新的最佳实践是什么,并且在出现导致复制停止的错误时向管理员发出警报。

我已经搜索过监控工具,但没有找到合适的工具。

此外,测试从属服务器之间的同步的“最佳实践”方法是什么。是否有类似数据库复制的单元测试?

如果我的无知冒犯了任何人,我深表歉意。

答案1

复制的最大问题是检查

  1. 所有节点均已启动,
  2. 所有节点都在通信(非裂脑)
  3. 并处理复制日志
  4. 以及复制滞后

1、3 和 4 可以在相关节点上使用 SHOW MASTER STATUS / SHOW SLAVE STATUS 捕获,尽管复制延迟只有 1 秒的精度,并且只跨越每一跳。Percona 工具包有用于获取更准确的复制滞后的脚本。

使用多主复制(例如佩科纳) 省去了很多麻烦,但需要额外的努力/软件来设置。

如果 ndoes 之间的网络出现故障,那么所有进程都可以正常运行 - 但无法传输数据 - 您需要监控每个节点以检查它是否可以联系上游节点。

一个 MySQL 主数据库,复制到几个从属数据库

最佳做法是将其中一个从服务器指定为主服务器 - 双向复制。这样,您可以在发生中断时或执行维护任务(例如重建索引、备份、架构更改)时轻松切换。

根据从属节点的数量,您可能还需要指定一个扇出节点来传播这些变化。

在管理升级、安排脚本来收集数据等方面,有很多可用的工具可以做到这一点 - 我使用 nagios,许多其他人也使用。

答案2

我的问题是,监控和/或测试从属数据库是否最新的最佳实践是什么,

为了进行简单测试,在主服务器上插入/更新数据并确保将其复制到从服务器上。

但对于一致性检验,pt-表校验和就是你要找的。

例如:

pt-table-checksum localhost --empty-replicate-table --databases db --nocheck-replication-filters --replicate percona.checksums > /var/log/pt-table-checksum.log 2>&1

当出现错误导致复制停止时,它会向管理员发出警报。

如果你使用 Nagios,检查mysql的健康插件可以帮助监控从属状态(运行与否)。但要监控一致性,请查看pmp-check-pt-表校验和插入。

不要错过pt-表同步如果你有任何不一致:

pt-table-sync -v --print --sync-to-master h=localhost,D=db,t=table
pt-table-sync -v --execute --sync-to-master h=localhost,D=db,t=table

请记住,您可能应该--print首先使用该选项。

答案3

在奴隶身上

SHOW SLAVE STATUS\G;

如果你收到以下信息:

   Slave_IO_Running: Yes
  Slave_SQL_Running: Yes

这意味着你几乎完成了,为了测试它,尝试在 MASTER 上执行任何写入事务,并确保它们在从属上自动复制

答案4

我已经搜索过监控工具,但没有找到合适的工具。

您可以使用Cacti 的 Percona MySQL 监控模板. 查看 MySQL 复制模板(使用该pt-heartbeat工具)。

干杯

相关内容