`

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
分享到:
评论

相关推荐

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

    4. **命令行界面**:除了通过编程调用,Python-mysqldiff还提供了命令行接口,允许用户直接在终端上运行,进行快速的数据库对比和同步操作。 5. **灵活性**:Python-mysqldiff支持自定义配置,可以根据项目的具体...

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

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

    mysqldiff用法详解.pdf

    除了 `mysqldiff`,还有 `mysqldbcompare` 也提供了类似功能,可以用于比较数据库或表的数据和结构,以便进行数据库一致性验证。 总结来说,`mysqldiff` 是一款强大的 MySQL 数据库结构比较工具,通过灵活的参数...

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

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

    php对比两个mysql数据库显示差异并生成更新SQL语句,执行到指定数据库.zip

    在IT行业中,数据库管理和数据迁移是一项常见的任务,尤其是在多个数据库之间进行比较和同步时。这里我们关注的是如何使用PHP和SQL来实现这个目的。标题提到的"php对比两个mysql数据库显示差异并生成更新SQL语句,...

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

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

    Node.js-mysql数据库表机构对比工具

    在压缩包子文件“mysqldiff-master”中,"mysqldiff"可能是这个工具的名字,而“master”可能表示这是项目的主分支或者最新版本。通常,开源项目会将源代码托管在Git等版本控制系统中,"master"分支代表了项目的主要...

    专业的数据库对比工具AdeptSQL Diff

    AdeptSQL Diff是一款高效且用户友好的数据库对比工具,专为数据库管理员、开发人员以及对数据一致性有高要求的用户设计。 AdeptSQL Diff的主要功能是对比并同步两个数据库之间的差异。它支持多种数据库类型,包括但...

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

    首先,`mysqldiff`是MySQL Utilities软件包的一部分,它允许用户比较两个MySQL数据库或数据库中的表,并生成一个SQL脚本来同步它们。要安装`mysqldiff`,你需要先确保安装了`mysql-connector-python`,这是MySQL ...

    数据安全守护神:全面掌握MySQL数据库备份策略

    通过本文的介绍,您应该对如何备份 MySQL 数据库有了更深入的理解。合理的备份策略和定期的备份操作是确保数据安全的关键。备份不仅仅是技术层面的操作,更是一种风险管理的策略。只有通过科学的规划和严格的执行,...

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

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

    Laravel开发-db-diff

    `Laravel开发-db-diff` 正是为了解决这一问题而设计的一个工具,它专注于帮助Laravel开发者便捷地比较和同步MySQL数据库的结构差异。 `Laravel开发-db-diff` 是一个扩展工具,它扩展了Laravel的内置数据库迁移功能...

    数据库对比工具

    1. **结构对比**:比较两个数据库的架构,找出表、视图、存储过程、函数、索引、约束等对象的差异,并生成同步脚本进行更新。 2. **数据对比**:除了结构之外,还能对比数据库中的实际数据,检查记录是否存在、缺失...

    DBDiff:比较MySQL数据库并自动快速创建架构和数据更改脚本迁移(支持上下SQL)以进行数据库版本控制。 支持*某些*迁移工具

    它比较本地或远程的两个数据库,并自动生成差异的迁移文件。 与一起使用时,它可以帮助在您的团队或企业内实现数据库版本控制。 支持DBDiff DBDiff是MIT许可的开源项目,其持续的开发完全依靠支持者的支持。 要...

    精通MySQL Utilities 中文手册

    - **实例**:展示如何使用 `mysqldiff` 来比较两个数据库。 - **权限**:需要具备对两个数据库的读权限。 #### 七、mysqldbcopy 改变存储引擎 - **实例**:演示如何使用 `mysqldbcopy` 更改表的存储引擎。 - **权限...

    第20章 MySQL管理利器-MySQL Utilities PPT

    5. **mysqldiff**: 比较数据库对象(如表、视图、存储过程)的定义,帮助用户识别差异,便于更新数据库结构。 使用MySQL Utilities,数据库管理员能够更高效、更安全地管理他们的MySQL环境,提升工作效率,降低错误...

    mysql数据库日期函数大全-fan.docx

    这些函数可以对日期和时间进行各种操作,例如计算日期和时间的差异、获取日期和时间的各种组成部分、对日期和时间进行加减运算等。 1. TO_DAYS 函数 TO_DAYS 函数用于将日期转换为天数,例如: mysql> SELECT TO_...

Global site tag (gtag.js) - Google Analytics