这期的专题我们来介绍MySQL组复制相关的内容
主机名 | 业务IP | 私有IP | 复制用户 | 角色 |
---|---|---|---|---|
rac1 | 11.12.14.29 | 10.10.10.11 | rpl | 主 |
rac2 | 11.12.14.30 | 10.10.10.12 | rpl | 从 |
rac3 | 11.12.14.39 | 10.10.10.13 | rpl | 从 |
MGR建议组内成员间的通讯使用专用网络,类似RAC的private ip
我们这里重新添加网卡并设置和业务IP不同的网段地址
RAC1
10.10.10.11
RAC2
10.10.10.12
RAC3
10.10.10.13
最后测试是不是可以相互联通
我们将三台服务器的信息写入hosts文件
请原谅我的主机名是rac~
三台服务器
11.12.14.29 rac1
11.12.14.30 rac2
11.12.14.39 rac3
10.10.10.11 rac1-priv
10.10.10.12 rac2-priv
10.10.10.13 rac3-priv
MGR需要我们存储数据的存储引擎为innodb,否则会出错
my.cnf文件添加
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
在MySQL 8.0.16之前如果禁用MyISAM时使用mysql_upgrade命令会报错,如果需要可以首先启用MyISAM后再运行
MGR同时也需要我们设置如下参数
my.cnf文件添加
rac1
server_id=11121429
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=/oradata/datalog/mysql/binlog/mysql-bin.log
binlog_format=ROW
rac2
server_id=11121430
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=/datalog/mysql/binlog/mysql-bin.log
binlog_format=ROW
rac3
server_id=11121439
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=/datalog/mysql/binlog/mysql-bin.log
binlog_format=ROW
最后重新数据库
三台服务器
mysql>INSTALL PLUGIN group_replication SONAME 'group_replication.so';
然后通过SHOW PLUGINS;查看是否安装成功
我们需要配置用于组复制的一些参数
rac1
plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="4e551942-aeb6-11e9-a5c8-0050568cef02"
group_replication_start_on_boot=off
group_replication_local_address= "rac1-priv:33061"
group_replication_group_seeds= "rac1-priv:33061,rac2-priv:33061,rac3-priv:33061"
group_replication_bootstrap_group=off
rac2
plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="4e551942-aeb6-11e9-a5c8-0050568cef02"
group_replication_start_on_boot=off
group_replication_local_address= "rac2-priv:33061"
group_replication_group_seeds= "rac1-priv:33061,rac2-priv:33061,rac3-priv:33061"
group_replication_bootstrap_group=off
rac3
plugin_load_add='group_replication.so'
transaction_write_set_extraction=XXHASH64
group_replication_group_name="4e551942-aeb6-11e9-a5c8-0050568cef02"
group_replication_start_on_boot=off
group_replication_local_address= "rac3-priv:33061"
group_replication_group_seeds= "rac1-priv:33061,rac2-priv:33061,rac3-priv:33061"
group_replication_bootstrap_group=off
下面来详细说明参数的意义
由于MGR也是通过基于GTID的复制来进行数据同步的,如果主库的二进制信息有被清过,那么这部分的数据是不会被从库应用的,这时我们我们需要通过备份主库的形式在从库中还原到最近的状态
如果主库也是新建不久,或者所有库都是新库,这时所有的日志都在,就不用这个步骤了,
这部分可以参考我前面的文章,这里就写下步骤,我们使用基于GTID的复制
由于MGR不能有除innodb其他引擎,而一些系统表不符合,这里只导出应用的数据库
http://www.zhaibibei.cn/mysql/replication/
shell> mysqldump -S /data/mysql/data/mysql.sock -usystem -p --databases test --master-data=2 --set-gtid-purged=auto --triggers --events --routines > /tmp/dumpmaster.sql
shell> scp /tmp/dumpmaster.sql root@11.12.14.30:/tmp
shell> chown mysql:mysql /tmp/dumpmaster.sql
mysql> create database test;
mysql> reset master;
shell> mysql -S /data/mysql/data/mysql.sock -usystem -p test </tmp/dumpmaster.sql
https://dev.mysql.com/doc/refman/5.7/en/group-replication-getting-started.html