Mysql

來自 RDS 實例的混合 InnoDB 和 MyISAM 表的一致 mysqldump

  • September 6, 2017

我在專用伺服器上有 MySQL 數據庫。我希望它成為 RDS 實例的外部主機。我想備份RDS。(目前我們混合使用了 InnoDB 和 MyISAM,但我們正在慢慢過渡到完整的 InnoDB)。

flush tables with read lock在我們的主人(在專用伺服器上)做了一個轉儲。在 RDS 實例上恢復了該轉儲並配置了外部主伺服器。RDS 複製趕上了。我正在嘗試從我們與 master 保持同步的第一個 slave 在 RDS 中創建第二個 slave。這就是我遇到麻煩的地方。我無法獲得一致的副本來執行複制。我嘗試從恢復的快照進行快照並建構複製 - 但複製會收到有關重複的整體和外部約束的錯誤。如果我跳過一些錯誤 - 複製會執行幾分鐘並再次出錯。錯誤中的表不是 MyISAM。

我試著做轉儲。嘗試鎖定表。沖洗表。

因為你不能flush tables with read lock在 RDS 上做 - 我試著做這篇 AWS 文章中所說的:(http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.BackingUpAndRestoringAmazonRDSInstances.html)。

因為錯誤沒有連接到 MyISAM 表我雖然這不是問題,但仍然嘗試:

use my_db;
flush tables [list of MyISAM tables];
lock each MyISAM table for read: `lock table <MyISAM table> read`

但問題還是一樣。

數據庫大約 100G,所以我用 shell 一個襯裡逐個表地轉儲它。

有什麼想法我在哪裡做錯了嗎?

上個月,我回答了這個問題:將一個 RDS 實例與另一個 RDS 實例同步

通過研究和回答該文章,我最近了解到您可以在 MySQL RDS 從站上設置 read_only 關閉。這對你意味著什麼?一個非常獨特的機會。什麼機會?

將你所有的 MyISAM 表轉換為 InnoDB !!!

通過將 read_only 設置為 0 使 RDS Slave 可寫後,您可以將 RDS Slave 中所有表的儲存引擎更改為 InnoDB。不用擔心,Master 可以擁有 MyISAM 表,而 Slave 可以擁有 InnoDB。我之前曾建議 Master 和 Slave 使用不同的儲存引擎(我可以有一個 InnoDB master 和 MyISAM slaves with Full-Text 進行搜尋嗎?

一旦您將 RDS 從屬中的所有表轉換為 InnoDB,您就可以製作該新從屬的只讀副本,而無需擔心備份數據的 MyISAM。

注意:這是一個將所有 MyISAM 表轉換為 InnoDB 的範例腳本

MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
CONVERT_SCRIPT=/tmp/ConvertMyISAMToInnoDB.sql
echo "SET SQL_LOG_BIN = 0;" > ${CONVERT_SCRIPT}
SQL="SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;')"
SQL="${SQL} FROM information_schema.tables WHERE engine='MyISAM' AND"
SQL="${SQL} table_schema NOT IN ('information_schema','mysql','performance_schema')"
mysql ${MYSQL_CONN} -ANe"${SQL}" > ${CONVERT_SCRIPT}
less ${CONVERT_SCRIPT}

試一試 !!!

不確定您是否只想創建一個遠離您點擊的只讀副本?

如果沒有,那麼我想您需要從 dbsnapshot 恢復

你可以:

  • 停止奴隸。
  • 注意顯示從屬狀態。
  • 創建數據庫快照。
  • 在第一個奴隸上啟動奴隸。
  • 使用 dbsnapshot 創建新的 rds 實例。
  • 使用座標從外部主機複製。

另外,如果沒有,並且您正在尋找創建 RDS 從屬的從屬,那麼有一個舊的更新部落格說它是可能的

希望這可以幫助。

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