mysqldump 客戶端工具用來備份數據庫或在不同數據庫之間進行數據遷移。備份內容包含創建表或裝載表的 SQL 語句。mysqldump 目前是 MySQL 中最常用的備份工具。
有 3 種方式來調用 mysqldump:
shell>mysqldump [shell>options]db_name[tbl_name...] #備份單個數據庫或者庫中部分數據表mysqldump [shell>options] --databasesdb_name... #備份指定的一個或者多個數據庫mysqldump [options] --all-databases #備份所有數據庫
官方文檔:https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#mysqldump-performance-options
連接選項:
-u , --user=name 指定用戶名
-p , --password[=name] 指定密碼
-h , --host=name 指定服務器 IP 或者域名
-P , --prot=# 指定連接端口
這 4 個選項經常一起配合使用,如果客戶端位於服務器上,則通常不需要指定 host。如果不指定端口,那么默認連接到 3306 端口,以下是一個遠程客戶端連接到服務器的例子:
1 mysqldump -h192.168.7.55 -P3306 -uroot -p test > test.txt
輸出內容選項:
--add-drop-database 每個數據庫創建語句前加上 DROP DATABASE 語句
--add-drop-table 在每個表創建語句前加上 DROP TABLE 語句
以上這兩個選項可以在導入數據庫時不用先手工刪除舊的數據庫,而是會自動刪除,提高導入效率,但是導入前一定要做好備份並且確認舊數據庫的確已經可以刪除,否則誤操作將會造成數據的丟失。在默認情況下,這兩個參數都自動加上。
-n , --no-create-db 不包含數據庫的創建語句
-t , --no-create-info 不包含數據表的創建語句
-d , --no-data 不包含數據
這 3 個選項分別表示備份文件中不包含數據庫的創建語句、不包含數據表的創建語句、不包含數據,在不同的場合下,用戶可以根據實際需求來進行選擇。
輸出格式選項
--compact 選項使得輸出結果簡潔,不包括默認選項中的各種注釋。
-c 或者 --complete-insert 選項使得輸出文件中的 insert 語句也包括字段名稱,默認是不包括字段名稱的。
-T 選項將指定數據表中的數據備份為單純的數據文本和建表 SQL 兩個文件,經常和下面幾個選項一起配合使用,將數據導出為指定格式顯示。
-T , --tab=name 備份數據和建表語句
--fields-terminated-by=name 域分隔符
--fields-enclosed-by=name 域引用符
--fields-optionally-enclosed-by=name 域可選引用符
--fields-escaped-by=name 轉義字符

導出為

字符集選項:
--default-character-set=name 選項可以設置導出的客戶端字符集。
這個選項在導出數據庫的時候非常重要,如果客戶端字符集和數據庫字符集不一致,數據在導出的時候就需要進行字符集轉換,將數據庫字符集轉換為客戶端字符集,經過轉換后的數據很可能成為亂碼或者 ? 等特殊字符,使得備份文件無法恢復。
其他常用選項:
-F --flush-logs #備份前刷新日志
加上此選項后,備份前將關閉舊日志,生成新日志。使得進行恢復的時候直接從新日志開始重新做,大大方便了恢復過程。
-l --lock-tables #給所有表加讀鎖
可以在備份期間使用,使得數據無法被更新,從而使備份的數據保持一致性,可以配合 -F 選項一起使用。
關聯表,去除建表語句,鎖表問題
1 D:\Desktop>mysqldump -h10.70.12.17 -P3306 -uroot -p -t SAJT_DZFP_PT tbl_ec_document_ 2 item --where="fpqqlsh in (select fpqqlsh from tbl_ec_document t where unix_time 3 stamp(t.create_date)>unix_timestamp('2016-06-20 15:37:34')") --skip-lock-tables 4 > shit.sql 5 Enter password: **********
-t 跳過表相關語句
