Mysql

在 RDS MYSQL 5.6 中設置 sql_log_bin = 0

  • February 13, 2018

我已經進入 RDS MYSQL 5.6,現在我遇到了問題。我有 5 個只讀副本和 a/z master。

我正在嘗試更改表並想更改列值,並且在某些表上我想添加新列。雖然這個操作在 MYSQL 5.6 上是非阻塞的,但是當它被複製到從屬伺服器時,它會導致從屬伺服器在整個過程中滯後,我不能承受從屬滯後,因為我們是 24/7 操作。

我試著做 SET sql_log_bin = 0; 跳過對從屬的查詢,但 RDS 不允許這樣做,否則我可以完成從屬(每個一個)-> 主方法並最終在主上進行更改。

任何人有任何建議如何在 RDS MYSQL 5.6 中繼續執行此操作

我們在類似的場景中所做的(使用 Aurora RDS 作為主從伺服器)是使用一個中間的小型 EC2 實例和一個標準的 MySQL 作為過濾器。此實例是我們的主主伺服器和最終從伺服器之間的中繼從伺服器(輔助主伺服器),其配置類似於this

由於 Aurora RDS 中缺少 SUPER 權限和復製配置選項,我們選擇了此解決方案:您無法在 RDS 中設置 sql_log_bin 或定義復製過濾器。

這裡的問題是 DDL 語句,它們被複製到從屬,儘管你有復製過濾器由 db 或從屬中的表。所以一個可能的解決方法是:

  1. 在 master 中創建一個輔助模式。
  2. 在輔助 master 的 mysql.cnf 中設置一個 db 過濾器,因此它只會將所需架構中的 binlog 更改添加到其 binlog 中: binlog-do-db=<myschema>
  3. 如果您需要在主 master 中添加或修改其中一個表的列,請首先將輔助模式設置為預設值: use auxiliary-schema;
  4. 間接修改表,比如 alter table <myschema>.<table> ...

這樣,DDL 語句被應用在輔助 master 中,但不儲存在它的 binlog 中,因此不會發送到 slave。

你無法用 MySQL RDS 解決這個問題,……永遠!

我們將採用包含 RDS 更改的最新複製器建構,這些更改記錄在問題 425 中。使用 2.0.7 建構 177 或更高版本。主要的改進是添加了一個非特權從模式,以避免呼叫亞馬遜禁止的任何操作。除其他事項外,Tungsten 通常使用諸如“SET SESSION SQL_LOG_BIN=0”之類的命令來禁止在將數據應用於從屬設備時寫入二進制日誌。此命令需要 SUPER 權限,因此會導致權限不足的 RDS 登錄出現問題

建議

您需要將您的數據庫集群移動到 Amazon EC2,您可以在其中隨意更改 SUPER Privilege。

否則,如果您堅持使用 RDS,您將不得不執行以下操作:

  • 再啟動 5 個只讀副本
  • 將所有讀取操作故障轉移到這 5 個新副本
  • 監視每個目前副本上的 ALTER TABLE
  • ALTER TABLE命令在 5 個目前副本上完成並且ALTER TABLE命令開始在 5 個新副本中的任何一個上執行時,將所有讀取操作故障轉移回 5 個目前副本。
  • 降速 5 個新副本

試一試 !!!

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