背景
任何情況下都會有數(shù)據(jù)遷移的需求莉炉,今天要說的場景是從RDS將數(shù)據(jù)導(dǎo)出躏结,并導(dǎo)入到ECS自建的MySQL數(shù)據(jù)庫中湃累。
文章最后會給出操作的詞句栅干。
mysqldump命令詳解
- 備份
[root@snails ~]# mysqldump -u用戶名 -p密碼 -h主機(jī) 數(shù)據(jù)庫 a -w "sql條件" --lock-all-tables > 路徑
- 還原
[root@snails ~]# mysqldump -u用戶名 -p密碼 -h主機(jī) 數(shù)據(jù)庫 < 路徑
- 按條件導(dǎo)出
[root@snails ~]# mysqldump -u用戶名 -p密碼 -h主機(jī) 數(shù)據(jù)庫 a --where "條件語句" --no-建表> 路徑
- 按條件導(dǎo)入
[root@snails ~]# mysqldump -u用戶名 -p密碼 -h主機(jī) 數(shù)據(jù)庫 a --where "條件語句" --no-建表> 路徑
- 導(dǎo)出表
[root@snails ~]# mysqldump -u用戶名 -p密碼 -h主機(jī) 數(shù)據(jù)庫 表
參數(shù)詳解
**--compatible=name **
它告訴 mysqldump,導(dǎo)出的數(shù)據(jù)將和哪種數(shù)據(jù)庫或哪個(gè)舊版本的 MySQL 服務(wù)器相兼容宏榕。值可以為 ansi拓诸、mysql323、mysql40担扑、postgresql恰响、oracle、mssql涌献、db2、maxdb首有、no_key_options燕垃、no_tables_options、no_field_options 等井联,要使用幾個(gè)值卜壕,用逗號將它們隔開。當(dāng)然了烙常,它并不保證能完全兼容轴捎,而是盡量兼容。
**--complete-insert蚕脏,-c **
導(dǎo)出的數(shù)據(jù)采用包含字段名的完整 INSERT 方式侦副,也就是把所有的值都寫在一行。這么做能提高插入效率驼鞭,但是可能會受到 max_allowed_packet 參數(shù)的影響而導(dǎo)致插入失敗秦驯。因此,需要謹(jǐn)慎使用該參數(shù)挣棕,至少我不推薦译隘。
**--default-character-set=charset **
指定導(dǎo)出數(shù)據(jù)時(shí)采用何種字符集亲桥,如果數(shù)據(jù)表不是采用默認(rèn)的 latin1 字符集的話,那么導(dǎo)出時(shí)必須指定該選項(xiàng)固耘,否則再次導(dǎo)入數(shù)據(jù)后將產(chǎn)生亂碼問題题篷。
*--disable-keys **
告訴 mysqldump 在 INSERT 語句的開頭和結(jié)尾增加 /!40000 ALTER TABLE table DISABLE KEYS /; 和 /!40000 ALTER TABLE table ENABLE KEYS */; 語句,這能大大提高插入語句的速度厅目,因?yàn)樗窃诓迦胪晁袛?shù)據(jù)后才重建索引的悼凑。該選項(xiàng)只適合 MyISAM 表。
**--extended-insert = true|false **
默認(rèn)情況下璧瞬,mysqldump 開啟 --complete-insert 模式户辫,因此不想用它的的話,就使用本選項(xiàng)嗤锉,設(shè)定它的值為 false 即可渔欢。
**--hex-blob **
使用十六進(jìn)制格式導(dǎo)出二進(jìn)制字符串字段。如果有二進(jìn)制數(shù)據(jù)就必須使用本選項(xiàng)瘟忱。影響到的字段類型有 BINARY奥额、VARBINARY、BLOB访诱。
**--lock-all-tables垫挨,-x **
在開始導(dǎo)出之前,提交請求鎖定所有數(shù)據(jù)庫中的所有表触菜,以保證數(shù)據(jù)的一致性九榔。這是一個(gè)全局讀鎖,并且自動(dòng)關(guān)閉 --single-transaction 和 --lock-tables 選項(xiàng)涡相。
**--lock-tables **
它和 --lock-all-tables 類似哲泊,不過是鎖定當(dāng)前導(dǎo)出的數(shù)據(jù)表,而不是一下子鎖定全部庫下的表催蝗。本選項(xiàng)只適用于 MyISAM 表切威,如果是 Innodb 表可以用 --single-transaction 選項(xiàng)。
**--no-create-info丙号,-t **
只導(dǎo)出數(shù)據(jù)先朦,而不添加 CREATE TABLE 語句。
**--no-data犬缨,-d **
不導(dǎo)出任何數(shù)據(jù)喳魏,只導(dǎo)出數(shù)據(jù)庫表結(jié)構(gòu)。
**--opt **
這只是一個(gè)快捷選項(xiàng)遍尺,等同于同時(shí)添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 選項(xiàng)截酷。本選項(xiàng)能讓 mysqldump 很快的導(dǎo)出數(shù)據(jù),并且導(dǎo)出的數(shù)據(jù)能很快導(dǎo)回。該選項(xiàng)默認(rèn)開啟迂苛,但可以用 --skip-opt 禁用三热。注意,如果運(yùn)行 mysqldump 沒有指定 --quick 或 --opt 選項(xiàng)三幻,則會將整個(gè)結(jié)果集放在內(nèi)存中就漾。如果導(dǎo)出大數(shù)據(jù)庫的話可能會出現(xiàn)問題。
**--quick念搬,-q **
該選項(xiàng)在導(dǎo)出大表時(shí)很有用抑堡,它強(qiáng)制 mysqldump 從服務(wù)器查詢?nèi)〉糜涗浿苯虞敵龆皇侨〉盟杏涗浐髮⑺鼈兙彺娴絻?nèi)存中。
**--routines朗徊,-R **
導(dǎo)出存儲過程以及自定義函數(shù)首妖。
**--single-transaction **
該選項(xiàng)在導(dǎo)出數(shù)據(jù)之前提交一個(gè) BEGIN SQL語句,BEGIN 不會阻塞任何應(yīng)用程序且能保證導(dǎo)出時(shí)數(shù)據(jù)庫的一致性狀態(tài)爷恳。它只適用于事務(wù)表有缆,例如 InnoDB 和 BDB。
本選項(xiàng)和 --lock-tables 選項(xiàng)是互斥的温亲,因?yàn)?LOCK TABLES 會使任何掛起的事務(wù)隱含提交棚壁。
要想導(dǎo)出大表的話,應(yīng)結(jié)合使用 --quick 選項(xiàng)栈虚。
**--triggers **
同時(shí)導(dǎo)出觸發(fā)器袖外。該選項(xiàng)默認(rèn)啟用,用 --skip-triggers 禁用它魂务。