之前寫了一篇《MySQL5.6 crash-safe replication》 ,但在Mariadb10.0.X和10.1.X上不支持relay_log_info_repository = TABLE參數,官網建議用GTID複製模式代替傳統複製模式,傳統複製模式是不支持Slave Crash-Safe的。
在mysql庫下,會有一張gtid_slave_pos表(在安裝初始化時,就已經是innodb引擎)
START TRANSACTION; -- Statement 1 -- ... -- Statement N -- Update replication info COMMIT;
這樣sql線程執行完事務後,立即會更新gtid_slave_pos表,如果在更新過程中宕機,事務會回滾,gtid_slave_pos表並不會記錄同步的點,下次重新同步複製時,從之前的POS點再次執行。
MariaDB 10默認是傳統複製,如果轉爲GTID複製很簡單,並不需要像MySQL5.6那樣,要在Slave從庫上設置log_slave_updates = 1(增加從庫的IO壓力),並重啓數據庫生效那麼麻煩。MariaDB支持熱切換GTID,你可以先以傳統複製搭建主從,然後再熱切GTID複製模式,如下圖:
通過幾個簡單的步驟,Slave從庫就支持了Crash-Safe。
注:MHA0.56(最新版),還不支持MariaDB10的GTID複製模式,在故障切換時,還會以傳統複製搭建主從,所以需要每次手工熱切換下GTID模式。
參考官網: