中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL數據庫中怎么實現多主復制

發布時間:2021-08-07 16:26:55 來源:億速云 閱讀:161 作者:Leah 欄目:數據庫

這篇文章給大家介紹MySQL數據庫中怎么實現多主復制,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

MySQL 管理每個復制通道,都是通過一個Master_info類(sql/rpl_mi.h中定義),start_slave/change_master /stop_slave/show_slave/end_slave這些函數都需要傳入一個Master_info指針,這就給我們改造多Master提 供了很大的便利,基本只需要為每個復制通道傳入相應的Master_info即可。
  除了找到函數入口,還需要讓語法支持多主,否則CHANGE MASTER TO語句并不能支持多主。我修改了sql_yacc.yy,支持如下語法:
  CHANGE MASTER ‘通道標識’ TO,START SLAVE ‘通道標識’,STOP SLAVE ‘通道標識’,SHOW SLAVE ‘通道標識’ STATUS。
  這樣就可以支持多Master的語法了。
   另一個問題是怎么保存多個通道的信息,默認單通道的情況下,用master.info存Master的信息,用relay-log.info存復制應用 的情況。所以存儲文件的名稱也要修改,我的方式是,master.info和relay-log.info在末尾加上通道標識后綴,例如名為”plx”的 通道,會存成master.info.plx和relay-log.info.plx。Relay Log因為有序列,所以增加”-通道標識”在序列前。
   還有一個問題就是,操作命令都是用通道標識來確定一個通道,那么肯定需要持久化正在用的通道名稱,以及建立通道后可以用通道名獲取相應的 Master_info。于是我新建了一個MASTER_INFO_INDEX類(在sql/rpl_mi.h),里面包含一個通道標識和 Master_info指針的對應HASH表,以及持久化需要的IO_CACHE,通過master.info.index這個文件來存已有的通道標識。
  命名實例如下:

雙擊代碼全選
1 2 3 4 5 6 7 8 9 10 11-rw-rw—- 1 mysql mysql 10 Feb 13 20:40 master.info.index-rw-rw—- 1 mysql mysql 76 Feb 14 17:27 master.info.plx1 -rw-rw—- 1 mysql mysql 71 Feb 14 17:27 master.info.plx2 -rw-rw—- 1 mysql mysql 90 Feb 14 17:25 relay-log.info.plx1 -rw-rw—- 1 mysql mysql 90 Feb 14 17:27 relay-log.info.plx2 -rw-rw—- 1 mysql mysql 160 Feb 14 10:16 mysql-relay-bin-plx1.000011 -rw-rw—- 1 mysql mysql 83765425 Feb 14 17:27 mysql-relay-bin-plx1.000012 -rw-rw—- 1 mysql mysql 106 Feb 14 10:16 mysql-relay-bin-plx1.index-rw-rw—- 1 mysql mysql 160 Feb 14 10:16 mysql-relay-bin-plx2.000014 -rw-rw—- 1 mysql mysql 83455792 Feb 14 17:27 mysql-relay-bin-plx2.000015 -rw-rw—- 1 mysql mysql 106 Feb 14 10:16 mysql-relay-bin-plx2.index

  下載Patch在此:http://bugs.mysql.com/file.php?id=18020

  有了多Master以后我們可以做什么呢?下面給兩個應用場景。
   第一個是一備多的備份。因為我們采用的分庫策略,使我們一個集群會有很多個實例,每個實例里面有幾個Schema,但是肯定不會重復。例如第一個實例是 1~3號Schema。第二個實例就是4~6號Schema,所以binlog應用到一起并不會沖突數據。這是我們測試的在線備份方案。
  

   第二個是跨機房的HA。為了容災或者加速,很多公司都采用在不同機房部署數據庫的方式,所以就涉及到數據同步。為了保證每個機房產生的數據不沖突,一般 來說我們采用的是auto_increment_increment,auto_increment_offset這兩個參數,可以控制步進。例如雙 MAster,我們會配置主庫是奇數序列的ID,備庫是偶數序列的ID,這樣切換時就算有少量binlog還未應用,也不會導致數據沖突。跨機房以后,例 如兩個機房都有雙Master,兩個機房之間數據又需要同步,以前需要借助第三方腳本或者程序,有了多Master,按如下方式搭建,設置步進為4,就可 以保證每個機房有雙MAster HA,機房之間數據又可以同步。
  

  已知缺陷:
  1. 我還沒做reset slave ‘通道標識’命令,就是復制通道還不能重置,只能CHANGE MASTER來改,不是做不了,因為暫時我們沒這個需求,等穩定了再考慮這個細節。
   2. 數據沖突沒有檢測。這個是無法解決的,我只是簡單的調用了啟動Slave的函數來啟動多個復制線程,binlog取到本地應用,有數據沖突是不能事先檢測 的,執行到了才會報出來,可以設置skip-slave-error,對全局有效。其他復制相關的也是全局有效。

關于MySQL數據庫中怎么實現多主復制就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂托克前旗| 长岛县| 外汇| 青阳县| 新密市| 和龙市| 神农架林区| 浠水县| 舟山市| 陇西县| 天门市| 深水埗区| 临澧县| 曲周县| 南澳县| 曲松县| 太谷县| 曲阜市| 曲麻莱县| 竹溪县| 宣恩县| 兴义市| 江津市| 子洲县| 云阳县| 抚州市| 奉新县| 任丘市| 泽州县| 梅州市| 乌审旗| 宜宾市| 临邑县| 娱乐| 大足县| 岳西县| 贺兰县| 济南市| 锦屏县| 右玉县| 建阳市|