文档章节

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

Elvis.Xiong
 Elvis.Xiong
发布于 2016/11/10 10:41
字数 545
阅读 127
收藏 1

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 
Java代码 

 收藏代码

  1. SHOW CREATE TABLE `departments`;  
  2. SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE, AUTO_INCREMENT, AVG_ROW_LENGTH, CHECKSUM, TABLE_COLLATION, TABLE_COMMENT, ROW_FORMAT, CREATE_OPTIONS  
  3.   FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments';  
  4. SELECT ORDINAL_POSITION, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE,  
  5.          COLUMN_DEFAULT, EXTRA, COLUMN_COMMENT, COLUMN_KEY  
  6.   FROM INFORMATION_SCHEMA.COLUMNS  
  7.   WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments';  
  8. SELECT PARTITION_NAME, SUBPARTITION_NAME, PARTITION_ORDINAL_POSITION,  
  9.          SUBPARTITION_ORDINAL_POSITION, PARTITION_METHOD, SUBPARTITION_METHOD,  
  10.          PARTITION_EXPRESSION, SUBPARTITION_EXPRESSION, PARTITION_DESCRIPTION  
  11.   FROM INFORMATION_SCHEMA.PARTITIONS  
  12.   WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments';  
  13. SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_SCHEMA,  
  14.          REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME  
  15.   FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE  
  16.   WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments' AND  
  17.         REFERENCED_TABLE_SCHEMA IS NOT NULL;  
  18. SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE, AUTO_INCREMENT, AVG_ROW_LENGTH, CHECKSUM, TABLE_COLLATION, TABLE_COMMENT, ROW_FORMAT, CREATE_OPTIONS  
  19.   FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments';  
  20. SELECT ORDINAL_POSITION, COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE,  
  21.          COLUMN_DEFAULT, EXTRA, COLUMN_COMMENT, COLUMN_KEY  
  22.   FROM INFORMATION_SCHEMA.COLUMNS  
  23.   WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments';  
  24. SELECT PARTITION_NAME, SUBPARTITION_NAME, PARTITION_ORDINAL_POSITION,  
  25.          SUBPARTITION_ORDINAL_POSITION, PARTITION_METHOD, SUBPARTITION_METHOD,  
  26.          PARTITION_EXPRESSION, SUBPARTITION_EXPRESSION, PARTITION_DESCRIPTION  
  27.   FROM INFORMATION_SCHEMA.PARTITIONS  
  28.   WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments';  

本文转载自:

共有 人打赏支持
Elvis.Xiong
粉丝 27
博文 9
码字总数 6819
作品 0
西安
私信 提问
Mysql Utilities

安装Mysql Utilities mysql utilities 使用python开发,首先需要安装MySQL Connector/Python General Availability (GA) release。 2.python版本需要时2.6或者2.7.接下来安装utilities。 命令......

Zuo_W
2016/06/07
176
0
工欲利其器: sqlyog 数据架构同步

打开sqlyog, 进入高级工具,最顶上三个功能. 主要功能是对比及同步两表的结构与数据. 数据库s 同步向导 跟 可视化数据比较向导两功能非常类似, 区别在于数据库s 同步向导有计划任务功能. 有些...

Tuesday
2013/08/22
0
34
腾讯AI Lab提出新型损失函数LMCL:可显著增强人脸识别模型的判别能力

深度卷积神经网络 (CNN) 已经推动人脸识别实现了革命性的进展。人脸识别的核心任务包括人脸验证和人脸辨识。然而,在传统意义上的深度卷积神经网络的 softmax 代价函数的监督下,所学习的模型...

u011808673
05/13
0
0
方差分析中两两比较方法的选择

如果多组间比较认为总体上有统计学差异,通常还可以进一步做组间两两比较。两两比较的方法有很多,SPSS就提供了20余中,多到令人尴尬,令人不知如何选择。 两两比较.png 常用的两两比较方法 ...

StatsHuo
2015/12/23
0
0
SQLServer容灾备份_3_数据库容灾备份操作

一、概述 完整备份 备份数据库所有文件 差异备份 备份最近一次完成备份后增加的所有内容 二、操作 1-1 新建维护计划(在A(生产)服务器进行设置) 路径:数据库 -> 【管理】 -> 【维护计划】 ...

玖湖弋
08/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部