国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mysql架構篇--Mysql 主從同步方案

這篇具有很好參考價值的文章主要介紹了Mysql架構篇--Mysql 主從同步方案。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

本文對mysql的傳統(tǒng)主從復制,半同步復制和組復制進行介紹。


一、傳統(tǒng)的主從復制:

1 原理:

mysql 主從同步,java工具篇,db數據庫,mysql,架構,數據庫
Master 數據庫只要發(fā)生變化,立馬記錄到Binlog 日志文件中,Slave數據庫啟動一個I/0 thread連接Master數據庫,請求Master變化的二進制日志。Save I/0獲取到的二進制日志,保存到自己的Relay log 日志文件中。Slave 有一個 SQL thread定時檢查Realy log是否變化,變化那么就更新數據;

2 缺點:

主從復制在正常情況下是可以保證數據一致性的,即從節(jié)點的數據和主節(jié)點的數據是完全一致的。主從復制的機制是主節(jié)點將寫入的數據記錄成二進制日志(binlog),然后從節(jié)點通過讀取和解析主節(jié)點的binlog來進行數據復制。

主從數據不一致可能在以下情況下出現:

  • 網絡問題:如果主節(jié)點和從節(jié)點之間的網絡連接發(fā)生故障或不穩(wěn)定,可能會導致binlog傳輸中斷,進而導致數據不一致。
  • 主節(jié)點故障:如果主節(jié)點發(fā)生故障,而在發(fā)生故障的瞬間還有未被同步到從節(jié)點的binlog,那么在故障恢復后,從節(jié)點可能會缺失這部分數據。
  • 誤操作或數據庫錯誤:如意外執(zhí)行了誤刪除/更新操作,或數據庫出現了錯誤,從節(jié)點按照主節(jié)點的操作紀錄執(zhí)行了相同的操作,導致數據不一致。

雖然主從復制可以保證數據一致性,但在某些極端情況下,如主節(jié)點和從節(jié)點同時出現故障,則可能無法避免數據不一致。因此,對于一些對數據一致性要求非常高的場景,可以考慮使用更可靠的復制方案,如半同步復制或組復制。

二、半同步復制(Semi-Synchronous Replication):

mysql 主從同步,java工具篇,db數據庫,mysql,架構,數據庫

  • 半同步復制是主從復制的一種擴展,它確保至少一個從節(jié)點確認已成功接收和寫入主節(jié)點的二進制日志數據。
  • 當主節(jié)點接收到一個事務時,它將等待至少一個從節(jié)點(半同步節(jié)點)確認已寫入該事務后才會繼續(xù)進行下一個事務。
  • 半同步復制提供了更高的數據一致性和可靠性,但也增加了延遲和性能開銷。

三、組復制:

主從復制只是做了數據的容災備份,但是沒有做到高可用,怎么實現在一個節(jié)點掛掉后,不影響整體的業(yè)務:
mysql 主從同步,java工具篇,db數據庫,mysql,架構,數據庫

1 原理:

組復制是MySQL InnoDB Cluster中使用的一種多主復制技術,它基于Paxos協(xié)議實現了分布式和多主寫入的能力。下面是組復制的基本原理:

  • 組成員(Group Members):組復制由多個MySQL實例組成,這些實例彼此協(xié)作并形成一個復制組(replication group)。每個實例都是組成員,可以是主節(jié)點或從節(jié)點。

  • 角色與狀態(tài):在組復制中,每個成員可以有三種角色:原始(Primary)、次要(Secondary)和離線(Offline)。原始成員負責處理寫操作,其他次要成員則復制原始成員的數據。離線成員指的是暫時不參與復制的成員。

  • 消息通信:組成員之間通過組復制通信層進行消息傳遞和協(xié)調。它提供了成員加入、狀態(tài)變更、數據同步等功能。在組通信期間,成員之間通過消息傳遞來達成一致性。

  • 選舉與協(xié)商:組成員使用Paxos協(xié)議來選舉原始成員和進行決策。選舉過程中會協(xié)商并選擇一個成員作為原始成員,該成員負責處理寫操作并將更改廣播到其他成員。

  • 數據一致性:每個成員都維護著自己的事務日志,并通過組復制通信層將已提交的事務廣播給其他成員。在事務提交后,組通信確保所有成員的數據是一致的。

  • 自動故障轉移:如果原始成員出現故障,組復制會自動選舉新的原始成員來接替。選舉過程中會基于Paxos協(xié)議確保一致的數據狀態(tài),從而實現自動的故障轉移。

