首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 快速複製表結構與資料:CREATE TABLE ... LIKE + INSERT ... SELECT 兩步驟完成測試環境克隆

     編輯:MySQL 資料庫相關知識

核心指令組合

-- 1. 複製結構(含索引、主鍵、自增、引擎、字符集)
CREATE TABLE mytbl_new LIKE production.mytbl;

-- 2. 複製資料
INSERT INTO mytbl_new SELECT * FROM production.mytbl;

為什麼不直接用 CREATE TABLE ... SELECT?

特性LIKE + INSERT SELECTCREATE TABLE ... SELECT
索引/主鍵/自增✅ 完整保留❌ 丟失(自增變 DEFAULT 0)
儲存引擎✅ 保留❌ 變為預設引擎
字符集/校對✅ 保留⚠️ 可能不一致
外鍵✅ 保留❌ 不複製
觸發器/視圖❌ 不複製(需單獨處理)❌ 不複製

進階場景

跨資料庫複製

CREATE TABLE db2.mytbl_new LIKE db1.mytbl;
INSERT INTO db2.mytbl_new SELECT * FROM db1.mytbl;

僅複製部分欄位/條件資料

CREATE TABLE mytbl_subset LIKE mytbl;
INSERT INTO mytbl_subset (id, name, status)
SELECT id, name, status FROM mytbl WHERE status = 1;

大表分批複製(避免長事務、鎖表、Binlog 膨脹)

CREATE TABLE mytbl_new LIKE mytbl;
-- 假設 id 為自增主鍵,每批 1 萬行
INSERT INTO mytbl_new SELECT * FROM mytbl WHERE id BETWEEN 1 AND 10000;
INSERT INTO mytbl_new SELECT * FROM mytbl WHERE id BETWEEN 10001 AND 20000;
-- ... 循環直到覆蓋全表

線上環境零停機複製(配合 pt-online-schema-change / gh-ost)

若源表有持續寫入,直接 INSERT ... SELECT 會造成主從延遲、鎖爭用。生產環境請使用:

  • pt-online-schema-change (Percona Toolkit)
  • gh-ost (GitHub)

兩者皆採用「建影子表 → 分批複製 → 追蹤 Binlog 增量 → 原子切換」流程,實現 **DDL 無鎖、資料零丟失**。

結語

CREATE TABLE ... LIKE + INSERT ... SELECT 是 MySQL 複製表的**黃金組合**:結構完美克隆、資料精確同步、語法標準、跨版本相容。測試環境克隆、歸檔表建立、Schema 變更預演,皆宜優先採用。大表、線上環境請疊加分批或在線變更工具,做到「複製無感、業務無損」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved