共計 9224 個字符,預計需要花費 24 分鐘才能閱讀完成。
這篇文章主要介紹“怎么部署 MySQL Group Replication”,在日常操作中,相信很多人在怎么部署 MySQL Group Replication 問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么部署 MySQL Group Replication”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
一、環境準備
名稱
版本
備注
操作系統
RHEL6.5_X86_64
數據庫
5.7.18-15
Percona 二進制版本
復制節點 10.26.7.129
node1
10.26.7.142
node2
10.26.7.166
node3
二、MGR 詳細部署步驟
1、MYSQL5.7 安裝
本次學習實驗采用的是 Percona-Server-5.7.18-15-Linux.x86_64.ssl101 二進制版本,具體安裝過程略
2、節點 1my.cnf 參數配置(主寫節點)
#replicate
server-id=1001
skip-slave-start = false
read-only = false
expire_logs_days = 2
max_binlog_size = 1G
max_binlog_cache_size = 2G
log-bin = /home/mysql/mysql-bin
log-bin-index = /home/mysql/bin-index
binlog_format = row
log-slave-updates = 1
sync_binlog = 1
log-slow-slave-statements = 1
max-relay-log-size = 1G
relay-log = /home/mysql/mysql-relay
relay-log-index = /home/mysql/relay-index
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
#group replication
transaction_write_set_extraction =XXHASH64
loose-group_replication_group_name = 2faa74b8-66bb-11e7-ab7e-b8ca3a6a61ec #務必以 uuid 形式配置
loose-group_replication_start_on_boot =off
loose-group_replication_local_address = 10.26.7.129:24001 #不同節點配置不同節點本身的 IP 地址和端口,區分 MYSQL 自身的 3306 端口
loose-group_replication_group_seeds = 10.26.7.129:24001,10.26.7.142:24001,10.26.7.166:24001
loose-group_replication_bootstrap_group =off
3、創建復制賬戶(主寫節點)
set sql_log_bin=0;
create user rpl_user@ %
grant replication slave on *.* to rpl_user@ % identified by rpl_pass
flush privileges;
set sql_log_bin=1;
change master to master_user= rpl_user ,master_password= rpl_pass for channel group_replication_recovery
4、安裝組復制插件并啟動組復制(主寫節點)
安裝插件
install plugin group_replication soname group_replication.so
檢查插件是否正確安裝
show plugins
+—————————–+———-+——————–+———————-+———+
| Name | Status | Type | Library | License |
+—————————–+———-+——————–+———————-+———+
| group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |
+—————————–+———-+——————–+———————-+———+
啟動組復制
set global group_replication_bootstrap_group=ON;
start group_replication;
set global group_replication_bootstrap_group=OFF;
檢查組復制成員及狀態
select * from performance_schema.replication_group_members;
+—————————+————————————–+————-+————-+————–+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+—————————+————————————–+————-+————-+————–+
| group_replication_applier | 2faa74b8-66bb-11e7-ab7e-b8ca3a6a61ec | node1 | 3306 | ONLINE |
5、添加組復制成員實例 node2 和 node3
*** 添加節點前,務必做 DNS 解析,如果沒有配置 DNS 解析服務器,需要在每個節點配置 hosts 解析 /etc/hosts***
10.26.7.166 node3
10.26.7.142 node2
10.26.7.129 node1
*** 節點 my.cnf 參數文件 server-id 和 loose-group_replication_local_address = node2:24001 需要分別更改 ***
node2
set sql_log_bin=0;
create user rpl_user@ %
grant replication slave on *.* to rpl_user@ % identified by rpl_pass
flush privileges;
set sql_log_bin=1;
change master to master_user= rpl_user ,master_password= rpl_pass for channel group_replication_recovery
install plugin group_replication soname group_replication.so
show plugins
set global group_replication_allow_local_disjoint_gtids_join=ON;
start group_replication;
node3 同樣執行上述命令
然后檢查組復制信息
select * from performance_schema.replication_group_members;
+—————————+————————————–+————-+————-+————–+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+—————————+————————————–+————-+————-+————–+
| group_replication_applier | 2faa74b8-66bb-11e7-ab7e-b8ca3a6a61ec | node1 | 3306 | ONLINE |
| group_replication_applier | 35e38786-66bb-11e7-bcc3-b8ca3a6a61a4 | node2 | 3306 | ONLINE |
| group_replication_applier | 3bbedb1e-66bb-11e7-8fc0-b8ca3a6a7c48 | node3 | 3306 | ONLINE |
+—————————+————————————–+————-+————-+————–+
測試組復制是否正常:
(root:localhost:Sat Jul 15 13:26:33 2017)[(none)] create database dbtest;
Query OK, 1 row affected (0.01 sec)
(root:localhost:Sat Jul 15 13:26:40 2017)[(none)] use dbtest;
Database changed
(root:localhost:Sat Jul 15 13:26:45 2017)[dbtest] create table t1(id int primary key);
Query OK, 0 rows affected (0.01 sec)
(root:localhost:Sat Jul 15 13:26:54 2017)[dbtest] insert into t1 values(1);
Query OK, 1 row affected (0.00 sec)
node2 和 node3 執行查詢
(root:localhost:Sat Jul 15 12:57:32 2017)[db01] use dbtest;
Database changed
(root:localhost:Sat Jul 15 13:27:26 2017)[dbtest] select * from t1;
+—-+
| id |
+—-+
| 1 |
+—-+
1 row in set (0.00 sec)
三、錯誤問題以及匯總:
1、錯誤案例 01
錯誤信息:2017-07-15T01:36:06.929941Z 4 [ERROR] Plugin group_replication reported: The group name group-replication-test is not a valid UUID
錯誤原因:loose-group_replication_group_name 參數沒有按照 UUID 格式指定,被認為設置該參數無效
解決方案:更改 loose-group_replication_group_name 參數值為,loose-group_replication_group_name = 2faa74b8-66bb-11e7-ab7e-b8ca3a6a61ec
2、錯誤案例 02
錯誤信息:
2017-07-15T01:29:27.271909Z 0 [Warning] unknown variable loose-group_replication_group_name=group-replication-test
2017-07-15T01:29:27.271926Z 0 [Warning] unknown variable loose-group_replication_start_on_boot=off
2017-07-15T01:29:27.271930Z 0 [Warning] unknown variable loose-group_replication_local_address=10.26.7.129:3306
2017-07-15T01:29:27.271935Z 0 [Warning] unknown variable loose-group_replication_group_seeds=10.26.7.129:3306,10.26.7.142:3306,10.26.7.166:3306
2017-07-15T01:29:27.271939Z 0 [Warning] unknown variable loose-group_replication_bootstrap_group=off
錯誤原因:因為先設置了這些參數,而沒有裝 group_replication 插件,導致數據庫實例無法識別這些參數
解決方案:安裝 group replication 插件,install plugin group_replication soname group_replication.so(uninstall plugin group_replication 卸載,show plugins 查看)
3、錯誤案例 03
錯誤信息:
2017-07-15T01:54:54.447829Z 0 [Note] Plugin group_replication reported: Unable to bind to 0.0.0.0:3306 (socket=60, errno=98)!
2017-07-15T01:54:54.447948Z 0 [ERROR] Plugin group_replication reported: Unable to announce tcp port 3306. Port already in use?
2017-07-15T01:54:54.448101Z 0 [ERROR] Plugin group_replication reported: [GCS] Error joining the group while waiting for the network layer to become ready.
錯誤原因:配置的組復制監聽端口和 MYSQL 實例端口沖突
解決方案:調整下面參數
loose-group_replication_local_address
= 10.26.7.129:24001
#不同節點配置不同節點本身的 IP 地址和端口,區分 MYSQL 自身的 3306 端口
loose-group_replication_group_seeds = 10.26.7.129:24001,10.26.7.142:24001,10.26.7.166:24001
4、錯誤案例 04
錯誤信息:
2017-07-15T04:20:01.249529Z 21 [ERROR] Slave I/O for channel group_replication_recovery : error connecting to master rpl_user@node2:3306 – retry-time: 60 retries: 1, Error_code: 2005
錯誤原因:沒有配置 DNS 解析或者 hosts 解析,節點無法連接其他數據庫
解決方案:配置 hosts 解析,每個節點 /etc/hosts 添加如下內容
10.26.7.166 node3
10.26.7.142 node2
10.26.7.129 node1
5、錯誤案例 05
錯誤信息
2017-07-15T03:42:45.395407Z 288 [ERROR] Slave SQL for channel group_replication_recovery : Error Can t create database db01 database exists on query. Default database: db01 . Query: create database db01 , Error_code: 1007
2017-07-15T03:42:45.395472Z 288 [Warning] Slave: Can t create database db01 database exists Error_code: 1007
2017-07-15T03:42:45.395503Z 288 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with SLAVE START . We stopped at log mysql-bin.000005 position 434
錯誤原因:這個錯誤是由于節點由于各種原因退出 mgr 組,后面又加入了 mgr 組,但之前存在的數據依舊存在
解決方案:刪除要加入組復制節點存在的數據庫即可,但其他節點不是主寫節點,需要先調整參數 set global super_read_only=0; 然后執行 drop database db01; 再重新加入組
set global group_replication_allow_local_disjoint_gtids_join=ON;
start group_replication;
6、錯誤案例 06
錯誤信息:
2017-07-15T03:44:09.982428Z 18 [ERROR] Slave SQL for channel group_replication_recovery : Error Can t create database db01 database exists on query. Default database: db01 . Query: create database db01 , Error_code: 1007
2017-07-15T03:44:09.982493Z 18 [Warning] Slave: Can t create database db01 database exists Error_code: 1007
2017-07-15T03:44:09.982522Z 18 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with SLAVE START . We stopped at log mysql-bin.000005 position 434
錯誤原因:同上錯誤案例 05
解決方案:同上錯誤案例 05
7、錯誤案例 07
錯誤信息:
2017-07-15T03:49:10.370846Z 0 [ERROR] Plugin group_replication reported: This member has more executed transactions than those present in the group. Local transactions: 2faa74b8-66bb-11e7-ab7e-b8ca3a6a61ec:1-4,35e38786-66bb-11e7-bcc3-b8ca3a6a61a4:1 Group transactions: 2faa74b8-66bb-11e7-ab7e-b8ca3a6a61ec:1-16
錯誤原因:同上錯誤案例 05,在從庫執行了多余的事務
解決方案:同上錯誤案例 05,直接重新加入節點即可
set global group_replication_allow_local_disjoint_gtids_join=ON;
start group_replication;
8、錯誤案例 08
錯誤信息
ERROR 3098 (HY000): The table does not comply with the requirements by an external plugin.
錯誤原因:由于主節點創建了表 t1,但沒有指定主鍵(此時表結構可以復制到各節點,一旦插入數據 DML 操作即會報錯)
解決方案:為表增加主鍵,然后做 DML 操作(MGR 需要各表都有主鍵)
alter table t1 add primary key(id);
insert into t1 values(1),(2);
9、錯誤案例 09
錯誤信息:
mysqldump -R -E –triggers –single-transaction –master-data=2 -B db01 db01.sql
Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don t want to restore GTIDs, pass –set-gtid-purged=OFF. To make a complete dump, pass –all-databases –triggers –routines –events.
mysqldump: Couldn t execute SAVEPOINT sp : The MySQL server is running with the –transaction-write-set-extraction!=OFF option so it cannot execute this statement (1290)
錯誤原因:mgr 不支持 mysqldump 的事務一致性備份,因為其不支持 savepoint
解決方案:通過 xtrabackup 或者不加 –single-transaction 備份
10、錯誤案例 10
錯誤信息:
create table t2 as select * from t1;
ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE … SELECT.
錯誤原因:配置 MGR,開啟了 GTID,所有 GTID 不支持的操作,MGR 也不支持
解決方案:使用 create table t2 like t1; insert into t2 select * from t; 分開兩個事務執行
到此,關于“怎么部署 MySQL Group Replication”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!