在生产环境中,为了数据的安全,往往会布置多台,来保障数据冗余。然而,有时会因各种原因导致数据的不一致。我们不仅仅想知道哪些数据是不同的,相反,更要知道如何去修复这些不一致的数据来保障冗余数据是一样的。比如,主从,数据不一致重新做主从,效率太低了。此外还不能确定哪个库上的数据是最新的。因此想要看到两个方向的SQL转换语句。在这种情况下,mysqldbcompare工具非常实用。
mysqldbcompare如何使用就去看看前篇内容哈。 这节来说说如何使用mysqldbcompare来保证数据一致性。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqldbcompare-generate-difference-sql-sync-table/
比较生成差异性语句
需要对menagerie数据库有SELECT权限。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqldbcompare-generate-difference-sql-sync-table/
shell> mysqldbcompare --server1=root:root@localhost:13001 --server2=root:root@localhost:13002 \ menagerie -a --difftype=SQL --show-reverse --quiet # Checking databases menagerie on server1 and menagerie on server2 # # # Row counts are not the same among `menagerie`.`pet` and `menagerie`.`pet`. # # Transformation for --changes-for=server1: # DELETE FROM `menagerie`.`pet` WHERE `pet_num` = '10'; DELETE FROM `menagerie`.`pet` WHERE `pet_num` = '12'; INSERT INTO `menagerie`.`pet` (`pet_num`, `name`, `owner`, `species`, `sex`, `birth`, `death`) VALUES('11', 'Violet', 'Annette', 'dog', 'f', '2010-10-20', NULL); # # Transformation for reverse changes (--changes-for=server2): # # DELETE FROM `menagerie`.`pet` WHERE `pet_num` = '11'; # INSERT INTO `menagerie`.`pet` (`pet_num`, `name`, `owner`, `species`, `sex`, `birth`, `death`) # VALUES('10', 'JonJon', 'Annette', 'dog', 'm', '2010-10-20', '2012-07-01'); # INSERT INTO `menagerie`.`pet` (`pet_num`, `name`, `owner`, `species`, `sex`, `birth`, `death`) # VALUES('12', 'Charlie', 'Annette', 'dog', 'f', '2010-10-20', NULL); #
执行生成的语句
如果要让13001实例的数据与13002实例一致的话,需要执行下面的SQL语句:文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqldbcompare-generate-difference-sql-sync-table/
DELETE FROM `menagerie`.`pet` WHERE `pet_num` = '10'; DELETE FROM `menagerie`.`pet` WHERE `pet_num` = '12'; INSERT INTO `menagerie`.`pet` (`pet_num`, `name`, `owner`, `species`, `sex`, `birth`, `death`) VALUES('11', 'Violet', 'Annette', 'dog', 'f', '2010-10-20', NULL);
如果要让13002实例的数据与13001实例一致的话,需要执行下面的SQL语句:文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqldbcompare-generate-difference-sql-sync-table/
DELETE FROM `menagerie`.`pet` WHERE `pet_num` = '11'; INSERT INTO `menagerie`.`pet` (`pet_num`, `name`, `owner`, `species`, `sex`, `birth`, `death`) VALUES('10', 'JonJon', 'Annette', 'dog', 'm', '2010-10-20', '2012-07-01'); INSERT INTO `menagerie`.`pet` (`pet_num`, `name`, `owner`, `species`, `sex`, `birth`, `death`) VALUES('12', 'Charlie', 'Annette', 'dog', 'f', '2010-10-20', NULL);
是不是觉得这个工具非常的赞。妈蛋的,再也不用担心数据不一样了,哪里不会比较哪里。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqldbcompare-generate-difference-sql-sync-table/ 文章源自运维生存时间-https://www.ttlsa.com/mysql/mysqldbcompare-generate-difference-sql-sync-table/

评论