我正在设置一个 MySQL 主数据库,它可以复制到几个从属数据库。
我的问题是,监控和/或测试从属数据库是否是最新的最佳实践是什么,并且在出现导致复制停止的错误时向管理员发出警报。
我已经搜索过监控工具,但没有找到合适的工具。
此外,测试从属服务器之间的同步的“最佳实践”方法是什么。是否有类似数据库复制的单元测试?
如果我的无知冒犯了任何人,我深表歉意。
答案1
复制的最大问题是检查
- 所有节点均已启动,
- 所有节点都在通信(非裂脑)
- 并处理复制日志
- 以及复制滞后
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 上执行任何写入事务,并确保它们在从属上自动复制