最近在做項(xiàng)目的時(shí)候,一直處于非常緊張的狀態(tài),因?yàn)闀r(shí)間有限,幾乎不停的寫代碼,不停的把新的代碼和數(shù)據(jù)庫(kù)結(jié)構(gòu)和數(shù)據(jù)同步到不同的環(huán)境中測(cè)試,導(dǎo)數(shù)據(jù)是件麻煩事,我想有沒(méi)有一個(gè)簡(jiǎn)單的工具,可以使得跨主機(jī)復(fù)制數(shù)據(jù)變得簡(jiǎn)單呢。
接下來(lái)就介紹一個(gè)基于GoLang開發(fā)的命令行工具,可以方便快捷復(fù)制數(shù)據(jù),既可以復(fù)制庫(kù),也可以復(fù)制表,還可以把一個(gè)sql語(yǔ)句查詢出來(lái)的數(shù)據(jù)導(dǎo)入到新的表中,接下來(lái)就介紹下這個(gè)命令行工具的主要用法。
項(xiàng)目地址
https://github.com/joyant/carry
安裝
可以clone完項(xiàng)目后自己編譯:
go build main.go
也可以在這里下載,但是只支持64位的機(jī)器,好在現(xiàn)在大家開發(fā)用的機(jī)器一般都是64位的。
下載或者編譯之后,如果開發(fā)使用的是mac或者linux,需要做兩件事:
- 把可執(zhí)行文件放在
/usr/local/bin/下面,修改名字為carrymv main carry,賦予運(yùn)行權(quán)限chmod 755 carry。 - 還需要使carry對(duì)目錄
/usr/local/etc/有可寫權(quán)限,carry會(huì)把數(shù)據(jù)庫(kù)的賬戶信息保存在這個(gè)目錄下。
對(duì)于windows的用戶,配置文件是放在C盤下的,需要修改環(huán)境變量,使得在命令窗口敲carry的時(shí)候,windows能找到這個(gè)命令。
接下來(lái)我們就可以使用了。
保存數(shù)據(jù)庫(kù)賬戶信息
在使用復(fù)制數(shù)據(jù)的命令之前,需要先先告訴carry數(shù)據(jù)庫(kù)信息。比如,你現(xiàn)在要登錄在主機(jī)192.168.0.1上的mysql server, 賬號(hào)是root,密碼是root,端口是3306, 你給這個(gè)連接起名叫dev, 這在Carry里有一個(gè)專門的術(shù)語(yǔ)叫:section。
$ carry store -s dev -H 192.168.0.1 -u root -p root -P 3306
如果你看到錯(cuò)誤提示,請(qǐng)確保Carry對(duì)目錄/usr/local/etc/有讀寫權(quán)限,它需要把你剛才輸入的賬號(hào)保存在這個(gè)目錄下。
如果你能看到success的提示,證明你已經(jīng)保存成功了,現(xiàn)在你可以登錄mysql了。
登錄
$ carry login -s dev
登錄的前提是,你已經(jīng)安裝了mysql-client, 并且設(shè)置了正確的環(huán)境變量,否則你將會(huì)看到錯(cuò)誤提示。
如果你想修改dev的密碼,也很簡(jiǎn)單:
$ carry store -s dev -p 123456
查看已經(jīng)保存的section
$ carry list # watch all
$ carry list -s dev # only watch section dev
刪除section
$ carry del -s dev
數(shù)據(jù)傳輸
終于到這一步了,但是在傳輸前,我們還需要再添加一個(gè)section。
$ carry store -s test -H 192.168.0.10 -u root -p root -h 3307
現(xiàn)在,我們可以使用傳輸命令了,首先,我們把dev上的erp庫(kù)復(fù)制到test主機(jī)上:
$ carry trans -f dev.erp -t test.erp
復(fù)制一個(gè)單獨(dú)的表也是可以的:
$ carry trans -f dev.erp.user -t test.erp.user
如果user表不存在,Carry會(huì)詢問(wèn)你是否要?jiǎng)?chuàng)建它。
刪除表或者庫(kù)
$ carry drop -s dev.erp.user # delete table user
$ carry drop -s dev.erp # delete database erp
當(dāng)你執(zhí)行drop操作時(shí),Carry會(huì)詢問(wèn)你,以防止誤操作。