通過上述機制,組復制允許多個節(jié)點同時進行寫操作,并保證數據的一致性和可靠性。它提供了高可用性、自動故障轉移以及簡化的管理和擴展能力,適用于分布式環(huán)境和多主寫入場景。

2 實現:

基于組復制搭建一個高可用的mysql 集群

2.1 myql 實例安裝:

  • 環(huán)境準備:3 臺虛擬機:
    192.168.75.128
    192.168.75.129
    192.168.75.130

  • docker 在每個虛擬機上安裝一個mysql實例:

docker run -itd --name mysql   -e MYSQL_ROOT_PASSWORD=123456 mysql
  • 在每個虛擬機上創(chuàng)建mysql 的目錄文件:
# 創(chuàng)建mysql 目錄
mkdir /root/mysql
# 創(chuàng)建mysql data 目錄
mkdir /root/mysql/data

  • 在每個虛擬機上復制容器的my.cnf 配置文件
docker cp mysql:/etc/my.conf /root/mysql

2.1 myql 實例安裝:

  • 每個虛擬機都按照mysql實例:
docker run -itd --name mysql-3806 \
 --net=host \
 --privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /root/mysql3806/data:/var/lib/mysql/ \
-v /root/mysql3806/my.cnf:/etc/my.cnf mysql 

--net=host 設置mysql 的docker 容器和虛擬機共享網絡

  • my.cnf 增加配置:
# 服務實例id,注意每個實例需要保持唯一 ,注意修改
# 192.168.75.129 的server_id=2222
# 192.168.75.130 的server_id=3333
server_id=1111
# 開啟事務的強一致性
gtid_mode=ON
enforce_gtid_consistency=ON
# 存儲方式為table
master_info_repository=TABLE
# 使用舊版密碼的通訊方式
default_authentication_plugin=mysql_native_password

# 同步配置
# binlog的日志格式
binlog_format=ROW
# 不使用binlog校驗和
binlog_checksum=NONE
# 開啟binlog 并且以binlog 前置文件命名
log_bin=binlog
# 	作為從庫同步事務后,記錄至數據表
relay_log_info_repository=TABLE
# 從服務記錄事件其他從服務器可以繼續(xù)復制從服務器的二進制日志
log-slave-updates=on

# 組復制配置
#  加載組復制插件
plugin_load_add="group_replication.so"
# UUID,分組的節(jié)點需配置一致
loose-group_replication_group_name="89c88c78-c46e-11ec-a8aa-0800271ee0d3"
# 啟動MySQL時不自動開啟組復制
loose-group_replication_start_on_boot=OFF
# 關閉此MySQL實例的組引導
loose-group_replication_bootstrap_group=OFF
# 	關閉單主模式,即使用多主模式
# loose-group_replication_single_primary_mode=OFF
# 在多主模式下,建議開啟此選項,嚴格檢查一致性
# loose-group_replication_enforce_update_everywhere_checks=ON
# 組復制節(jié)點通信禁用SSL
loose-group_replication_ssl_mode=DISABLED
# 當前MySQL實例的組復制通信地址: 33061 為mysql 默認的組內通信端口
# 每個虛擬機的配置自己的mysql 實例ip 地址
loose-group_replication_local_address="192.168.75.128:33061"
# 組復制的節(jié)點通信地址
loose-group_replication_group_seeds="192.168.75.128:33061,192.168.75.129:33061,192.168.75.130:33061"
# 通信白名單配置此處配置192.168.75 段的ip 可以進行通信
loose-group_replication_ip_whitelist="192.168.75.0/24,127.0.0.1"
# 綁定本機ip 地址: 注意每個mysql 實例配置自己的ip 
bind-address=192.168.75.128
# 向組內通信 報備的 通信ip 地址  注意每個mysql 實例配置自己的ip 
report_host=192.168.75.128
# mysql 的服務端口
port=3806

配置完成記得重啟mysql 實例

2.2 防火墻端口放行:

# 需要開放的端口
 firewall-cmd --permanent --zone=public --add-port={3806,33061}/tcp
# 防火墻重新加載
 firewall-cmd --reload
# 查看開放的端口
firewall-cmd --zone=public --list-ports
 

2.3 開啟組復制:

  • 每個mysql 實例創(chuàng)建組復制用戶:
