<p>分批遷移可避免鎖表和超時問題,通過主鍵分段使用LIMIT和WHERE條件控制數(shù)據(jù)量,示例:INSERT INTO target_table SELECT * FROM source_table WHERE id > 1000000 AND id <= 2000000;</p>
遷移大數(shù)據(jù)量表在 MySQL 中是一項需要謹(jǐn)慎處理的任務(wù),直接使用常規(guī)的 INSERT INTO ... SELECT
或?qū)С鰧?dǎo)入方式容易導(dǎo)致鎖表、耗盡內(nèi)存或執(zhí)行時間過長。以下是幾種高效且安全的遷移方法,適用于不同場景。
對于千萬級以上的表,建議采用分批次遷移的方式,避免長時間持有鎖或占用過多資源。
INSERT INTO target_table SELECT * FROM source_table WHERE id > 1000000 AND id
可以編寫腳本循環(huán)執(zhí)行,逐步推進遷移進度。每批完成后可短暫休眠,減少對線上服務(wù)的影響。
Percona Toolkit 提供的 pt-osc 可以在線修改表結(jié)構(gòu)并遷移數(shù)據(jù),過程中原表仍可讀寫。
pt-online-schema-change --alter "ENGINE=InnoDB" D=dbname,t=large_table --execute
注意:確保 binlog 開啟,從庫延遲不能過高,否則會中斷操作。
使用 mysqldump 導(dǎo)出大表時需加參數(shù)優(yōu)化速度和資源占用。
--single-transaction
--where="id >= 1" --and--where="id
--set-gtid-purged=OFF --skip-add-drop-table --compact
導(dǎo)入時關(guān)閉唯一性校驗和自動提交可顯著提升速度:
SET unique_checks=0; SET foreign_key_checks=0; SET autocommit=0;
若源和目標(biāo)環(huán)境硬件相似,可使用 XtraBackup 進行物理熱備遷移。
注意目標(biāo)實例版本和配置應(yīng)與源端兼容。
基本上就這些常用方法。選擇哪種取決于你的停機窗口、數(shù)據(jù)一致性要求以及硬件條件。關(guān)鍵是控制批量大小,監(jiān)控資源使用,提前測試流程。不復(fù)雜但容易忽略細(xì)節(jié)。
以上就是如何在mysql中遷移大數(shù)據(jù)量表的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號