本文總結各種場景下的數據複製、遷移、轉換。
1、導入、導出
利用mysqldump命令將數據文件導出成一個文本文件,這在不同場景下具有更高的安全性。如:表引擎改變。
數據導出:mysqldump -uroot -p dbname > dbname.sql (包含表結構和表數據)
數據導入:mysql -uroot -p dbname < dbname.sql
注意:導出的sql文件包含舊錶信息,請修改其中的create table語句。在create之前會有一個DROP table 操作。如果沒有注意到這點,原數據就會被刪除。這種情況可以用下列的sql操作:
只導出:數據:mysqldump -uroot -p -t dbname > dbname.sql
只導出表結構:mysqldump -uroot -p -d dbname > dbname.sql
2、將一張表的數據轉換到另一張表、並且更新表結構
a、以下sql適用於小量數據,速度快。
- mysql>create table innodb_table like myisam_table;
- mysql>alter table innodb_table engine=innodb;
- mysql>insert into innodb_table select * from myisam_table;
b、更高效的辦法是增量的填充表,在填充每個增量數據塊時都提交事務,這樣就不會導致撤銷日誌過大,假設id是主鍵,可以重複運行一下查詢(每次逐漸增大x和y值)直到所有數據都複製到新表。
- mysql>start transaction;
- mysql>insert into innodb_table select * from myisam_table where id between x and y;
- mysql>commit;
轉移操作完成後,源表仍會保留,可以在完成操作後DROP它,注意:如有必要,在轉換時加鎖源表,防止在轉換時數據不一致。