mysqldump小談

tangguowuvv發表於2018-03-16
 如同oracle的邏輯備份工具有exp和expdp一樣,mysql也有自己優秀的邏輯備份工具,那就是mysqldump,它可以很容易的備份恢復所有庫,某個庫,或者某張表,在資料遷移工作中有著舉足輕重的地位。在介紹mysqldump之前,不妨說一個事情,兩年前的時候,那會兒我還沒有接觸過mysql,整個人撲在oracle身上(oracle是哪一位漂亮的妹子呢?),某一天一個同事找到我,讓我把mysql的資料做一個備份,其實當時我是拒絕的,不過人家都提出需求了,那麼也只能硬著頭皮"Duang"的一聲答應,幸運的是我當時一直有接觸Navicat Premium這款工具,它本身就有資料遷移和備份功能,它會把mysql的資料備份為.psc格式,然後再利用這款軟體恢復這個.psc格式的檔案就可以了,但是後來我發現這種備份方式會無緣無故的丟失一些物件,自己也一直沒有找到原因,老同事啊,您可千萬別看見我的這篇文章啊,我現在還真的不敢保證當時備份的完整性(趕緊跑路)。現在想來,其實一個簡單的mysqldump命令就可以搞定了,凡事沒有如果,對於技術只有一條路,那就是不斷學習,不斷進步。好啦,憶往昔崢嶸歲月稠啊,那我就直奔主題嘍。
一、在客戶端配置mysql
mysqldump是一個客戶端工具,可以直接將資料備份到到本地。在客戶端配置mysql非常簡單,兩步走:
1、去服務端的bin目錄下直接將mysql.exe和mysqldump.exe複製到本地,比如我複製到C:\mysql下;
2、配置環境變數,將C:\mysql直接加入Path中就可以了。
二、mysqldump
1、匯出某使用者下所有資料庫,在這裡我匯出root下所有的資料庫
mysqldump -uroot -p - -all-databases>C:\Users\QuJian\Desktop\a.dmp 然後會提示你輸入root的密碼,就會進入備份過程。
解釋:mysqldump是在作業系統介面下執行的,這一點需要牢記。mysqldump是備份命令,告訴mysql我要匯出資料,-u表明連線哪一個匯出使用者,-p使用者密碼,- -all-databases意思是匯出此使用者下所有資料庫,>指出備份匯出的位置,在這裡我把他匯出到C:\Users\QuJian\Desktop(桌面)了,備份檔名為a.dmp,這個字尾名不止可以是dmp,還可以是.text,.sql等等,字尾名沒啥要求,其實都是sql指令碼檔案。用Notepad++開啟這個備份檔案,會發現對於庫的備份檔案,大概可以分為建立資料庫判斷語句---刪除表---建立表---鎖表---禁用索引---插入資料--啟用索引---解鎖表這幾部分。
2、匯出使用者下某些資料庫
mysqldump -uroot -p - -databases oa tsshop>C:\Users\QuJian\Desktop\a.dmp
解釋:- -database指明匯出哪個庫,這裡匯出了oa和tsshop兩個庫
3、匯出某些表
mysqldump -uroot -p - -database tsshop - -tables himall_active>C:\Users\QuJian\Desktop\a.dmp
解釋:- -table參數列名匯出哪些表,用Notepad++開啟備份檔案,可以發現,備份檔案由:刪除表--建立表--匯入資料組成
4、帶條件的表匯出
mysqldump -uroot -p - -database tsshop - -tables himall_active - -where='id=1'>C:\Users\QuJian\Desktop\a.dmp
mysqldump -uroot -p - -database tsshop - -tables himall_active - -where="name='張三'">C:\Users\QuJian\Desktop\a.dmp
解釋:- -where參數列明匯出表的條件
5、只匯出表結構不匯出具體資料
mysqldump -uroot -p - -databases tsshop - -no-data>C:\Users\QuJian\Desktop\a.dmp
解釋:- -no-data引數指定只匯出表結構,不匯出表資料
6、注意,我們是在客戶端操作的,那麼,對於前面的每一個匯出操作,不論是庫還是表,我們都要指出源伺服器地址,使用引數- -host
mysqldump -uroot -p - -host=10.0.0.47 - -databases tsshop - -no-data>C:\Users\QuJian\Desktop\a.dmp
7、匯出儲存過程和自定義函式
mysqldump -uroot -p - -host=10.0.0.47 - -databases tsshop - -routines>C:\Users\QuJian\Desktop\a.dmp
解釋:- -routines引數指出需要匯出儲存過程和自定義函式,除了- -all-databases會預設備份儲存過程和自定義函式,單獨備份資料庫,表是不會帶儲存過程和自定義函式的。
8、匯出事件
mysqldump -uroot -p - -host=10.0.0.47 - -databases tsshop- -routines - -events>C:\Users\QuJian\Desktop\a.dmp
解釋:- -events參數列示將事件也匯出來,除了- -all-databases會預設備份事件,單獨備份資料庫,表是不會帶事件的
9、- -add-drop-database
mysqldump -uroot -p - -host=10.0.0.47 - -databases tsshop- -routines - -events  - -add-drop-database>C:\Users\QuJian\Desktop\a.dmp
解釋:- -add-drop-database的意思是在生成的sql語句中新增drop database語句,這個用於此使用者下本來就有這個資料庫,在匯入之前先刪除同名資料庫,再新建立資料庫。不過我感覺沒啥用,因為如果不宣告這個引數,sql語句中就不會建立同名資料庫,只用刪除表重建表就可以了,照樣可以匯入資料。
10、- -add-drop-table
mysqldump -uroot -p - -host=10.0.0.47 - -databases tsshop- -routines - -events - -add-drop-table>C:\Users\QuJian\Desktop\a.dmp
解釋:
 - -add-drop-table意思是在匯入表之前先刪除同名表,這個引數是一個預設引數,如果想取消這個預設引數可以使用- -skip-add-drop-table
