Mysql

mysql恢復過程需要更長的時間

  • July 9, 2014

我有一台 Ubuntu 8.04 機器,它有大約 300 GB 大小的mysql數據庫。我已經使用以下mysqldump命令轉儲了所有數據庫。

mysqldump -u root -p --all-databases > file.sql

現在,在 RHEL6 機器中,我正在嘗試mysql使用以下方法恢復數據庫:

mysql -u root -p < file.sql

但是,上面的命令似乎花費了很多時間,並且似乎永遠執行。3 天后,當我檢查恢復的數據庫大小時,它顯示只有 30 GB 已恢復。

有沒有一種有效的方法來恢復數據庫?

在發布答案之前,我想重申一下我在這里這裡問過我的問題。正如有人可能建議的那樣,這個問題屬於dba SE。但是我在這裡發布它的原因是因為它涉及在/etc/my.cnf.

第一個解決方案

編輯/etc/my.cnf以包含以下參數。配置文件位置可能因 Linux 發行版而異。在 RHEL6 中,它位於/etc/my.cnf.

innodb_doublewrite = 0
innodb_flush_log_at_trx_commit = 0
innodb_support_xa = 0
innodb_locks_unsafe_for_binlog = 1 

這個建議是由derobert提供的,我要感謝他提出這個解決方案。

測試:雖然沒有mysql恢復命令那麼慢,但這種方法仍然需要相當長的時間。該命令執行了 3 天,恢復了大約 130 GB。

第二種解決方案

通過在導入數據庫轉儲之前設置幾個標誌,我們可以顯著加快恢復過程:

SET autocommit=0;
SET unique_checks=0;
SET foreign_key_checks=0;

需要在.sql文件中設置上述標誌。由於我們禁用了自動送出,我們還需要在恢復結束時手動送出:

COMMIT;

上面的語句應該是.sql文件的最後一條語句。mysqldump實際上我們可以從這裡找到一個腳本來做。

我沒有機會測試這個解決方案,但它很有意義,因為它禁用了外鍵檢查。

由於我們正在恢復整個數據庫,我們可以通過禁用唯一檢查和外鍵檢查來加快速度。此外,通過在還原結束時送出所有內容,而不是在還原正在進行時,我們可以獲得顯著的額外速度提升。

第三個解決方案

mysql我已經備份了整個數據目錄。數據目錄通常位於/var/lib/mysql. 就我而言,數據目錄作為單獨的分區掛載在/mounts/mysql. 我已經備份了整個文件夾,所以我將整個文件夾恢復到較新的 RHEL6 機器上。在恢復之前,我們必須確保mysqld守護程序沒有啟動。雖然,我使用rsync命令恢復,但我想確保目前在新的 RHEL6 機器中設置了文件權限。所以在恢復/mounts/mysql到新的 RHEL6 系統後,我發出了以下命令。

chown -R mysql:mysql /mounts/mysql

現在,我測試了數據庫,一切看起來都很酷。修復時間約為 3 小時。

我還沒有看到有人建議在任何地方使用上述方法進行mysql數據庫恢復。我從這個答案中看到,mysql版本必須兼容才能從數據目錄恢復數據庫。然而,以我迄今為止的修復經驗來看,這是不正確的。只要權限設置正確,數據庫就可以正常工作。

.sql但是,當我們嘗試將數據庫恢復mysqlsql-server數據庫或數據庫時,我們需要該文件postgre

引用自:https://unix.stackexchange.com/questions/141269