复制建立后,时常会担心从的数据是否与主一致。在正常的情况下,主从数据是一样的。不过,在数据层面上的故障引起数据更改而不抛出任何类型的错误导致不一致。这些数据的不一致可能是由bug、硬件故障、人为错误或未经授权的访问导致的。
理想的状态是检测这些问题,如有问题解决之,并防止再次发生。确定发生的原因可能不是一件容易的事,然而,解决检测数据一致性问题并确保服务器之间复制是同步的。文章源自运维生存时间-https://www.ttlsa.com/mysql/check-replicate-data-consistency/
mysqlrplsync 工具来检测数据一致性问题,确保主从同步。文章源自运维生存时间-https://www.ttlsa.com/mysql/check-replicate-data-consistency/
假设主服务器server1:3310,从服务器server2:3311, server3:3312,它们之间的复制没有出现错误。文章源自运维生存时间-https://www.ttlsa.com/mysql/check-replicate-data-consistency/
实例
启动mysqlrplsync工具,检查指定的服务器文章源自运维生存时间-https://www.ttlsa.com/mysql/check-replicate-data-consistency/
shell> mysqlrplsync --master=user:pass@localhost:3310 \ --slaves=rpl:pass@localhost:3311,rpl:pass@localhost:3312 # # GTID differences between Master and Slaves: # - Slave 'localhost@3311' is 15 transactions behind Master. # - Slave 'localhost@3312' is 12 transactions behind Master. # # Checking data consistency. # # Using Master 'localhost@3310' as base server for comparison. # Checking 'test_rplsync_db' database... # - Checking 't0' table data... # [OK] `test_rplsync_db`.`t0` checksum for server 'localhost@3311'. # [OK] `test_rplsync_db`.`t0` checksum for server 'localhost@3312'. # - Checking 't1' table data... # [OK] `test_rplsync_db`.`t1` checksum for server 'localhost@3311'. # [OK] `test_rplsync_db`.`t1` checksum for server 'localhost@3312'. # Checking 'test_db' database... # - Checking 't0' table data... # [OK] `test_db`.`t0` checksum for server 'localhost@3311'. # [OK] `test_db`.`t0` checksum for server 'localhost@3312'. # - Checking 't1' table data... # [OK] `test_db`.`t1` checksum for server 'localhost@3311'. # [OK] `test_db`.`t1` checksum for server 'localhost@3312'. # #...done. # # SUMMARY: No data consistency issue found. #
上面的例子说明如何使用mysqlrplsync工具来检查复制拓扑中的所有数据是否同步的。--master选项指定主,--slaves选项列出所有的从,也可以使用 --discover-slaves-login 选项来代替 --slaves 选项自动发现连接到主的从,要指定用户名和密码的。文章源自运维生存时间-https://www.ttlsa.com/mysql/check-replicate-data-consistency/
在上面的例子中,数据一致性没有问题。如果有发现数据差异,会在前面显示[diff]并显示简洁的信息,此外,还在最后显示发现问题的数量的摘要。文章源自运维生存时间-https://www.ttlsa.com/mysql/check-replicate-data-consistency/
该工具也允许查看从,而不必指定主,不过,不能保证与主的数据一致的。文章源自运维生存时间-https://www.ttlsa.com/mysql/check-replicate-data-consistency/
注意:每个表的检查是有时效性的,这是因为数据在持续的改变,除非锁定表。文章源自运维生存时间-https://www.ttlsa.com/mysql/check-replicate-data-consistency/
权限
对于主,用户必须要有锁定表、校验和获取主状态信息的权限。具体来说要有SUPER 或 REPLICATION CLIENT, LOCK TABLES 和 SELECT 权限。文章源自运维生存时间-https://www.ttlsa.com/mysql/check-replicate-data-consistency/
对于从,用户必须要有 start/stop 从、校验和获取从状态信息的权限。具体来说要有SUPER 和 SELECT。文章源自运维生存时间-https://www.ttlsa.com/mysql/check-replicate-data-consistency/
小技巧
在上述的例子中,mysqlrplsync工具检查服务器上的所有的数据,也是可以只检查特定的数据库和表的,在使用时指定目标数据库和表。也可以排除某些数据库和表的,使用--exclude选项。如'--exclude=test_rplsync_db,test_db.t0'排除test_rplsync_db库和test_db.t0表。文章源自运维生存时间-https://www.ttlsa.com/mysql/check-replicate-data-consistency/
该工具提供了校验超时时间和等待从达到既定同步点时间的选项,分别是--checksum-timeout 和 --rpl-timeout 选项。更具体的用法参见前文mysqlrplsync。文章源自运维生存时间-https://www.ttlsa.com/mysql/check-replicate-data-consistency/ 文章源自运维生存时间-https://www.ttlsa.com/mysql/check-replicate-data-consistency/

2F
mscheck
1F
自己写的?
B1
@ svan.xiean 是的。