由於公司的MySQL是搭建在服務器上,為了避免對服務器進行直接改動,我選用了遠程導出和導入MySQL的數據。
讓我們把目光看到上圖,由於實際數據庫中neem_hanyang下的兩個表alarmdata_h和commerr是空表,我們要做的工作就是把neem_jabil下的兩個表的數據導到neem_hamyang去。
要滿足上面的需求,我們必須導出neem_jabil下的兩個表alarmdata_h和commerr的數據,在此之前,先讓我們把目錄切換至MySQL的安裝目錄,筆者的是C:\Program Files (x86)\MySQL\MySQL Workbench 5.2 CE。
假設你現在用的是windows系統,那麼讓我們在dos下輸入cd C:\Program Files (x86)\MySQL\MySQL Workbench 5.2 CE,如果你是裝的是Server版,那麼輸入cd C:\Program Files\MySQL\MySQL Server 5.5\bin。
看到紅圈圈出來的部分,這就是我們的兩位主角mysql和mysqldump,我們的導入和導出操作都可以通過他們兩個任意一個來實現,那麼他們兩個有什麼區別呢?
當數據量比較小的時候我們選擇mysqldump(它的上限是2M),當數據量比較大的時候我們則選擇mysql
接下來我們就可以在dos下使用mysql或是mysqldump命令來進行數據庫的導入導出操作了。
mysqldump的導出語法如下:
mysqldump -h{hostname} [-P{port}] -u{username} -p{password} [--default-character-set=charset] database [tablename] {you file path}
mysqldump -h192.168.0.3 -unikey -p123456 ---character-set=utf8 neem_jabil commerr > d:/
通過上面的導出語句,將會在d盤下面創建一個jabil.sql腳本文件,這個腳本文件是可運行的,它包含了commerr表的建表細節以及其所有的數據。這就是導出命令的特點,它不但會導出數據,還會導出表或者數據庫的結構信息。另外如果不帶"
> {you file path}"這一部分路徑信息,mysqldump導出命令或把內容打印在dos界面。
mysqldump的導入有兩種語法要介紹,分別是mysqldump導入法和source導入法:
顧名思義,這種方法則還是用mysqldump這個主角來導入,語法規范如下:
mysqldump -h{hostname} [-P{port}] -u{username} -p{password} [--default-character-set=charset] database [tablename] {you file path}
這種導入方式實質就是運行前面所導出的那個sql腳本文件。
mysqldump -h192.168.0.3 -unikey -p123456 ---character-set=utf8 neem_hanyang commerr < d:/data.sql
source導入不同於前面,它是一個SQL命令,必須登錄進入MySQL在命令行那裡才可以運行,而mysqldump實則是一個管理工具,無須登入MySQ在命令行那裡運行,只須在dos下運行即可。回到上面例子所處的dos界面,我們可以用下面的命令來登入MySQL:
mysql -h{hostname} [-p{port}] -u{username} -p{password}
舉例,我們登入一個遠程MySQL可以用下面的命令:
mysql -h192.168.0.3 -unikey -p123456
登入之後,進入我們要作用的數據庫:
mysql > use neem_hanyang;
然後我們可以使用source命令來運行前面導出的sql腳本實現數據的導入:
mysql > source d:/jabil.sql;
mysqldump雖然好用,但它實際上也是運用先登錄在運行腳本的策略,只是其中的細節我們無需關心,但是,因為其中有很多遠程連接細節,我們有可能遭遇中文亂碼問題。
mysql > show variables like 'character%';
是否注意到紅圈部分的編碼是latin1?latin1是MySQL的默認字符集,可能由於某種原因你沒有指定默認編碼,它就會默認為latin1了,這就是你中文亂碼出現的原因。
所以筆者個人建議,如果是作數據導入的話,寧可多做一個步驟,先登錄後使用source命令來導入。
在dos下使用mysqldump --help的命令我們可以看到mysqldump更多更詳細的使用方法,下面挑幾個命令進行講解。
例如--opt命令的使用,默認情況下--opt是會被調用:
mysqldump -h192.168.0.3 -unikey -p123456 ---character-set=utf8 --opt neem_jabil commerr_h > d:/jabil3.sql
where命令的原理其實就是sql的where條件限定,格式規范是:--where="字段條件",如:--where="id>1",需要注意的是id這個字段必須是真實存在的,否則會報sql錯誤如下。
具體的--where代碼例子如下:
mysqldump -h192.168.0.3 -unikey -p123456 ---character-set=utf8 --where="errtype>0" neem_jabil commerr_h > d:/jabil3.sql
顧名思義,--no-data的作用就是,舉例如下:
mysqldump -h192.168.0.3 -unikey -p123456 ---character-set=utf8 --no-data neem_jabil commerr_h > d:/jabil3.sql
1. Mysql導入導出工具Mysqldump和Source命令用法詳解