mysql恢復過程需要更長的時間
我有一台 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
但是,當我們嘗試將數據庫恢復mysql
到sql-server
數據庫或數據庫時,我們需要該文件postgre
。