Mysql

如何加快mysql導出和導入

  • March 2, 2015

我需要執行從伺服器 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 備份快得多。

引用自:https://dba.stackexchange.com/questions/94149