国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql如何比對兩個數據庫表結構的方法

2020-01-18 20:42:49
字體:
來源:轉載
供稿:網友

在開發及調試的過程中,需要比對新舊代碼的差異,我們可以使用git/svn等版本控制工具進行比對。而不同版本的數據庫表結構也存在差異,我們同樣需要比對差異及獲取更新結構的sql語句。

例如同一套代碼,在開發環境正常,在測試環境出現問題,這時除了檢查服務器設置,還需要比對開發環境與測試環境的數據庫表結構是否存在差異。找到差異后需要更新測試環境數據庫表結構直到開發與測試環境的數據庫表結構一致。

我們可以使用mysqldiff工具來實現比對數據庫表結構及獲取更新結構的sql語句。

1.mysqldiff安裝方法

mysqldiff工具在mysql-utilities軟件包中,而運行mysql-utilities需要安裝依賴mysql-connector-python  

mysql-connector-python 安裝

下載地址:https://dev.mysql.com/downloads/connector/python/ 

mysql-utilities 安裝

下載地址:https://downloads.mysql.com/archives/utilities/

因本人使用的是mac系統,可以直接使用brew安裝即可。

brew install caskroom/cask/mysql-connector-pythonbrew install caskroom/cask/mysql-utilities

安裝以后執行查看版本命令,如果能顯示版本表示安裝成功

mysqldiff --versionMySQL Utilities mysqldiff version 1.6.5 License type: GPLv2

2.mysqldiff使用方法

命令:

mysqldiff --server1=root@host1 --server2=root@host2 --difftype=sql db1.table1:dbx.table3

參數說明:

--server1 指定數據庫1
--server2 指定數據庫2

比對可以針對單個數據庫,僅指定server1選項可以比較同一個庫中的不同表結構。  

--difftype 差異信息的顯示方式

unified (default)
顯示統一格式輸出

context
顯示上下文格式輸出

differ
顯示不同樣式的格式輸出

sql
顯示SQL轉換語句輸出

如果要獲取sql轉換語句,使用sql這種顯示方式顯示最適合。

--character-set 指定字符集

--changes-for 用于指定要轉換的對象,也就是生成差異的方向,默認是server1

--changes-for=server1 表示server1要轉為server2的結構,server2為主。

--changes-for=server2 表示server2要轉為server1的結構,server1為主。

--skip-table-options 忽略AUTO_INCREMENT, ENGINE, CHARSET的差異。

--version 查看版本

更多mysqldiff的參數使用方法可參考官方文檔:
https://dev.mysql.com/doc/mysql-utilities/1.5/en/mysqldiff.html

3.實例

創建測試數據庫表及數據

create database testa;create database testb;use testa;CREATE TABLE `tba` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(25) NOT NULL, `age` int(10) unsigned NOT NULL, `addtime` int(10) unsigned NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8;insert into `tba`(name,age,addtime) values('fdipzone',18,1514089188);use testb;CREATE TABLE `tbb` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `age` int(10) NOT NULL, `addtime` int(10) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into `tbb`(name,age,addtime) values('fdipzone',19,1514089188);

執行差異比對,設置server1為主,server2要轉為server1數據庫表結構

mysqldiff --server1=root@localhost --server2=root@localhost --changes-for=server2 --difftype=sql testa.tba:testb.tbb;# server1 on localhost: ... connected.# server2 on localhost: ... connected.# Comparing testa.tba to testb.tbb                 [FAIL]# Transformation for --changes-for=server2:#ALTER TABLE `testb`.`tbb`  CHANGE COLUMN addtime addtime int(10) unsigned NOT NULL,  CHANGE COLUMN age age int(10) unsigned NOT NULL,  CHANGE COLUMN name name varchar(25) NOT NULL, RENAME TO testa.tba , AUTO_INCREMENT=1002;# Compare failed. One or more differences found.

執行mysqldiff返回的更新sql語句

mysql> ALTER TABLE `testb`.`tbb`   ->  CHANGE COLUMN addtime addtime int(10) unsigned NOT NULL,   ->  CHANGE COLUMN age age int(10) unsigned NOT NULL,   ->  CHANGE COLUMN name name varchar(25) NOT NULL;Query OK, 0 rows affected (0.03 sec)

再次執行mysqldiff進行比對,結構沒有差異,只有AUTO_INCREMENT存在差異

mysqldiff --server1=root@localhost --server2=root@localhost --changes-for=server2 --difftype=sql testa.tba:testb.tbb;# server1 on localhost: ... connected.# server2 on localhost: ... connected.# Comparing testa.tba to testb.tbb                 [FAIL]# Transformation for --changes-for=server2:#ALTER TABLE `testb`.`tbb` RENAME TO testa.tba , AUTO_INCREMENT=1002;# Compare failed. One or more differences found.

設置忽略AUTO_INCREMENT再進行差異比對,比對通過

mysqldiff --server1=root@localhost --server2=root@localhost --changes-for=server2 --skip-table-options --difftype=sql testa.tba:testb.tbb;# server1 on localhost: ... connected.# server2 on localhost: ... connected.# Comparing testa.tba to testb.tbb                 [PASS]# Success. All objects are the same.

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 遂川县| 明光市| 广安市| 徐汇区| 台江县| 开封县| 宜章县| 赣州市| 福贡县| 原平市| 依兰县| 汤原县| 南昌县| 高密市| 青海省| 项城市| 肥西县| 准格尔旗| 绩溪县| 永福县| 庆安县| 天柱县| 泰来县| 陆良县| 敦化市| 海晏县| 阿巴嘎旗| 北流市| 博乐市| 陈巴尔虎旗| 甘谷县| 东海县| 江永县| 达拉特旗| 平遥县| 钦州市| 温泉县| 外汇| 黄梅县| 安吉县| 宁乡县|