久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql怎么對比兩個(gè)數(shù)據(jù)庫表結(jié)構(gòu)

138次閱讀
沒有評論

共計(jì) 3795 個(gè)字符,預(yù)計(jì)需要花費(fèi) 10 分鐘才能閱讀完成。

自動(dòng)寫代碼機(jī)器人,免費(fèi)開通

這篇文章主要介紹了 mysql 怎么對比兩個(gè)數(shù)據(jù)庫表結(jié)構(gòu),具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

在開發(fā)及調(diào)試的過程中,需要對比新舊代碼的差異,我們可以使用 git/svn 等版本控制工具進(jìn)行比對。而不同版本的數(shù)據(jù)庫表結(jié)構(gòu)也存在差異,我們同樣需要對比差異及獲取更新結(jié)構(gòu)的 sql 語句。

例如同一套代碼,在開發(fā)環(huán)境正常,在測試環(huán)境出現(xiàn)問題,這時(shí)除了檢查服務(wù)器設(shè)置,還需要對比開發(fā)環(huán)境與測試環(huán)境的數(shù)據(jù)庫表結(jié)構(gòu)是否存在差異。找到差異后需要更新測試環(huán)境數(shù)據(jù)庫表結(jié)構(gòu)直到開發(fā)與測試環(huán)境的數(shù)據(jù)庫表結(jié)構(gòu)一致。

我們可以使用 mysqldiff 工具來實(shí)現(xiàn)對比數(shù)據(jù)庫表結(jié)構(gòu)及獲取更新結(jié)構(gòu)的 sql 語句。

1.mysqldiff 安裝方法

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

mysql-connector-python 安裝

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

mysql-utilities 安裝

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

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

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

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

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

2.mysqldiff 使用方法

命令:

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

參數(shù)說明:

–server1 指定數(shù)據(jù)庫 1
–server2 指定數(shù)據(jù)庫 2

比對可以針對單個(gè)數(shù)據(jù)庫,僅指定 server1 選項(xiàng)可以比較同一個(gè)庫中的不同表結(jié)構(gòu)。 

–difftype 差異信息的顯示方式

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

context
顯示上下文格式輸出

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

sql
顯示 SQL 轉(zhuǎn)換語句輸出

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

–character-set 指定字符集

–changes-for 用于指定要轉(zhuǎn)換的對象,也就是生成差異的方向,默認(rèn)是 server1

–changes-for=server1 表示 server1 要轉(zhuǎn)為 server2 的結(jié)構(gòu),server2 為主。

–changes-for=server2 表示 server2 要轉(zhuǎn)為 server1 的結(jié)構(gòu),server1 為主。

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

–version 查看版本

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

3. 實(shí)例

創(chuàng)建測試數(shù)據(jù)庫表及數(shù)據(jù)

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);

執(zhí)行差異比對,設(shè)置 server1 為主,server2 要轉(zhuǎn)為 server1 數(shù)據(jù)庫表結(jié)構(gòu)

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.

執(zhí)行 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)

再次執(zhí)行 mysqldiff 進(jìn)行比對,結(jié)構(gòu)沒有差異,只有 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.

設(shè)置忽略 AUTO_INCREMENT 再進(jìn)行差異比對,比對通過

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.

感謝你能夠認(rèn)真閱讀完這篇文章,希望丸趣 TV 小編分享的“mysql 怎么對比兩個(gè)數(shù)據(jù)庫表結(jié)構(gòu)”這篇文章對大家有幫助,同時(shí)也希望大家多多支持丸趣 TV,關(guān)注丸趣 TV 行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

向 AI 問一下細(xì)節(jié)

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-04發(fā)表,共計(jì)3795字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 石泉县| 彭州市| 东丽区| 贵南县| 邳州市| 武汉市| 遂昌县| 赣州市| 龙泉市| 隆尧县| 德阳市| 化州市| 津南区| 政和县| 芦山县| 开原市| 隆昌县| 乌鲁木齐市| 梁平县| 宜黄县| 伊川县| 禄劝| 太仓市| 长汀县| 沙坪坝区| 青阳县| 万宁市| 昭觉县| 会泽县| 加查县| 独山县| 双江| 永平县| 时尚| 仪陇县| 井冈山市| 南宫市| 正宁县| 郓城县| 饶河县| 乌鲁木齐县|