Mysql

在 MySQL 複製主機上安全地更改 innodb_buffer_pool_size?

  • July 7, 2014

我們有一個 MySQL 伺服器,它是一個複制主機。隨著數據庫的增長,我們需要更改innodb_buffer_pool_size和(希望)提高性能。innodb_flush_method

我們這樣做的“最安全”的方法是什麼?我們有 2 個從屬伺服器,完成後需要繼續複製。

到目前為止的計劃是:

  1. 使用 .在 2 個從伺服器上停止複制STOP SLAVE
  2. 在所有 3 台伺服器上停止 MySQL,使用service mysql stop.
  3. 在主伺服器上的my.cnf文件中進行更改。
  4. 再次在主伺服器上啟動 MySQL 以盡快使用service mysql start.
  5. 在兩個從伺服器中對my.cnf文件進行更改。
  6. 在兩個從伺服器上再次啟動 MySQL,使用service mysql start.

設置如下:

innodb_buffer_pool_size = 54G
innodb_flush_method=O_DIRECT

該伺服器有 64GB 的記憶體並且是一個專用的 MySQL 伺服器,該伺服器根本不做任何其他事情。這是一個Dell PowerEdge R720執行Ubuntu 12.04 Server

誰能預見這種方法的任何問題?還有什麼我們需要注意的嗎?

你所擁有的似乎很好。我會添加以下內容

在 Master 上執行它。

SET GLOBAL innodb_fast_shutdown = 0;
SET GLOBAL sync_binlog = 1;
SET GLOBAL sync_master_info = 1;

這將導致所有未送出的內容在關閉時送出。

然後,它將二進制日誌刷新到磁碟。

在奴隸上,執行這個

SET GLOBAL innodb_fast_shutdown = 0;
SET GLOBAL sync_binlog = 1;
SET GLOBAL sync_relay_log = 1;
SET GLOBAL sync_relay_log-info = 1;
SET GLOBAL sync_master_info = 1;

這將刷新所有二進制日誌和中繼日誌。如果從站沒有啟用二進制日誌記錄,則跳過SET GLOBAL sync_binlog = 1;

您的步驟現在看起來像這樣:

  1. 使用 STOP SLAVE 停止 2 個從屬伺服器上的複制。
  2. SET GLOBAL innodb_fast_shutdown = 0;在所有三台伺服器上執行
  3. SET GLOBAL sync_binlog = 1;在主上執行
  4. SET GLOBAL sync_master_info = 1; SET GLOBAL sync_relay_log = 1; SET GLOBAL sync_relay_log-info = 1; SET GLOBAL sync_master_info = 1;在奴隸上執行
  5. 在所有 3 台伺服器上停止 MySQL,使用service mysql stop.
  6. my.cnf在主伺服器上的文件中進行更改。
  7. 再次在主伺服器上啟動 MySQL 以盡快使用service mysql start.
  8. 在兩個從伺服器中的 my.cnf 文件中進行更改。
  9. 在兩個從伺服器上再次啟動 MySQL,使用service mysql start.

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