最近在做項(xiàng)目的時(shí)候,一直處于非常緊張的狀態(tài),因?yàn)闀r(shí)間有限时甚,幾乎不停的寫代碼,不停的把新的代碼和數(shù)據(jù)庫結(jié)構(gòu)和數(shù)據(jù)同步到不同的環(huán)境中測(cè)試糕再,導(dǎo)數(shù)據(jù)是件麻煩事,我想有沒有一個(gè)簡(jiǎn)單的工具玉转,可以使得跨主機(jī)復(fù)制數(shù)據(jù)變得簡(jiǎn)單呢突想。
接下來就介紹一個(gè)基于GoLang開發(fā)的命令行工具,可以方便快捷復(fù)制數(shù)據(jù),既可以復(fù)制庫蒿柳,也可以復(fù)制表,還可以把一個(gè)sql語句查詢出來的數(shù)據(jù)導(dǎo)入到新的表中漩蟆,接下來就介紹下這個(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ù)庫的賬戶信息保存在這個(gè)目錄下。
對(duì)于windows的用戶唐础,配置文件是放在C盤下的箱歧,需要修改環(huán)境變量,使得在命令窗口敲carry的時(shí)候一膨,windows能找到這個(gè)命令呀邢。
接下來我們就可以使用了。
保存數(shù)據(jù)庫賬戶信息
在使用復(fù)制數(shù)據(jù)的命令之前豹绪,需要先先告訴carry數(shù)據(jù)庫信息价淌。比如,你現(xiàn)在要登錄在主機(jī)192.168.0.1上的mysql server, 賬號(hào)是root瞒津,密碼是root蝉衣,端口是3306, 你給這個(gè)連接起名叫dev, 這在Carry里有一個(gè)專門的術(shù)語叫: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庫復(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ì)詢問你是否要?jiǎng)?chuàng)建它。
刪除表或者庫
$ carry drop -s dev.erp.user # delete table user
$ carry drop -s dev.erp # delete database erp
當(dāng)你執(zhí)行drop操作時(shí)旦棉,Carry會(huì)詢問你齿风,以防止誤操作。