無論是搭建測試環境、克隆專案還是資料遷移,MySQL 提供多種高效的資料庫/資料表複製方案。本文匯總命令行工具、SQL 語句及最佳實踐,涵蓋同機房與跨機房場景。
# 1. 建立目標資料庫
mysql -u root -p -e "CREATE DATABASE \`newdb\` DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;"
# 2. 管道流式複製(無中間檔案,效能最優)
mysqldump db1 -u root -p --add-drop-table | mysql newdb -u root -p
關鍵參數:--add-drop-table 確保目標表存在時先刪除再建立,避免衝突;-p 後直接接密碼無空格。
mysqldump db1 -u root -p --add-drop-table | mysql -h 192.168.1.22 newdb -u root -p
前提:目標 MySQL 允許遠程連線,網路頻寬與延遲可接受。大資料庫建議壓縮傳輸:mysqldump ... | gzip | ssh target "gunzip | mysql ..."。
CREATE TABLE mytbl_new LIKE production.mytbl;
INSERT mytbl_new SELECT * FROM production.mytbl;
LIKE 完整複製結構(含索引、主鍵、AUTO_INCREMENT 等);INSERT ... SELECT 高效批量寫入資料。
CREATE TABLE new_table LIKE old_table;
-- 或
CREATE TABLE new_table SELECT * FROM old_table WHERE 0;
CREATE TABLE new_table SELECT * FROM old_table;
缺陷:新表不會繼承主鍵、索引、外鍵、AUTO_INCREMENT 等約束,僅為查詢結果集建表,後續需手動 ALTER TABLE 補齊,易出錯。
CREATE TABLE newdb.newtbl LIKE olddb.oldtbl;CREATE TABLE newtbl (SELECT col1, col2 FROM oldtbl);CREATE TABLE newtbl (SELECT id, name AS uname FROM oldtbl);CREATE TABLE newtbl (SELECT * FROM oldtbl WHERE name LIKE 'A%');CREATE TABLE newtbl (id INT PRIMARY KEY AUTO_INCREMENT) SELECT * FROM oldtbl;
# 導出單表結構+資料
mysqldump -u root -p db1 tbl1 > tbl1.sql
# 導入
mysql -u root -p db1 < tbl1.sql
結合 --no-data、--no-create-info 等參數可靈活控制導出內容。