mysql 表数据diff,mysqldiff使用笔记

背景

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

准备工具

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

安装

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

Windows系统中需提前安装“Visual C++ Redistributable Packages for Visual Studio 2013”,下载地址:https://www.microsoft.com/en-gb/download/details.aspx?id=40784。

Linux系统在下载页面选择对应发行版。

语法

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语句输出到文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java超出gc开销_通过这5个简单的技巧减少GC开销

java超出gc开销编写代码的五种简单方法,可以提高内存效率,而无需花费更多时间或降低代码可读性 垃圾回收会为您的应用程序增加多少开销? 您可能不知道确切的数字,但您确实知道总有改进的余地。 尽管自动GC是最有效的过程&#x…

JSTL(Java 标准标签库)

文章目录JSTL 简介JSTL 可以使用在哪里JSTL 使用步骤使用标签if 语句选择语句迭代遍历语句URL重写设置属性值删除属性值异常捕获导入其它 JSP 页面重定向输出指定的值JSTL 简介 Java Standard Taglib(Java 标准标签库)。 JSTL 是一种代替 JSP 中的 Java 代码的技术。sun 公司…

php hash代码下载,PHP中的哈希表 hash_insert

[php]代码库int hash_insert(HashTable *ht, char *key, void *value){// check if we need to resize the hashtableresize_hash_table_if_needed(ht); // 哈希表不固定大小,当插入的内容快占满哈表的存储空间// 将对哈希表进行扩容, 以便容纳所有的元素…

跟踪React流–将Spring Cloud Sleuth与Boot 2结合使用

Spring Cloud Sleuth在OpenZipkin Brave的基础上增加了对Spring工具的支持, 从而使Spring Boot应用程序的分布式跟踪变得异常简单。 这是关于使用此出色的库添加对分布式跟踪的支持所需内容的简要介绍。 考虑两个应用程序–一个使用上游服务应用程序的客户端应用程…

JDK命令之java -- 用来执行字节码文件,即用来执行Java程序

文章目录一、命令介绍二、用法格式三、常用选项四、常用选项详解-client,-server-hotspot-classpath,-cp-classpath-Dvalue-verbose[:class|gc|jni]-verbose:gc-verbose:jni-version-showversion-ea[:...|:] 和 -enableassertions[:...|:]-da[:...|:] 和 -disableas…

php中双引号的区别,PHP中单引号和双引号的区别

好久没有写博客了,都忘了积累知识啦……现在开始全新的生活,重拾记录的习惯。今天要写的就是PHP中单引号和双引号的区别。在PHP中,我们可以使用单引号或者双引号来表示字符串。不过我们作为开发者,应该了解其中的区别。一、字符串…

sbe 详解_内部简单二进制编码(SBE)

sbe 详解SBE是用于金融行业的非常快速的序列化库,在本博客中,我将介绍一些使其快速发展的设计选择。 序列化的全部目的是对消息进行编码和解码,并且有很多可用的选项,例如XML,JSON,Protobufer,…

php调用swf文件上传,swfupload-jquery-plugin AJAX+PHP 文件上传

var listitem>file.name (Math.round(file.size/1024) KB)>>>Pending;$(#log).append(listitem);$(this).swfupload(startUpload);})//绑定开始上传文件事件.bind(uploadStart, function(event, file){$(#log li#file.id).find(p.status).text(Uploading...);$(#lo…

aws lambda使用_使用AWS Lambdas扩展技术堆栈

aws lambda使用面对现实吧。 调试性能问题很困难,但是更难解决。 假设您发现了有害的代码,这些代码正在拖慢您的应用的运行速度。 最终会有一段时间,您发现此代码减速是同步的或线性执行的。 解决这些有问题的代码段的最有效方法之一就是将最…

Java声明定义抽象类/接口/继承/实现

文章目录声明定义抽象类声明定义接口派生类、抽象类、接口的继承要点声明定义抽象类 public abstract class CRMSystem {public abstract Client add(Client newGuy); //添加用户方法public abstract Event add(Event e, Client guy); //重载添加事件、用户方法public abstrac…

cuba开发_使用CUBA进行开发–与Spring相比有很大的转变?

cuba开发阅读另一个供内部公司使用的Web项目的要求时,您(至少是我自己)通常会看到一个很普通的集合:定义明确的数据存储结构(或有时是现有的旧数据库),大量的数据输入形式,非常复杂的…

imagettftext php7,mac php7 imagettftext

Mac OS X 自带PHP环境gd库安装扩展freetype问题: “Call to undefined function imagettftext()”解决方法:curl -s [http://php-osx.liip.ch/install.sh](https://link.jianshu.com/?thttp://php-osx.liip.ch/install.sh) | bash -s 7.3sudo vim ~/.ba…

图片授权模式

RM、RF、PE是3种不同的图片授权模式,由图片卖家设定,图片买家根据自己的需要来进行选择。这三种模式是图片行业在发展过程中,经过对图片用户需求的不断总结而确定的。摄影师可以根据自己的销售意愿,在编辑图片的时候,对…

java线程池延期执行一次_Java使用者的延期执行

java线程池延期执行一次在前面的博客文章(“ 延迟执行Java的供应商 “),我引用礁HORSTMANN的陈述书中‘ 的Java SE8为真的很急关于lambda表达式’,‘所有的lambda表达式的点被推迟执行 。’ Horstmann在最后一年为Dobb博士的杂志写…

python时间序列数据分析,Python数据分析之时间序列

Python数据分析之时间序列发布时间:2020-07-10 06:56:27来源:51CTO阅读:808作者:up4ever1. 时间序列类型时间戳(timestramp)即特定的时刻固定时期(period)如2018年1月或2018年1月1日时间间隔(interval)由起始和结束时间戳表示2. P…

java jdk 序列化_JDK 11:Java序列化的终结开始了吗?

java jdk 序列化在博客文章“ 将Google的协议缓冲区与Java结合使用 ”中,我引用了乔什布洛赫(Josh Bloch)的第三版的有效Java ,他写道:“没有理由在您编写的任何新系统中使用Java序列化。” Bloch建议使用“跨平台结构…

php+ksort+返回true,PHP preg_replace函数

mixed preg_replace( mixed pattern, mixed replacement, mixed subject [, int limit] )在PHP中用来执行正则表达式的匹配以及替换的函数。可以返回一个正则表达式转换后的值。在subject中搜索pattern模式的匹配项,并用replacement模式进行替换。如果指定了 limit&…

下拉选择框

</select> 标签有一个属性 multiple&#xff0c;将其设置成 multiple"multiple" 按住 Ctrl 键即可实现多选。 请看例子&#xff1a; <html><head><meta http-equiv"Content-Type" content"text/html; charsetgb2312" />…

rest端点_REST:使用Controller端点?

rest端点在一般的REST架构中&#xff0c;基本概念是资源。 在资源之后&#xff0c;下一步是为这些资源开发一个统一接口&#xff0c;这在HTTP领域通常意味着&#xff1a; 创建为POST 阅读就是GET 更新为PUT&#xff08;或部分更新为PATCH&#xff09; 删除已删除 在现实世…