半年之前我有幸參加了MySQL2010用戶大會,Oracle/Sun在會上公布了MySQL5.5的新特性,這次MySQL5.5改進的地方非常之多,當中引入的Google patch for MySQL中的半同步Semi-synchronous Replication,一個可用于高可用解決方案的新特性。譚俊青@MySQL實驗室 MyS
半年之前我有幸參加了MySQL2010用戶大會,Oracle/Sun在會上公布了MySQL5.5的新特性,這次MySQL5.5改進的地方非常之多,當中引入的Google patch for MySQL中的半同步Semi-synchronous Replication,一個可用于高可用解決方案的新特性。譚俊青@MySQL實驗室
MySQL5.5的在復制/同步方面的改進:
MySQL半同步復制(semi-synchronous replication)
默認情況下MySQL的復制是異步的,Master上所有的更新操作寫入Binlog之后并不確保所有的更新都被復制到Slave之上。異步操作雖然效率高,但是在Master/Slave出現問題的時候,存在很高數據不同步的風險,甚至可能丟失數據。
MySQL5.5引入半同步復制功能的目的是為了保證在master出問題的時候,至少有一臺Slave的數據是完整的。在超時的情況下也可以臨時轉入異步復制,保障業務的正常使用,直到一臺salve追趕上之后,繼續切換到半同步模式。
Master:
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000; (1s, default 10s)
Slave:
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
SET GLOBAL rpl_semi_sync_slave_enabled=1;
復制心跳(用戶檢測復制是否中斷)
MySQL5.5提供的新的配置master_heartbeat_period,能夠在復制停止工作和出現網絡中斷的時候幫助我們迅速發現問題。
啟用方法:
STOP SLAVE;
CHANGE MASTER TO master_heartbeat_period= milliseconds;
START SLAVE;
Slave自動恢復同步
在MySQL5.5版本之前,MySQL Slave實例在異常終止服務之后,可能導致復制中斷,并且relay binlog可能損壞,在MySQL再次啟動之后并不能正常恢復復制。在MySQL5.5中這一問題得到了解決,MySQL可以自行丟棄順壞的而未處理的數據,重新從master上獲取源數據,進而回復復制。
跳過指定復制事件
在多Master或環形復制的情況下,處于復制鏈條中間的服務器異常,可以通過
CHANGE MASTER TO MASTER_HOST=xxx IGNORE_SERVER_IDS=y
跳過出問題的MySQL實例。
自動轉換字段類型
MySQL5.1在基于語句的復制下,支持部分的字段轉換,但是行級的會報錯。MySQL5.5語句和行級復制都已支持。還可以通過 SLAVE_TYPE_CONVERSIONS 控制轉換的方向。
Related posts:
? 譚俊青 發布在 MySQL性能、MySQL Cluster集群、MySQL HA高可用等研究 - MySQL實驗室, 2010.
可以任意轉載, 但轉載時務必以超鏈接形式標明文章原始出處 和 作者信息。
鏈接: http://www.mysqlab.net/blog/2010/12/mysql5-5-replication-new-future/
標簽: MySQL HA, MySQL Replication, MySQL5.5
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com