一、匯出資料
先說明一下自己的環境:Mac OS X 10.8.3, MySQL Community Server 5.6.10, MySQL Workbench 5.2.47。
我想把本機資料庫內的資料移轉到另一台機器上,於是使用Workbench中內建的import/export功能,其實就是調用mysqldump。不幸的是,出現了版本不一致的錯誤。
錯誤沒治了,最終找到解決方案,可以指定mysql的mysqldump,路徑為:/usr/local/mysql/bin/mysqldump,這樣是把資料匯出為sql語句的insert語句。
由於需要是把資料匯出為excel,所以通過mysql控制台使用select語句把資料匯出到excel檔案中。
下面先介紹怎麼匯出為excel檔案,然後介紹怎麼匯出為insert語句。
1、通過終端操作。
- cd /usr/local/mysql/bin/
2、到達bin目錄後,可以ls -l命令看看目前的目錄有哪些程式可以用,這裡先用mysql,命令格式為:
mysql -h主機IP -u使用者名稱 -p密碼
如:
- ./mysql -hlocalhost -uroot -p123456
注意前面加的"./"。
這時就進入mysql命令控制台,終端上顯示為:
3、然後通過show databases命令查看當前的所有資料庫,使用use命令選擇進入某個資料庫,注意每個命令都要以英文分號“;”結束。
4、使用sql語句匯出需要的資料,sql語句不限於單個表的查詢。由於我的資料庫編碼是utf8格式,而office預設的編碼則是gb2312,所以當某個欄位中包含中文時,匯出到excel後,中文內容是會亂碼的,此時需要convert轉換編碼,具體使用方式:
我試著把檔案儲存到案頭,但始終提示沒有許可權,應該是和使用者有關吧,無視了。當使用“./”這個路徑儲存時,實際是儲存到了/usr/local/mysql/data下面。開啟看看,喲西,不亂碼了。
5、下面是把資料匯出為sql的insert語句。
使用mysqldump命令,可以指定是單個表還是整個資料庫匯出。
開啟終端,定位到/usr/local/mysql/bin,使用這個目錄下的mysqldump。
匯出單個表:
命令格式為:
mysqldump -u使用者名稱 -p密碼 -h主機地址 資料庫名 表名 > 匯出檔案儲存體路徑
例如:
- /usr/local/mysql/bin/mysqldump -uroot -p123456 -hlocalhost -t --extended-insert=false --default-character-set=utf8 SpiderBBSDB Catalog > /Users/ethan/Desktop/Catalog.sql
其中用到了幾個參數,簡單說明一下:
-t:等同於--no-create-info,只匯出資料,而不添加CREATE TABLE 語句。預設匯出的檔案中也有create table語句。
--extended-insert:使用具有多個VALUES列的INSERT文法,也就是傳說中一次插入多條資料的INSERT句式。這樣使匯出檔案更小,並加速匯入時的速度,但是有可能sql語句會有長度限制,所以我並不推薦此種方式,比如我某個表中有500W條資料,難保能用一條insert語句可以執行完畢。此選項預設為開啟狀態,把他置為false,就是一條資料一個insert語句了。
--default-character-set:設定預設字元集,由於我的資料庫和表均是設定為utf8編碼格式,當不設定此選項時,匯出的中文是亂碼,奇怪的是官方說明中,說這個選項的預設值是utf8,表示不解。
匯出整個資料庫:
- /usr/local/mysql/bin/mysqldump -uroot -p123456 -hlocalhost -t --extended-insert=false
- --default-character-set=utf8 SpiderBBSDB > /Users/ethan/Desktop/SpiderBBSDB.sql
二、匯入資料。
有匯出就有匯入。上面第5步匯出的sql檔案,可以直接在mysql workbench中執行,也可以使用mysqldump匯入,這裡說明一下如何使用mysqldump匯入:
/usr/local/mysql/bin/mysqldump -uroot -p123456 -hlocalhost --default-character-set=utf8 SpiderBBSDB < /Users/ethan/Desktop/Catalog.sql
三、關於java串連mysql寫入中文亂碼。
關於這個中文亂碼問題,著實折騰了我好久好久。一開始就百度Googlebing,網上大多複製粘貼的答案,在這裡記錄一下自己的情況,希望同路人不再走彎路。
其實我的修改很簡單,把資料庫的編碼改為utf-8,在建立表時,把表的預設編碼也改為utf-8,就可以了。就這麼個小小的改動,讓我足足折騰了一個通宵,表示有解決問題強迫症,問題不解決真的睡不著,唉~~~
編輯精選】
- 維基逃離MySQL 力挺開來源資料庫
- MariaDB成為MySQL命運轉折點?
- MySQL遭遇DELETE誤操作的復原
- 一步完成MySQL向Redis遷移
- 兩種方法解決mysql主從不同步