語法
導出全部數據庫:
mysqldump -u root -p -A > backupfile.sql
導出指定數據庫:
mysqldump -u root -p -B dbName1 dbName2 > backupfile.sql
導出指定表:
mysqldump -u root -p -B dbName tableName1 tableName2 > backupfile.sql
只導出表結構:
mysqldump -u root -p -A -d > backupfile.sql
命令示例
mysqldump -u root -p databaseName tableName -t --insert-ignore -e --max_allowed_packet=2097152 --net_buffer_length=16384 > backupfile.sql;
解釋:
- -A(--all-databases):導出所有數據庫;
- -B(--databases):導出指定數據庫,後邊可跟多個參數;
- -t(--no-create-info):不導出創表的語句。不加參數是默認導出建表語句(先drop table而後create table);
- -d(--no-data):不導出任何數據,只導出數據庫表結構;
- --insert-ignore:導出的insert語句加上ignore,容許重複執行。默認不會加上ignore;
- -e(--extended-insert):使用具備多個VALUES列的INSERT語法。這樣使導出文件更小,並加速導入時的速度。默認爲打開狀態,使用--skip-extended-insert取消選項;
- --max_allowed_packet:客戶端/服務器之間通訊的緩存區的最大大小;
- --net_buffer_length:TCP/IP和套接字通訊緩衝區大小,建立長度達net_buffer_length的行。
- --single-transaction:該選項在導出數據以前提交一個BEGIN SQL語句,BEGIN 不會阻塞任何應用程序且能保證導出時數據庫的一致性狀態。它只適用於多版本存儲引擎,僅InnoDB。本選項和--lock-tables 選項是互斥的,由於LOCK TABLES 會使任何掛起的事務隱含提交。要想導出大表的話,應結合使用--quick 選項。
注意
max_allowed_packet 和 net_buffer_length 不能比目標數據庫的設定數值大,不然可能出錯。html
肯定目標數據庫的參數值的方法:mysql
mysql> show variables like 'max_allowed_packet';
mysql> show variables like 'net_buffer_length';
參考
- http://www.rover12421.com/2013/01/10/mysql-big-data-fast-import-and-export.html
- http://codingstandards.iteye.com/blog/1522622
- http://segmentfault.com/blog/koy/1190000000621104