MySQL Mysqldump 常見問題和處理
關於本文
今天小雲主要為大家講解MySQL Mysqldump常見的四種問題及相應的解決辦法,遇到類似問題的童鞋可以參考,希望對大家有幫助!
一、GTID 特性相關
MySQL 5.6 引入了 GTID 特性,因此隨 5.6 版本分發的 mysqldump 工具增加了 —set-gtid-purged 選項。
ON:在 mysqldump 輸出中包含 SET @@GLOBAL.GTID_PURGED 語句。
OFF:在 mysqldump 輸出中不包含 SET @@GLOBAL.GTID_PURGED 語句。
AUTO:默認值;對於啟用 GTID 實例,會輸出 SET @@GLOBAL.GTID_PURGED 語句;對於沒有啟動或者不支持 GTID 的實例,不輸出任何 GTID 相關信息。
因此對於使用 MySQL 5.6 及以上版本帶有的 mysqldump 工具進行 for MySQL 實例數據導出時設置該選項為 OFF。
注意:如果 mysqldump 設置 set-gtid-purged=ON 從 for MySQL 5.5 或 5.1 版本實例導出數據,mysqldump 會提示下面的錯誤:
Error: Server has GTIDs disabled.
或者
mysqldump: Couldn』t execute 『SELECT @@GTID_MODE』: Unknown system variable 『GTID_MODE』
二、避免表級鎖等待
mysqldump 默認會啟用 lock-tables 選項,對要導出的表加表級鎖,阻止表上的 DML 操作。
for MySQL 實例默認支持的 InnoDB 和 TokuDB 引擎均支持事務,建議使用 single-transaction 選項進行導出,而不要設置 lock-all-tables 或 lock-tables 選項。
三、設置導出字符集
如果不指定,mysqldump 默認使用 UTF8 字符集進行導出。
四、其他導出時需要注意的選項
五、舉例
1. 導出庫 jacky 下的 teacher 表,包括表上的觸發器,導出字符集是 utf8mb4
1)mysqldump —no-defaults -h實例URL -uuser_name -P3306 -ppass_word —set-gtid-purged=off —default-character-set=utf8mb4 —hex-blob —single-transaction —result-file=jacky_teacher.sql jacky teacher
# -p 選項指定密碼,密碼和選項間不要有空格
# -P 選項指定實例的埠
# -h 選項指定 實例的 URL 地址
# -u 選項指定使用的資料庫用戶
# 也可以使用下面的方式進行導出
mysqldump —no-defaults -h實例URL -uuser_name -P3306 -ppass_word —set-gtid-purged=off —default-character-set=utf8mb4 —hex-blob —single-transaction jacky teacher > jacky_teacher.sql
2. 導出庫 jacky,包括存儲過程和函數,不包括 lock tables 和 unlock tables 語句
1)mysqldump —no-defaults -h實例URL -uuser_name -ppass_word -P3306 —set-gtid-purged=off —hex-blob —single-transaction —routines —skip-add-locks —result-file=jacky.sql jacky
# —routines — 導出庫涉及的存儲過程和函數
# —skip-add-locks — 輸出中不包括 lock tables table_name write; 和 unlock tables; 語句
3. 導出庫 jacky,包括存儲過程、函數、觸發器、事件,不包括數據
1)mysqldump —no-defaults -h實例URL -uuser_name -ppass_word -P3306 —set-gtid-purged=off —hex-blob —single-transaction —routines —events —no-data —result-file=jacky.sql jacky
# 觸發器選項 —triggers 默認開啟,因此不需要指定
# —events — 導出庫涉及的定時事件(計劃任務)
# —no-data — 不導出數據
4. 導出庫 jacky,不包括 庫、表創建語句,不包括 drop table 語句
1)mysqldump —no-defaults -h實例URL -uuser_name -ppass_word -P3306 —set-gtid-purged=off —hex-blob —single-transaction —no-create-db —no-create-info —skip-add-drop-table —result-file=jacky.sql jacky
# —no-create-db — 輸出中不包括庫的創建語句
# —no-create-info — 輸出中不包括表的創建語句
# —skip-add-drop-table — 輸出中不包括表的刪除語句
5. 導出庫 jacky,jerry,jason,不包括表 jacky.teacher, jason.orders, jerry.sales
1)mysqldump —no-defaults -h實例URL -uuser_name -P3306 -ppass_word —set-gtid-purged=off —hex-blob —single-transaction —result-file=jacky_jerry_jason.sql —ignore-table=jacky.teacher —ignore-table=jason.orders —ignore-table=jerry.sales —databases jacky jerry jason
# —ignore-table — 指定不進行導出的表
# —databases — 指定要進行導出的資料庫名稱
6. 導出庫 jacky,包括存儲過程和函數,盡量兼容 SQL SERVER 語法
1)mysqldump —no-defaults -h實例URL -uuser_name -P3306 -ppass_word —set-gtid-purged=off —compatible=mssql —routines —hex-blob —single-transaction —result-file=jacky_mssql.sql jacky
# —compatible=mssql — 增加對 SQL SERVER 的語法兼容性
你一定還想看
京東雲
不止於雲計算
還沒關注就說不過去了老鐵
TAG:京東雲 |