MySQL8.4組復(fù)制的實(shí)現(xiàn)步驟
1 什么是組復(fù)制
- 組復(fù)制主要解決了傳統(tǒng)異步復(fù)制主機(jī)宕機(jī)時(shí)可能造成主從節(jié)點(diǎn)數(shù)據(jù)不一致問題
- MySQL Group Replication,簡稱MGR
- 將原有的gtid復(fù)制功能進(jìn)行可增強(qiáng),支持單主模式和多主模式
- 組復(fù)制在數(shù)據(jù)庫層面做到了只要集群中大多數(shù)主機(jī)可用,則服務(wù)可用,也就是3臺服務(wù)器的集群,允許其中1臺宕機(jī)

- 組復(fù)制提供了分布式狀態(tài)機(jī)復(fù)制,服務(wù)器之間具有很強(qiáng)的協(xié)調(diào)性;
- 當(dāng)服務(wù)器屬于同一組時(shí),它們會自動進(jìn)行協(xié)調(diào)
- 傳統(tǒng)的主從復(fù)制方式有一個(gè)主盒不等數(shù)據(jù)量的從,主節(jié)點(diǎn)執(zhí)行的事務(wù)會異步發(fā)送給從節(jié)點(diǎn),在從節(jié)點(diǎn)重新執(zhí)行;
- 而組復(fù)制采用整組寫入,避免單點(diǎn)問題
- 組復(fù)制在傳輸數(shù)據(jù)時(shí)使用了Paxos協(xié)議,Paxos協(xié)議保證了數(shù)據(jù)傳輸的一致性和原子性;
- 基于Paxos協(xié)議,組復(fù)制構(gòu)建了一個(gè)分布式的狀態(tài)復(fù)制機(jī)制。這是實(shí)現(xiàn)多主復(fù)制的核心技術(shù)
- 組復(fù)制提供樂多寫方案
- MGR能保證數(shù)據(jù)庫服務(wù)的連續(xù)可用,但是存在以下問題
- 當(dāng)一個(gè)組成員不可用時(shí),連接到它的客戶端不能自主轉(zhuǎn)移到其他組成員
- MySQL Router提供樂故障轉(zhuǎn)移的能力
2 單主模式
2.1 什么是單主模式
- 在單主模式下,組中只有一個(gè)主服務(wù)器;
- 主服務(wù)器被設(shè)置為讀寫模式
- 組中其他所有成員都被設(shè)置為只讀模式

2.2 單主模式部署示例
https://dev.mysql.com/doc/refman/8.4/en/group-replication-configuring-instances.html
2.2.1 準(zhǔn)備MySQL實(shí)例10000
- 創(chuàng)建目錄
mkdir -p /opt/mysql/10000/{data,log,tmp} - 準(zhǔn)備配置文件
vi /opt/mysql/10000/my.cnf [mysql] #設(shè)置mysql客戶端默認(rèn)編碼 default-character-set=utf8 [mysqld] port=10000 pid-file= /opt/mysql/10000/mysqld.pid socket= /opt/mysql/10000/mysqld.sock datadir= /opt/mysql/10000/data log-error=/opt/mysql/10000/log/mysqld.log tmpdir=/opt/mysql/10000/tmp secure-file-priv= NULL # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 #服務(wù)器唯一ID,默認(rèn)是1 server-id=10000 #啟用二進(jìn)制日志 log-bin=mysql-bin #最大連接數(shù) max_connections=1000 #設(shè)置默認(rèn)時(shí)區(qū) default-time_zone='+8:00' # 0:區(qū)分大小寫 # 1:不區(qū)分大小寫 lower_case_table_names=1 user = mysql #啟用全局事務(wù)標(biāo)識符(GTID)模式 gtid_mode=on #強(qiáng)制GTID的一致性。這意味著在執(zhí)行事務(wù)時(shí),MySQL將確保所有涉及的服務(wù)器都使用相同的GTID集。 enforce_gtid_consistency=on
- 初始化庫
chown -R mysql:mysql /opt/mysql/10000 mysqld --defaults-file=/opt/mysql/10000/my.cnf --initialize
- 啟庫
mysqld --defaults-file=/opt/mysql/10000/my.cnf &
- 初始化密碼
#查看臨時(shí)密碼 cat /opt/mysql/10000/log/mysqld.log|grep "A temporary password" #登錄 mysql -uroot -p'EG+Pvd&jj0N=' --socket=/opt/mysql/10000/mysqld.sock >ALTER USER 'root'@'localhost' identified by '123456'; flush privileges;
- 創(chuàng)建同步用戶
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock >CREATE USER 'repl'@'%' IDENTIFIED BY '123456'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; flush privileges;
- 添加組復(fù)制配置
vi /opt/mysql/10000/my.cnf #組復(fù)制設(shè)置 plugin_load_add='group_replication.so' group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" group_replication_start_on_boot=off group_replication_local_address= "192.168.221.100:33061" group_replication_group_seeds= "192.168.221.100:33061,192.168.221.100:33062,192.168.221.100:33063" group_replication_bootstrap_group=off disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
2.2.2 復(fù)制MySQL實(shí)例10001
cp -rf /opt/mysql/10000 /opt/mysql/10001 sed -i "s#10000#10001#g" /opt/mysql/10001/my.cnf rm -f /opt/mysql/10001/data/auto.cnf sed -i "s#group_replication_local_address= '192.168.221.100:33061'#group_replication_local_address= '192.168.221.100:33062'#g" /opt/mysql/10001/my.cnf chown -R mysql:mysql /opt/mysql/10001 mysqld --defaults-file=/opt/mysql/10001/my.cnf &
2.2.3 復(fù)制MySQL實(shí)例10002
cp -rf /opt/mysql/10000 /opt/mysql/10002 sed -i "s#10000#10002#g" /opt/mysql/10002/my.cnf rm -f /opt/mysql/10002/data/auto.cnf sed -i "s#group_replication_local_address= '192.168.221.100:33061'#group_replication_local_address= '192.168.221.100:33063'#g" /opt/mysql/10002/my.cnf chown -R mysql:mysql /opt/mysql/10002 mysqld --defaults-file=/opt/mysql/10002/my.cnf &
2.2.4 配置組復(fù)制
- 主庫實(shí)例10000執(zhí)行
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock > set global group_replication_recovery_get_public_key=on; CHANGE REPLICATION SOURCE TO SOURCE_USER='repl', SOURCE_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery'; SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
- 從庫實(shí)例10001執(zhí)行
mysql -uroot -p'123456' --socket=/opt/mysql/10001/mysqld.sock > START GROUP_REPLICATION;
- 從庫實(shí)例10002執(zhí)行
mysql -uroot -p'123456' --socket=/opt/mysql/10002/mysqld.sock > START GROUP_REPLICATION;
- 查看組成員
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock > SELECT CHANNEL_NAME,MEMBER_ID,MEMBER_HOST,MEMBER_PORT, MEMBER_ROLE FROM performance_schema.replication_group_members;

