系统:CentOS 7.5 MySQL 8.0
数据库IP:192.168.0.103、192.168.0.104
数据库端口:都是3306
搭建MySQL步骤--略(详见:https://blog.csdn.net/xiaoyi23000/article/details/53200205)
1、在103节点/etc/my.cnf上配置(配置中只是关于GTID的参数配置,其他相关参数略)
server_id=1033306
log_bin=mysql-bin.log
log_bin_index=mysql-bin.index
relay_log=relay-log.log
relay_log_index=relay-log.index
binlog_format=row
#replicate_do_db=tt
#log_slave_updates=true #MySQL 5.7可以不启用此参数,5.7版本使用了gtid_executed表记录同步复制的信息,避免两次写入relay_log和binlog,降低了从库磁盘I/O
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
gtid_mode=on
enforce_gtid_consistency=on
slave_parallel_type=logical_clock #MySQL 5.7新增加的值,配置基于表的组提交并行复制,默认值为database(基于库进行多线程复制,MySQL 5.6是基于库的方式进行多线程方式复制)建议改为logical_clock,基于表的组方式复制,提高复制的效率。
slave_parallel_workers=2
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=on
sync_master_info=1
binlog_checksum=CRC32
master_verify_checksum=1
slave_sql_verify_checksum=1
binlog_rows_query_log_events=1
install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;
rpl_semi_sync_master_enabled=1;
rpl_semi_sync_master_timeout=1000;
rel_semi_synv_master_wait_no_slave=ON
rlp_semi_sync_master_trace_level=32
rpl_semi_sync_master_wait_for_slave_count=1
install plugin rpl_semi_sync_SLAVE soname ‘semisync_slave.so‘;
rpl_semi_sync_slave_enabled=1;
rlp_semi_sync_slave_trace_level=32
auto_increment_offset=1
auto_increment_increment=2
设置完成后重启MySQL服务
systemctl restart mysqld
2、在104节点/etc/my.cnf上配置
server_id=1043306
log_bin=mysql-bin.log
log_bin_index=mysql-bin.index
relay_log=relay-log.log
relay_log_index=relay-log.index
binlog_format=row
#replicate_do_db=tt
#log_slave_updates=true
character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
gtid_mode=on
enforce_gtid_consistency=on
slave_parallel_type=logical_clock
slave_parallel_workers=2
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=on
sync_master_info=1
binlog_checksum=CRC32
master_verify_checksum=1
slave_sql_verify_checksum=1
binlog_rows_query_log_events=1
install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;
rpl_semi_sync_master_enabled=1;
rpl_semi_sync_master_timeout=1000;
rel_semi_synv_master_wait_no_slave=ON
rlp_semi_sync_master_trace_level=32
rpl_semi_sync_master_wait_for_slave_count=1
install plugin rpl_semi_sync_SLAVE soname ‘semisync_slave.so‘;
rpl_semi_sync_slave_enabled=1;
rlp_semi_sync_slave_trace_level=32
auto_increment_offset=2
auto_increment_increment=2
设置完成后重启MySQL服务
systemctl restart mysqld
103主机:
mysqldump -h127.0.0.1 -uroot -p --lock-tables --events --triggers --routines --master-data=2 --flush-logs --all-databases | gzip > all_`date +%Y_%m_%d_%H_%M_%S`.sql.gz
mysqldump -h127.0.0.1 -uroot -p --single-transaction --events --triggers --routines --master-data=2 --flush-logs --all-databases | gzip > all_`date +%Y_%m_%d_%H_%M_%S`.sql.gz
104主机:
tar -zxvf all_`date +%Y_%m_%d_%H_%M_%S`.sql.gz
mysql -h127.0.0.1 -uroot -p < /tmp/all_`date +%Y_%m_%d_%H_%M_%S`.sql
mysql> source /tmp/fulldb.sql
3、先搭建已103为主,104为从的主从架构,然后再配置双主的机构模型
①在103上创建104的复制用户
mysql> create user repl@‘192.168.0.104‘ identified by ‘mysql‘;
grant replication slave,replication client on *.* to repl@‘192.168.0.104‘;
②在104上执行复制操作,gtid配置命令如下:
mysql> change master to master_host=‘192.168.0.103‘,master_user=‘repl‘,master_password=‘mysql‘,master_port=3306,master_auto_position=1;
show slave status\G
104从节点运行正常!
4、上述已经以103为主,104为从的设置完毕后,再在其基础上设置104节点为主,103为从的配置
在103主节点上创建新的用户(※这点很重要,因为之前已经是主从配置,在103节点上创建会自动同步至104上,如果在104上创建用户,可能会导致两节点数据不一致情况发生)
mysql> create user repl@‘192.168.0.103‘ identified by ‘mysql‘;
grant replication slave,replication client on *.* to repl@‘192.168.0.103‘;
5、然后在103上执行复制命令操作:
mysql> change master to master_host=‘192.168.0.104‘,master_user=‘repl‘,master_password=‘mysql‘,master_port=3306, master_auto_position=1;
6、启动设置的103节点为从的配置
mysql> start slave;
7、查看配置情况:
mysql>show slave status\G;
8、测试配置:
①在192.168.0.103上
create database aaa;
create table a1 (id int,name varchar(12));
insert into a1 values (103,‘张‘);
②分别在103、104库上进行查看数据
select * from aaa.a1;
两个库上数据库和表以及数据都存在!
③在192.168.0.104上
create database bbb;
create table b1 (id int,name varchar(12));
insert into b1 values (104,‘晓枫‘);
④分别在103、104库上进行查看数据
select * from aaa.a1;
select * from bbb.b1;
两个库上数据库和表以及数据都存在!
总结:MySQL 8.0基于GTID模式的双主模型配置完毕,生产环境双主模型一般都会做高可用,然后做读写分离架构,很少用到双主同时写库操作,除非写的频率较高的库,那样还需要通过其他设置解决数据库中表的主键冲突问题。