如何加快mysql導出和導入
我需要執行從伺服器 A 到伺服器 B 的數據庫遷移。
伺服器 A:安裝 MySQL 版本 5.0.6
伺服器 B:安裝 MySQL 版本 5.6.20
作業系統:兩者都執行 RedHat Linux 64 位。16 RAM 記憶體。
有 MyISAM、InnoDB、Archive 數據庫。
總大小約 4TB。
最大的 MyISAM 數據庫 = 3.2TB
最大的 InnoDB 數據庫 = 85GB
key_buffer_size=2GB.
我在最大的 InnoDB 表(85GB)上做了一個 mysqldump
time /usr/local/mysql/bin/mysqldump -uroot -p --extended-insert --single-transaction ABCEx > ABCEx.sql
執行 5 小時後,轉儲文件已增長到 145GB,但尚未完成。
-rw-rw-r-- 1 mysql mysql 145019313099 Mar 2 05:12 ABCEx.sql
我擔心出口時間和進口。任何幫助加快這一點?
至於
MyISAM
表遷移,我讀到我通過將 .myd .frm .myi 文件從伺服器 A 複製到 B 來遷移它們。如果有人以前做過,可以提供一些指南或連結嗎?我們談論的是 3.2TB 的MyISAM
數據庫。請幫助….非常感謝:)
在伺服器之間遷移表的最佳方式是以二進制“本機”格式進行。執行串列邏輯轉儲(如 mysqldump 所做的那樣)不僅在非常大的數據庫上可能需要數天時間,而且還需要更多時間來恢復。
如果您需要維護 InnoDB 表在源伺服器上的可用性,最好的方法是使用**MySQL Enterprise Backup(Oracle 訂閱的一部分)或開源類似工具Percona XtraBackup**之類的實用程序。請注意,最後一個僅適用於 Linux 主機。
如果您的大部分數據都是 MyISAM/Archive 格式,恐怕您無法同時保證備份的可用性和一致性。在這種情況下,最好的方法是執行快照(您的文件系統或環境 -VM、LVM- 必須允許它)。像**mylvmbackup這樣的工具簡化了這個過程。最糟糕的情況是,您可以鎖定這些表 -
FLUSH TABLES WITH READ LOCK
** - (您已經在為 mysqldump 執行此操作),或者甚至只是關閉整個伺服器,然後將 .frm、MYI 和 MYD文件複製掉(對於 MyISAM)。請注意,複製 InnoDB (.ibd) 文件並不簡單;你需要 MySQL 5.6 和LOCK TABLES ... FOR EXPORT + ALTER TABLE...DISABLE/ENABLE TABLESPACE
建構。Rsync 可能有助於減少 MySQL 不可用的時間。請注意,MySQL 的二進製文件在不同的節點、架構和作業系統之間幾乎 100% 兼容。
如果您無權訪問文件系統,最後一個選項是以更優化的方式執行邏輯備份並以並行方式執行。mydumper 之類的工具大大簡化了這一點,並且在 XtraBackup 或 Enterprise 備份不起作用的情況下非常有用。在良好的情況下,它會更慢,但比 mysqldump 快 5-10 倍。
我不能或不想製作“本機”二進製備份,而不是mydumper是一個不錯的選擇。轉儲載入比正常 mysqldump 備份快得多。