mysqldiff使用笔记

背景

手上有个项目,有三个环境:本地开发,测试环境,线上环境,历史原因怀疑数据库表字段可能出现不匹配,所以寻找合适的工具比较数据库表结构。找到了mysqldiff。

参考文档 https://www.awaimai.com/1513.html

准备工具

首先http://downloads.mysql.com/archives/utilities/下载的工具在osx 10.15上面没法安装,另寻他法。

正好手上有台windows机器,使用windows版本测试

安装

mysqldiff是MySQL Utilities中的一个脚本,默认的MySQL不包含这个工具集,所以需要独立安装。

语法

mysqldiff的语法格式是:

$ mysqldiff --server1=user:pass@host:port:socket --server2=user:pass@host:port:socket db1.object1:db2.object1 db3:db4

这个语法有两个用法:

db1:db2:如果只指定数据库,那么就将两个数据库中互相缺少的对象显示出来,不比较对象里面的差异。这里的对象包括表、存储过程、函数、触发器等。
db1.object1:db2.object1:如果指定了具体表对象,那么就会详细对比两个表的差异,包括表名、字段名、备注、索引、大小写等所有的表相关的对象。
接下来看一些主要的参数:

--server1:配置server1的连接。
--server2:配置server2的连接。
--character-set:配置连接时用的字符集,如果不显示配置默认使用character_set_client。
--width:配置显示的宽度。
--skip-table-options:保持表的选项不变,即对比的差异里面不包括表名、AUTO_INCREMENT、ENGINE、CHARSET等差异。
-d DIFFTYPE,--difftype=DIFFTYPE:差异的信息显示的方式,有[unified|context|differ|sql],默认是unified。如果使用sql,那么就直接生成差异的SQL,这样非常方便。
--changes-for:修改对象。例如--changes-for=server2,那么对比以sever1为主,生成的差异的修改也是针对server2的对象的修改。意味着:
server2是待变更的数据库
--show-reverse:在生成的差异修改里面,同时会包含server2和server1的修改。

测试示例

use test;

create table test1(
    id int not null primary key,
    a varchar(10) not null,
    b varchar(10),
    c varchar(10) comment 'c',
    d int
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='test1';

create table test2(
    id int not null,
    a varchar(10),
    b varchar(5),
    c varchar(10),
    D int
)ENGINE=myisam DEFAULT CHARSET=utf8 COMMENT='test2';

不使用--skip-table-options

PS C:\Users\Administrator> mysqldiff --server1=root:111111@172.26.33.1:3306 --server2=root:111111@172.26.33.1:3306 --changes-for=server2 --show-reverse --difftype=sql test.test1:test.test2
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 172.26.33.1: ... connected.
# server2 on 172.26.33.1: ... connected.
# Comparing test.test1 to test.test2                               [FAIL]
# Transformation for --changes-for=server2:
#

ALTER TABLE `test`.`test2`
  DROP COLUMN D,
  ADD PRIMARY KEY(`id`),
  CHANGE COLUMN b b varchar(10) NULL,
  ADD COLUMN d int(11) NULL AFTER c,
  CHANGE COLUMN a a varchar(10) NOT NULL,
  CHANGE COLUMN c c varchar(10) NULL COMMENT 'c',
RENAME TO test.test1
, COMMENT='test1';

#
# Transformation for reverse changes (--changes-for=server1):
#
# ALTER TABLE `test`.`test1`
#   DROP PRIMARY KEY,
#   DROP COLUMN d,
#   CHANGE COLUMN b b varchar(5) NULL,
#   ADD COLUMN D int(11) NULL AFTER c,
#   CHANGE COLUMN a a varchar(10) NULL,
#   CHANGE COLUMN c c varchar(10) NULL,
# RENAME TO test.test2
# , COMMENT='test2';
#

# Compare failed. One or more differences found.

其中

RENAME TO test.test1
, COMMENT='test1';

是对表格的修改
Transformation for reverse changes (--changes-for=server1)下的内容是最终的效果

mysqldiff --server1=root:111111@172.26.33.1:3306 --server2=root:111111@172.26.33.1:3306 --changes-for=server2 --show-reverse --difftype=sql test.test1:test.test2 > diff.sql
可以将sql语句输出到文件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,809评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,189评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,290评论 0 359
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,399评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,425评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,116评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,710评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,629评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,155评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,261评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,399评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,068评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,758评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,252评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,381评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,747评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,402评论 2 358