MySQL管理工具MySQL Utilities — 生成差异SQL语句来同步表数据(5)

默北 MySQLMySQL管理工具MySQL Utilities — 生成差异SQL语句来同步表数据(5)已关闭评论20,4682字数 2388阅读7分57秒阅读模式

在生产环境中,为了数据的安全,往往会布置多台,来保障数据冗余。然而,有时会因各种原因导致数据的不一致。我们不仅仅想知道哪些数据是不同的,相反,更要知道如何去修复这些不一致的数据来保障冗余数据是一样的。比如,主从,数据不一致重新做主从,效率太低了。此外还不能确定哪个库上的数据是最新的。因此想要看到两个方向的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/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
默北
  • 本文由 发表于 15/01/2015 01:00:12
  • 转载请务必保留本文链接:https://www.ttlsa.com/mysql/mysqldbcompare-generate-difference-sql-sync-table/