2.2.5 組復(fù)制數(shù)據(jù)同步測試
- 主庫實(shí)例10000插入數(shù)據(jù)
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock > create database test; use test; create table test (id int,name varchar(10)); ALTER TABLE test ADD PRIMARY KEY id(id); insert into test values(1,'a'),(2,'b'),(3,'c');
- 從庫實(shí)例10001查詢數(shù)據(jù)
mysql -uroot -p'123456' --socket=/opt/mysql/10001/mysqld.sock > use test; select * from test;
- 從庫實(shí)例10002查詢數(shù)據(jù)
mysql -uroot -p'123456' --socket=/opt/mysql/10002/mysqld.sock > use test; select * from test;
2.2.6 組復(fù)制主庫宕機(jī)測試
- kill主庫實(shí)例10000
- 查看組成員

3 多主模式
https://dev.mysql.com/doc/refman/8.4/en/group-replication-multi-primary-mode.html
3.1 什么是多主模式
- 在多主模式下,沒有成員具有特殊角色
- 任何組成員在加入組復(fù)制時(shí)讀背設(shè)置為讀寫模式,可都以處理寫事物
3.2 多主模式部署示例
- 關(guān)閉實(shí)例10000,10001,10002單主模式
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock > stop GROUP_REPLICATION; set global group_replication_single_primary_mode=off; set global group_replication_enforce_update_everywhere_checks=ON; mysql -uroot -p'123456' --socket=/opt/mysql/10001/mysqld.sock > stop GROUP_REPLICATION; set global group_replication_single_primary_mode=off; set global group_replication_enforce_update_everywhere_checks=ON; mysql -uroot -p'123456' --socket=/opt/mysql/10002/mysqld.sock > stop GROUP_REPLICATION; set global group_replication_single_primary_mode=off; set global group_replication_enforce_update_everywhere_checks=ON;
- 使用實(shí)例10000引導(dǎo)組復(fù)制
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock > SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
- 實(shí)例10001,10002開啟組復(fù)制
mysql -uroot -p'123456' --socket=/opt/mysql/10001/mysqld.sock > START GROUP_REPLICATION; mysql -uroot -p'123456' --socket=/opt/mysql/10002/mysqld.sock > START GROUP_REPLICATION;
- 查看組成員
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock > SELECT CHANNEL_NAME,MEMBER_ID,MEMBER_HOST,MEMBER_PORT, MEMBER_ROLE FROM performance_schema.replication_group_members;

到此這篇關(guān)于MySQL8.4組復(fù)制的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)MySQL8.4組復(fù)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于MySQL 大批量插入時(shí)如何過濾掉重復(fù)數(shù)據(jù)
這篇文章主要介紹關(guān)于MySQL 大批量插入時(shí)如何過濾重復(fù)數(shù)據(jù),比如線上庫有6個(gè)表存在重復(fù)數(shù)據(jù),其中2個(gè)表比較大,96萬+和30萬+,因?yàn)橹疤幚磉^相同的問題,就直接拿來了上次的Python去重腳本,腳本很簡單,就是連接數(shù)據(jù)庫,查出來重復(fù)數(shù)據(jù),循環(huán)刪除,需要的朋友可以參考下2021-09-09
mysql臨時(shí)表用法分析【查詢結(jié)果可存在臨時(shí)表中】
這篇文章主要介紹了mysql臨時(shí)表用法,結(jié)合實(shí)例形式分析了MySQL將查詢結(jié)果存儲在臨時(shí)表中的相關(guān)操作技巧,需要的朋友可以參考下2019-08-08
mysql和sqlserver查詢數(shù)據(jù)庫表的數(shù)量方法詳解
這篇文章主要介紹了mysql和sqlserver查詢數(shù)據(jù)庫表的數(shù)量方法詳解,本文給大家分享SQL語句寫法,文末補(bǔ)充介紹了查詢sqlserver 數(shù)據(jù)庫中各表?xiàng)l數(shù)的語句,需要的朋友可以參考下2023-07-07
MySQL開啟慢查詢?nèi)罩緇og-slow-queries的方法
MySQL中提供了一個(gè)慢查詢的日志記錄功能,可以把查詢SQL語句時(shí)間大于多少秒的語句寫入慢查詢?nèi)罩?,日常維護(hù)中可以通過慢查詢?nèi)罩镜挠涗浶畔⒖焖贉?zhǔn)確地判斷問題所在2016-05-05

