MySQL 表間資料複製:同庫與跨庫實戰語法大全
場景一:同資料庫表間複製
-- 全量
INSERT INTO db_target.t1 SELECT * FROM db_source.t1;
-- 指定欄位
INSERT INTO db_target.t1 (id, name, email)
SELECT id, username, email FROM db_source.users WHERE created_at > '2024-01-01';
場景三:結構不同表的欄位映射複製
-- 僅結構
CREATE TABLE new_table LIKE old_table;
-- 結構 + 資料
CREATE TABLE new_table AS SELECT * FROM old_table;
-- 跨庫建表複製
CREATE TABLE db2.new_table AS SELECT * FROM db1.old_table;
場景五:大表分批複製(避免長事務鎖表)
| 項目 | 說明 |
| 自增主鍵 | 目標表若有 AUTO_INCREMENT,INSERT 不指定 id 會自動生成;若需保留原 id,需 SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO' |
| 觸發器 | INSERT 會觸發目標表 BEFORE/AFTER INSERT 觸發器 |
| 外鍵約束 | 若目標表有 FK,來源資料必須滿足引用完整性 |
| 字符集 | 跨庫複製確保字符集一致,否則可能亂碼 |
| 權限 | 執行帳號需擁有來源表 SELECT、目標表 INSERT 權限 |
進階工具推薦
- pt-archiver:Percona Toolkit 組件,支援分塊、條件、延遲、檢查和刪除來源
- mysqldump + pipe:
mysqldump db1 t1 | mysql db2 適合全表遷移
- DataX / Canal:異構/同步場景