`

mysqldiff对数据库间进行差异比较

 
阅读更多
  mysqldiff该工具是官方mysql-utilities工具集的一个脚本,可以用来对比不同数据库之间的表结构,或者同个数据库间的表结构
   如果在windows下,直接下载mysql-utilities安装就可以了,然后运行后,会跑到命令行下:

1) 基本用法
   mysqldiff --server1=admin:123456@192.168.79.10 --server2=admin:123456@192.168.79.11
--difftype=differ test:test

  这样就比较两个不同库中的数据库test,假设两个库中库名都是test
也可以比较不同的表

mysqldiff --server1=user@host1 --server2=user@host2 testdb.table1:anotherdb.anothertable
     就是使用库名.表名的方式就可以了

  下面是出来的一个效果

# mysqldiff --force --server1=root:msandbox@127.0.0.1:21489 --server2=root:msandbox@127.0.0.1:21490 employees:employees
# WARNING: Using a password on the command line interface can be insecure.
# server1 on 127.0.0.1: ... connected.
# server2 on 127.0.0.1: ... connected.
# Comparing `employees` to `employees`                             [PASS]
# Comparing `employees`.`departments` to `employees`.`departments`   [FAIL]
# Object definitions differ. (--changes-for=server1)
#
--- `employees`.`departments`
+++ `employees`.`departments`
@@ -1,6 +1,6 @@
CREATE TABLE `departments` (
   `dept_no` char(4) NOT NULL,
-  `dept_name` varchar(40) NOT NULL,
+  `dept_name` varchar(256) DEFAULT NULL,
   PRIMARY KEY (`dept_no`),
   UNIQUE KEY `dept_name` (`dept_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1



  可以看到,默认-号代表左边要比较的server1的变化,+号代表右边server2的不同,
如果要交换,可以使用参数:
    –changes-for=server2

  如果要在比较不同的时候,强行继续比较下去,要增加--force选项

2) 可以生成差异化的SQL,因为方法1)中,只产生了不同的地方,但如为了生产考虑,
要生成达到server2的脚本,则可以使用参数
  --difftype=sql,
则:
  mysqldiff --server1=admin:123456@192.168.79.10 --server2=admin:123456@192.168.79.11
--difftype=sql test:test

mysqldiff的核心是使用INFORMATION_SCHEMA
SHOW CREATE TABLE `departments`;
SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE, AUTO_INCREMENT, AVG_ROW_LENGTH, CHECKSUM, TABLE_COLLATION, TABLE_COMMENT, ROW_FORMAT, CREATE_OPTIONS
  FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments';
SELECT ORDINAL_POSITION, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE,
         COLUMN_DEFAULT, EXTRA, COLUMN_COMMENT, COLUMN_KEY
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments';
SELECT PARTITION_NAME, SUBPARTITION_NAME, PARTITION_ORDINAL_POSITION,
         SUBPARTITION_ORDINAL_POSITION, PARTITION_METHOD, SUBPARTITION_METHOD,
         PARTITION_EXPRESSION, SUBPARTITION_EXPRESSION, PARTITION_DESCRIPTION
  FROM INFORMATION_SCHEMA.PARTITIONS
  WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments';
SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_SCHEMA,
         REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
  FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments' AND
        REFERENCED_TABLE_SCHEMA IS NOT NULL;
SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE, AUTO_INCREMENT, AVG_ROW_LENGTH, CHECKSUM, TABLE_COLLATION, TABLE_COMMENT, ROW_FORMAT, CREATE_OPTIONS
  FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments';
SELECT ORDINAL_POSITION, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE,
         COLUMN_DEFAULT, EXTRA, COLUMN_COMMENT, COLUMN_KEY
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments';
SELECT PARTITION_NAME, SUBPARTITION_NAME, PARTITION_ORDINAL_POSITION,
         SUBPARTITION_ORDINAL_POSITION, PARTITION_METHOD, SUBPARTITION_METHOD,
         PARTITION_EXPRESSION, SUBPARTITION_EXPRESSION, PARTITION_DESCRIPTION
  FROM INFORMATION_SCHEMA.PARTITIONS
  WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments';
0
0
分享到:
评论

相关推荐

    java比较两个mysql数据库中的表信息差异

    一个简单JAVA 小工程进行两个MYSQL数据库对象的比较,导入eclipse中,修改jdbc.properties文件中的JDBC信息,然后直接运行action包类中的main方法,生成EXCEL,excel中包含表,表中列,索引,函数过程差异比对结果。...

    mysql快速比对库结构差异工具-java版

    1. 两个 MYSQL 数据库对象结构比对工具 (比如:本地测试库、远程运维库表结构、表中列等对比) 2. 比对结果导出EXCEL 存放于 “工程根目录”/export/ 目录下 3. 比对的对象包括 表、表列、表索引、表分区差异、...

    Python-mysqldiff是一款轻量级数据库对比工具同时支持新增表的默认数据导入

    mysqldiff是一个能够方便于大家在实际项目中快速生成不同版本数据库之间的差异SQL,同时还能够自动将新版中新增表中默认数据一并导入到旧版本中。

    mysqldiff:工具和CPAN套件后端,用于比较MySQL数据库模式

    MySQL-Diff是一套Perl模块和随附的CLI脚本mysqldiff用于比较两个MySQL / MariaDB数据库的模式。 先决条件 该套件需要Perl 5.14或更高版本以及与MySQL兼容的客户端实用程序套件(mysql和mysqldump)。 您至少需要Perl...

    mysql如何比对两个数据库表结构的方法

    在开发及调试的过程中,需要比对新旧代码的差异,我们...我们可以使用mysqldiff工具来实现比对数据库表结构及获取更新结构的sql语句。 1.mysqldiff安装方法 mysqldiff工具在mysql-utilities软件包中,而运行mysql-uti

    database-table-diff:一种快速比较来自多个来源(MySQL、PostgreSQL、SQLite)的数据库并查看表结构之间差异的方法

    数据库表差异一种快速比较来自多个来源(MySQL、PostgreSQL、SQLite)的数据库并查看表结构之间差异的方法。 当前状态:比较表名和表列名。特征节省比较数据库表结构的时间支持 MySQL、PostgreSQL、SQLite 不同...

    Laravel开发-db-diff

    Laravel开发-db-diff 用于Laravel和MySQL的数据库差异工具

    presto sql 与mysql sql 对比.pdf

    Presto SQL 和 MySQL SQL 都是关系型数据库管理系统,但它们之间存在一些差异。在 Presto SQL 中,字段名和表名使用双引号括起来,而在 MySQL SQL 中,字段名和表名使用反引号括起来。 函数 Presto SQL 和 MySQL ...

    这是一个基于 TiDB MySQL 语法解析器的一个工具集.zip

    这是一个基于 TiDB MySQL 语法解析器的一个工具集,支持1. SQL 指纹(sql fingerprint);2. 数据库库表对比(sql diff): 对比两个数据库的库表差异,并生成源库到目标库对应的差异( DDL) 语句。

    crawl-screenshot-diff:抓取网站,制作屏幕截图并在不同的抓取作业之间制作视觉差异

    抓取屏幕截图差异抓取网站,制作屏幕截图并直观地比较这些屏幕截图它使用 angularjs 1.3 作为 Web 前端和 iojs 以及服务器端的 mysql 数据库。关于这个项目这是一个大型网站重新启动项目的快速黑客,用于跟踪新网站...

    skeema:MySQL的架构管理CLI

    与实时数据库在模式存储库中进行差异更改以自动生成DDL 管理多个环境(例如,开发,暂存,生产)并轻松保持同步 配置使用在线模式更改工具(例如pt-online-schema-change)来执行ALTER 从Rails或Django等框架将非...

    super-jacoco

    简介Super-Jacoco是基于Jacoco,git二次开发打造的一站式JAVA代码全量/ diff覆盖率收集平台,能够解决,无侵入的收集代码...使用方法 1,数据库安装和初始化安装mysql数据库,创建数据库后执行sql/db.sql文件中的建表SQ

    禅道开源项目管理软件发布4.0正式版本

    相比较于去年9月3日发布的3.3版本而言,4.0版本在UI、安装升级、使用流程、操作体验方面都做了重大的改进和突破。我们后面会重点对4.x系列版本提供技术支持和扩展,之前的版本我们将陆续放弃支持,强烈建议每一位...

Global site tag (gtag.js) - Google Analytics