MySQL復(fù)制

擴(kuò)展方式

Scale UP(縱向擴(kuò)展)
Scale Out(橫向擴(kuò)展)

MySQL的擴(kuò)展

  • 讀寫分離:
  • 復(fù)制:每個階段都有相同的數(shù)據(jù)集
    向外擴(kuò)展
    二進(jìn)制日志
    單向

復(fù)制的功用

  • 數(shù)據(jù)分布
  • 負(fù)載均衡讀
  • 備份
  • 高可用和故障切換
  • MySQL升級測試

MySQL讀寫分離

讀寫分離應(yīng)用:

MySQL主從復(fù)制

MySQL復(fù)制

MySQL復(fù)制

MySQL垂直分區(qū)

MySQL垂直分區(qū)

MySQL水平分片(Sharding)

MySQL水平分片

對應(yīng) shard 中查詢相關(guān)數(shù)據(jù)

主從復(fù)制線程:

  • 主節(jié)點(diǎn):
    dump Thread:為每個 Slave 的 I/O Thread 啟動一個 dump 線程,用于向其發(fā)送 binary log events
  • 從節(jié)點(diǎn):
    I/O Thread:向 Master 請求二進(jìn)制日志事件,并保存于中繼日志中
    SQL Thread:從中繼日志中讀取日志事件,在本地完成重放

跟復(fù)制功能相關(guān)的文件:

  • master.info:用于保存 slave 連接至 master 時(shí)的相關(guān)信息,例如賬號、密碼、服務(wù)器地址等
  • relay-log.info:保存在當(dāng)前 slave 節(jié)點(diǎn)上已經(jīng)復(fù)制的當(dāng)前二進(jìn)制日志和本地 replay log 日志的對應(yīng)關(guān)系

主從復(fù)制特點(diǎn):

  • 異步復(fù)制
  • 主從數(shù)據(jù)不一致比較常見

復(fù)制架構(gòu):

  • Master/Slave,Master/Master,環(huán)狀復(fù)制
  • 一主多從
  • 從服務(wù)器還可以再有從服務(wù)器
  • 一從多主:適用于多個不同數(shù)據(jù)庫

復(fù)制需要考慮二進(jìn)制日志事件記錄格式

STATEMENT(5.0之前)
ROW(5.1之后,推薦)
MIXED

主從配置過程:參考官網(wǎng)

https://mariadb.com/kb/en/library/setting-up-replication/
https://dev.mysql.com/doc/refman/5.5/en/replication-configuration.html

主節(jié)點(diǎn)配置:

  1. 啟用二進(jìn)制日志:vim /etc/my.cnf
    [mysqld]
    log_bin
    
  2. 為當(dāng)前節(jié)點(diǎn)設(shè)置一個全局唯一的ID號:vim /etc/my.cnf
    [mysqld]
    server_id=#
    log-basename=master    #可選項(xiàng),設(shè)置datadir中日志名稱,確保不依賴主機(jī)名
    
  3. 創(chuàng)建有復(fù)制權(quán)限的用戶賬號:
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'HOST' IDENTIFIED BY 'replpass';
    

從節(jié)點(diǎn)配置:

  1. 啟動中繼日志:
    [mysqld]
    server_id=#      #為當(dāng)前節(jié)點(diǎn)設(shè)置一個全局唯一的ID號
    relay_log=relay-log      #relay log的文件路徑,默認(rèn)值hostname-relay-bin
    relay_log_index=relay-log.index      默認(rèn)值hostname-relay-bin.index
    
  2. 使用有復(fù)制權(quán)限的用戶賬號連接至主服務(wù)器,并啟動復(fù)制線程
    mysql> CHANGE MASTER TO MASTER_HOST='host',
        MASTER_USER='repluser',MASTER_PASSWORD='replpass',
        MASTER_LOG_FILE='mysql-bin.xxxxx',MASTER_LOG_POS=#;
    mysql> START SLAVE [IO_THREAD|SQL_THREAD];
    

復(fù)制架構(gòu)中應(yīng)該注意的問題:

  1. 如果主節(jié)點(diǎn)已經(jīng)運(yùn)行了一段時(shí)間,且有大量數(shù)據(jù)時(shí),如何配置并啟動 slave節(jié)點(diǎn)

    • 通過備份恢復(fù)數(shù)據(jù)至從服務(wù)器
    • 復(fù)制起始位置為備份時(shí),二進(jìn)制日志文件及其POS
  2. 如果要啟用級聯(lián)復(fù)制,需要在從服務(wù)器啟用以下配置

    [mysqld]
    log_bin
    log_slave_updates
    
  3. 限制從服務(wù)器為只讀

    • 在從服務(wù)器上設(shè)置 read_only=ON(此限制對擁有SUPER權(quán)限是用戶均無效)
    • 阻止所有用戶,包括主服務(wù)器復(fù)制的更新
      mysql> FLUSH TABLES WITH READ LOCK;
  4. RESET SLAVE
    在從服務(wù)器清除master.inforelay-log.info,relay log,開始新的relay log,注意:需要先 STOP SLAVE
    RESET SLAVE ALL:清除所有從服務(wù)器上設(shè)置的主服務(wù)器同步信息如:PORT,HOST,USER 和 PASSWORD 等

  5. 如何保證主從復(fù)制的事務(wù)安全
    參看https://mariadb.com/kb/en/library/server-systemc-variables/

    • 在 master 節(jié)點(diǎn)啟用參數(shù):
      sync_binlog=1:每次寫后立即同步二進(jìn)制日志到磁盤,性能差
      如果用到的為 InnoDB 存儲引擎:
      innodb_flush_log_at_trx_commit=1:每次事務(wù)提交立即同步日志寫磁盤
      innodb_support_xa=ON:默認(rèn)值,分布式事務(wù) MariaDB10.3.0 廢除
      sync_master_info=#:#次事件后 master.info 同步到磁盤
    • 在 slave 節(jié)點(diǎn)啟用服務(wù)器選項(xiàng):
      skip_slave_start=ON:不自動啟動 slave
    • 在 slave 節(jié)點(diǎn)啟用參數(shù):
      sync_relay_log=#:#次寫后同步 relay log 到磁盤
      sync_relay_log_info=#:#次事務(wù)后同步 relay-log.info 到磁盤

主主復(fù)制

主主復(fù)制:互為主從

  • 容易產(chǎn)生的問題:數(shù)據(jù)不一致;因此慎用
  • 考慮要點(diǎn):自動增長 id
    配置一個節(jié)點(diǎn)使用奇數(shù) id
    auto_increment_offset=1:開始點(diǎn)
    auto_increment_incremen=2:增長幅度
    另一個節(jié)點(diǎn)使用偶數(shù) id
    auto_increment_offset=2
    auto_increment_increment=2

主主復(fù)制的配置步驟:

  1. 各節(jié)點(diǎn)使用一個唯一的 server_id
  2. 都啟動 binary log 和 relay log
  3. 創(chuàng)建擁有復(fù)制權(quán)限的用戶賬號
  4. 定義自動增長 id 字段的數(shù)值范圍各為奇偶
  5. 均把對方指定為主節(jié)點(diǎn),并啟動復(fù)制線程
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容