11、- -add-locks
mysqldump -uroot -p - -host=10.0.0.47 - -databases tsshop- -routines - -events - -add-locks>C:\Users\QuJian\Desktop\a.dmp
解釋:
- -add-locks意思是在匯出每個表之前加鎖,匯出之後再釋放鎖,這個也是預設開啟的,取消這個引數使用- -skip-add-locks
12、- -comments
mysqldump -uroot -p - -host=10.0.0.47 - -databases tsshop- -routines - -events - -comments>C:\Users\QuJian\Desktop\a.dmp
解釋:- -comments意思是匯出註釋資訊,取消可以使用- -skip-comments
13、- -force
mysqldump -uroot -p - -host=10.0.0.47 - -databases tsshop- -routines - -events - -force>C:\Users\QuJian\Desktop\a.dmp
解釋:- -force意思是忽略匯出中的sql錯誤

14、- -triggers
mysqldump -uroot -p - -host=10.0.0.47 - -databases tsshop- -routines - -events - -triggers>C:\Users\QuJian\Desktop\a.dmp
解釋:
- -triggers意思是匯出觸發器,此選項預設開啟,不像- -routines - -events 不會預設開啟,取消使用- -skip-triggers
三、匯入資料
匯入方式有兩種:
1、直接在作業系統級別上進行匯入操作
匯入整個庫:mysql -h 10.0.0.44 -uroot -p<C:\Users\QuJian\Desktop\a.dmp
解釋:-h是目標資料庫的地址,意思是將a.dmp匯入到10.0.0.44這個庫
在這裡,我需要特別說一下字符集,因為10.0.44這個資料庫是我新建立的,default-character-set和character-set-server都是utf8,但是匯出資料由於存在emoji字元,所以資料庫的字符集是utf8mb4,這樣在匯入的時候就會報字符集的錯誤,因此需要這樣解決,首先,修改目標庫的字符集,將其修改為utf8的超集utf8mb4,然後再匯入資料,匯入資料的時候需要加引數- -default-character-set=utf8mb4,整個匯入命令就變成了:
mysql -h 10.0.0.44 -uroot -p - -default-character-set=utf8mb4<C:\Users\QuJian\Desktop\a.dmp
匯入某張表:mysql -h 10.0.0.44 -uroot -p  - -default-character-set=utf8mb4 tsshop<C:\Users\QuJian\Desktop\a.dmp
2、登入資料庫執行匯入
首先登入資料庫:
mysql -h 10.0.0.44 -uroot -p - -default-character-set=utf8mb4
然後進行匯入操作。
匯入整個庫:
mysql>source C:\Users\QuJian\Desktop\a.dmp;
將某張表匯入tsshop這個庫:
mysql>use tsshop;
mysql>source C:\Users\QuJian\Desktop\a.dmp;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30485601/viewspace-2151944/,如需轉載,請註明出處,否則將追究法律責任。

相關文章