set sql_log_bin=0;
create user repl@'%' identified by '666666';
grant replication slave on  *.* to repl@'%';
set sql_log_bin=1;
flush privileges;
  • 使用賬戶密碼登錄其他MySQL節(jié)點
change master to master_user='repl', master_password='666666' for channel 'group_replication_recovery';
  • 組復制:
    在 192.168.75.128 mysql 實例中引導組復制
set global group_replication_bootstrap_group=on;
start group_replication;
set global group_replication_bootstrap_group=off;

在 192.168.75.129 和 192.168.75.130 mysql 實例中開啟組復制

start group_replication;

如果啟動失敗,先重置一次,再啟動

reset master;
start group_replication; 
  • 查看組復制集群情況:
select * from performance_schema.replication_group_members;

mysql 主從同步,java工具篇,db數據庫,mysql,架構,數據庫

2.4 查看主節(jié)點:

  • 方式1 :
-- 獲取主機主節(jié)點的id
SHOW STATUS LIKE 'group_replication_primary_member';
-- 對比查看每個mysql 實例的uid
sELECT @@server_uuid;
  • 方式2:
show variables like '%read_only%';

主服務器:
mysql 主從同步,java工具篇,db數據庫,mysql,架構,數據庫
從服務器:
mysql 主從同步,java工具篇,db數據庫,mysql,架構,數據庫

2.5 節(jié)點選舉:

當主節(jié)點掛掉之后使用Paxos協(xié)議 從slave 節(jié)點得到新的 master,當修復好后可以重新加入組復制,啟動mysql 實例后:

change master to master_user='repl', master_password='666666' for channel 'group_replication_recovery';
start group_replication;

2.6組復制搭建過程遇到的問題:

  • mysql 組復制提示 There is no local IP address matching the one configured for the local node:
    msyql docker 實例組內通信的ip 地址問題,涉及到的參數:
loose-group_replication_local_address="192.168.75.128:33061"
loose-group_replication_group_seeds="192.168.75.128:33061,192.168.75.129:33061,192.168.75.130:33061"

問題原因:msyql docker 實例內部不認識 192.168.75.128 ip 所以無法通信,需要在安裝mysql 實例的時候增加 --net=host 參數,是mysql docker 實例與虛擬機共享網絡空間;


  • ip/端口 Can’t start server: Bind on TCP/IP port: Cannot assign requested address:
    檢查防火墻是否開放 mysql 實例的端口和33061 端口;

  • Hostname 192.168.75.12 in Allowlist configuration was not resolvable. Please check your Allowlist configuration:
    ip 的白名單設置有問題,涉及參數:loose-group_replication_ip_whitelist ,檢查ip 是否在白名單中;

  • 通信的MEMBER_HOST 問題: There was an error when connecting to the donor server. Please check that group_replication_recovery channel credentials and all MEMBER_HOST column values of performance_schema.replication_group_members table are correct and DNS resolvable;
    涉及參數:report_host=192.168.75.128 ,配置正確的ip 地址;

總結

本文對mysql 的傳統(tǒng)主從異步復制,半同步復制,組內復制進行了對比,已經通過3臺虛擬機搭建了組內復制架構。

參考:

1 部署高可用、負載均衡的MySQL集群服務;
添加鏈接描述
2 MGR集群搭建及配置過程;文章來源地址http://www.zghlxwxcb.cn/news/detail-725909.html

