程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL遠程數據導出導入

MySQL遠程數據導出導入

編輯:MySQL綜合教程

1 前言部分

  由於公司的MySQL是搭建在服務器上,為了避免對服務器進行直接改動,我選用了遠程導出和導入MySQL的數據。

  

  讓我們把目光看到上圖,由於實際數據庫中neem_hanyang下的兩個表alarmdata_h和commerr是空表,我們要做的工作就是把neem_jabil下的兩個表的數據導到neem_hamyang去。

2 導出

  要滿足上面的需求,我們必須導出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命令來進行數據庫的導入導出操作了。

2.1 mysqldump導出語法以及舉例

  mysqldump的導出語法如下:

  mysqldump -h{hostname} [-P{port}] -u{username} -p{password} [--default-character-set=charset] database [tablename]  {you file path}
  • hostname表示主機名,本地則填localhost,遠程則填寫你的遠程IP,如192.168.0.3;
  • username是你的MySQL登錄帳號,password則是登錄密碼;
  • default-character-set則是你的字符集編碼,如gb2312、gbk和utf8(沒有橫槓哦);
  • dbname是你的數據庫名稱,tablename是你的表名,
  mysqldump -h192.168.0.3 -unikey -p123456 ---character-set=utf8 neem_jabil commerr > d:/

  通過上面的導出語句,將會在d盤下面創建一個jabil.sql腳本文件,這個腳本文件是可運行的,它包含了commerr表的建表細節以及其所有的數據。這就是導出命令的特點,它不但會導出數據,還會導出表或者數據庫的結構信息。另外如果不帶"

> {you file path}"這一部分路徑信息,mysqldump導出命令或把內容打印在dos界面。

  

2.2 mysqldump導入語法以及舉例

  mysqldump的導入有兩種語法要介紹,分別是mysqldump導入法和source導入法:

2.2.1 mysqldump導入

  顧名思義,這種方法則還是用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

2.2.2 source導入

  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;

2.2.3 二者對比

  mysqldump雖然好用,但它實際上也是運用先登錄在運行腳本的策略,只是其中的細節我們無需關心,但是,因為其中有很多遠程連接細節,我們有可能遭遇中文亂碼問題。

  

  mysql > show variables like 'character%';

  

  是否注意到紅圈部分的編碼是latin1?latin1是MySQL的默認字符集,可能由於某種原因你沒有指定默認編碼,它就會默認為latin1了,這就是你中文亂碼出現的原因。

  所以筆者個人建議,如果是作數據導入的話,寧可多做一個步驟,先登錄後使用source命令來導入。

3 mysqldump導出命令擴展

3.1 --opt命令

  在dos下使用mysqldump --help的命令我們可以看到mysqldump更多更詳細的使用方法,下面挑幾個命令進行講解。

  • --opt:此Mysqldump命令參數是可選的,如果帶上這個選項代表激活了Mysqldump命令的quick,add-drop-table,add-locks,extended-insert,lock-tables參數,也就是通過--opt參數在使用Mysqldump導出Mysql數據庫信息時不需要再附加上述這些參數。   
  • --quick:代表忽略緩沖輸出,Mysqldump命令直接將數據導出到指定的SQL文件。
  • --add-drop-table:顧名思義,就是在每個CREATE TABEL命令之前增加DROP-TABLE IF EXISTS語句,防止數據表重名。 
  • --add-locks:表示在INSERT數據之前和之後鎖定和解鎖具體的數據表,你可以打開Mysqldump導出的SQL文件,在INSERT之前會出現LOCK TABLES和UNLOCK TABLES語句。 
  • --extended-insert或-e:此參數表示可以多行插入。

  例如--opt命令的使用,默認情況下--opt是會被調用:

  mysqldump -h192.168.0.3 -unikey -p123456 ---character-set=utf8 --opt neem_jabil commerr_h > d:/jabil3.sql

3.2 --where命令

  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

3.3 --no-data命令

  顧名思義,--no-data的作用就是,舉例如下:  

mysqldump -h192.168.0.3 -unikey -p123456 ---character-set=utf8 --no-data neem_jabil commerr_h > d:/jabil3.sql

4 參考文獻

  1. Mysql導入導出工具Mysqldump和Source命令用法詳解

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved