MySQL管理工具MySQL Utilities — mysqldiff(11)

  • A+
所属分类:MySQL

mysqldiff 顾名思义就是来diff比较的,相当于Linux下的diff命令。mysqldiff 用来比较对象的定义是否相同并显示不同的地方,mysqldiff 是通过对象名称来进行比较的。如果要比较数据是否一致,那就要用到mysqldbcompare了,参见前面文章。

当指定了数据库对,所有的对象就要进行比较。如果其中某个库中出现的对象在另一个库中没有出现,将报错。信息如下所示:

# WARNING: Objects in server2.ttlsa_com but not in server1.ttlsa_com:
# TABLE: t
Compare failed. One or more differences found.

如果要比较特定对象,使用db.obj 格式。db1.obj1:db2 和db1:db2.obj2 这样类型的格式是非法的。报错信息如下所示:

mysqldiff: error: Incorrect object compare argument, one specific object is missing. Please verify that both object are correctly specified. No object has been specified for db1 'ttlsa_com', while object 't' was specified for db2 'ttlsa_com'. Format should be: db1[.object1]:db2[.object2].

比较同一实例上的不同数据库只需要指定--server1,不同的实例的话还需要指定--server2。 在这种情况下,数据库对左边的对象来自server1,右边的对象来自server2。

执行完后,会生成一个差异报告。也可以生成一个转换的SQL语句报告来更改使两者相同。

输出类型,也就是difftype选项值:

  • unified (默认)显示统一的格式输出.
  • context以上下文格式输出
  • differ以differ-style 格式输出.
  • sql以生成转换SQL语句输出.

要对两物进行比较,就需要参照物。参照物可以任意选定,可以选server1,也可以选server2,选择不同的参照物来描述同一物体的状态,可能得出的结论不同。“小小竹排江中游,巍巍青山两岸走” 一样的道理不是么?

--changes-for选项来控制对比方向。默认是以server1。同时显示,可以使用--show-reverse选项。

  • --changes-for=server1: 以server2为参照物,针对server1
  • --changes-for=server2:以server1为参照物,针对server2

选项:

以SQL输出的限制有:

  1. 对于分区表,如果分区表有差异,将对所有的改变生产 ALTER TABLE 语句,显示经过并省略分区差异。
  2. 事件重命名不支持。
  3. 不支持事务定义的条款。
  4. 不支持MySQL Cluster 的SQL扩展特性。

实例:

权限:

对两者对象要有SELECT 权限,同时,还需要对mysql数据库有SELECT权限。

weinxin
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~

评论已关闭!

目前评论:1   其中:访客  1   博主  0

    • seanlook 1

      mysqldiff 不能在对象不存在时,生产create语句,也不能单独避免比较auto_increment。
      这个分支添加了这些特性 https://github.com/seanlook/mysql-utilities/commits/master