到了這里,關于Mysql架構篇--Mysql 主從同步方案的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 實現?Mysql數據庫主從復制搭建與同步

    實現?Mysql數據庫主從復制搭建與同步

    一般數據庫都是讀取壓力大于寫數據壓力,主從復制即為了實現數據庫的負載均衡和讀寫分離。通過將Mysql的某一臺主機的數據復制到其它主機(slaves)上,主服務器只負責寫,而從服務器只負責讀。 如生產環(huán)境中,使用redis數據庫作為緩存數據庫,用戶訪問業(yè)務數據時,先

    2024年02月10日
    瀏覽(93)
  • Linux系統(tǒng)中MySQL 數據庫的主從同步

    在主數據庫服務器上配置: 編輯主數據庫服務器的配置文件(my.cnf) : 打開 MySQL 配置文件,一般路徑為 /etc/my.cnf 或 /etc/mysql/my.cnf。 確保以下參數已啟用或配置正確: 注: 一定是[mysqld]代碼塊中 創(chuàng)建用于復制的用戶 : 登錄到 MySQL 控制臺: mysql -u root -p 創(chuàng)建用于復制的用戶

    2024年03月23日
    瀏覽(19)
  • 發(fā)現Mysql的主從數據庫沒有同步,差點涼涼了

    摘要: 今天發(fā)現Mysql的主從數據庫沒有同步,瞬間整個人頭皮發(fā)麻。 本文分享自華為云社區(qū)《糟了,生產環(huán)境數據竟然不一致,人麻了!》,作者:冰 河 。 今天發(fā)現Mysql的主從數據庫沒有同步 先上Master庫: 查看下進程是否Sleep太多。發(fā)現很正常。 也正常。 再到Slave上查看

    2023年04月17日
    瀏覽(22)
  • MySQL高可用解決方案――從主從復制到InnoDB Cluster架構

    MySQL高可用解決方案――從主從復制到InnoDB Cluster架構

    2024送書福利正式起航 關注「哪吒編程」,提升Java技能 文末送5本《MySQL高可用解決方案――從主從復制到InnoDB Cluster架構》 大家好,我是哪吒。 愛奇藝每天都為數以億計的用戶提供7x24小時不間斷的視頻服務。通過愛奇藝的平臺,用戶可以方便地獲取海量、優(yōu)質、高清的視頻

    2024年04月16日
    瀏覽(8)
  • MySQL數據庫同步方案

    MySQL數據庫同步方案

    MYSQL主從同步架構是目前使用最多的數據庫架構之一,主從同步使得數據可以從一個數據庫服務器復制到其他服務器上,在復制數據時,一個服務器充當主服務器(master),其余的服務器充當從服務器(slave)。 如上圖所示,192.168.4.10(主機名為\\\"10.mysql\\\")作為MySQL主數據庫,192.168.4.

    2024年02月10日
    瀏覽(20)
  • MySQL高可用解決方案演進:從主從復制到InnoDB Cluster架構

    MySQL高可用解決方案演進:從主從復制到InnoDB Cluster架構

    ?? 個人網站:【 海擁】【神級代碼資源網站】【辦公神器】 ?? 基于Web端打造的:??輕量化工具創(chuàng)作平臺 ?? 想尋找共同學習交流的小伙伴,請點擊【全棧技術交流群】 當談論MySQL高可用性解決方案時,從最初的主從復制到現代的InnoDB Cluster架構經歷了長足的演進。這些解決

    2024年02月03日
    瀏覽(27)
  • 7 - MySQL主從同步|主從同步模式

    7 - MySQL主從同步|主從同步模式

    1 - 數據庫服務概述 | 構建MySQL服務 | 數據庫基本管理 | MySQL基本類型 2 - 表結構 | MySQL鍵值 3 - 字段約束|MySQL索引|MySQL用戶管理 4 - 基礎查詢進階|連接查詢 5 - 視圖|存儲過程 6 - 數據備份與恢復|innobackupex 7 - MySQL主從同步|主從同步模式 8 - MySQL數據讀寫分離|MySQL多實例

    2024年02月02日
    瀏覽(21)
  • 【mysql】MySQL 主從同步延遲排查

    錯誤日志: ○ 尋找與同步問題相關的錯誤消息或警告。 復制狀態(tài): ○ SHOW SLAVE STATUS 并行復制設置: ○ 確保 slave_parallel_workers 的值合適。如果值過高,可能會導致資源競爭,而值過低可能會導致性能下降。 長事務: ○ 查詢長時間運行的事務,可能會影響到復制的正常進行

    2024年02月07日
    瀏覽(24)
  • mysql 主從同步案例集合

    mysql 主從同步案例集合

    ? relay log 損壞了,導致從庫的 SQL 線程解析 relay log 時出現異常。從庫恢復方式是通過手動設置當時出錯的 GTID 的下一個值,讓從庫不從主庫同步這個 GTID,最后從庫就能正常同步這個 GTID 之后的 binlog 了,后續(xù) SQL 線程也能正常解析 relay log 了。 你好,我是悟空。 本文主要內

    2023年04月14日
    瀏覽(21)
  • 配置mysql的主從同步

    配置mysql的主從同步

    添加用戶 添加用戶權限 顯示主庫狀態(tài) 配置從庫 啟動從庫 如果要重新修改配置 ,需要先停止 最后查看從庫狀態(tài)

    2024年02月21日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包