mysql主从复制『异步、半同步、全同步(组复制) 』(未完)

mysql 半同步复制基于二进制日志
server1
解压
tar xf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
只留
mysql-community-client-5.7.24-1.el7.x86_64.rpm
mysql-community-common-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-5.7.24-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm
mysql-community-server-5.7.24-1.el7.x86_64.rpm
几个包就行

mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第1张图片
yum install -y *
vim /etc/my.cnf
末尾添加
log-bin=mysql-bin
server-id=1
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第2张图片
systemctl start mysqld
cat /var/mysqld.log | grep password 查看密码
在这里插入图片描述
mysql_secure_installation初始化
新密码Wlt+123ld
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第3张图片
mysql -uroot -pWlt+123ld
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第4张图片

mysql> create user ‘repl’@‘172.25.18.%’ identified by ‘Wlt+123ld’;
Query OK, 0 rows affected (0.04 sec)

mysql> grant replication slave on . to’repl’@‘172.25.18.%’;
Query OK, 0 rows affected (0.02 sec)

mysql> flush privileges
-> ;
Query OK, 0 rows affected (0.03 sec)

mysql> show master status;
±-----------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±-----------------±---------±-------------±-----------------±------------------+
| mysql-bin.000001 | 767 | | | |
±-----------------±---------±-------------±-----------------±------------------+
1 row in set (0.00 sec)

mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第5张图片

server2
拷包
yum install -y *
vim /etc/my.cnf
末尾添加
server-id=2
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第6张图片
systemctl start mysqld
cat /var/mysqld.log | grep password 查看密码
mysql_secure_installation初始化
新密码Wlt+123ld
mysql -uroot -pWlt+123ld
{测试登陆 主机 mysql -h 172.25.18.1 -urepl -pWlt+123ld}

mysql> change master to
-> master_host=‘172.25.18.1’,
-> master_user=‘repl’,
-> master_password=‘Wlt+123ld’,
-> master_log_file=‘mysql-bin.000001’,
-> master_log_pos=767;
Query OK, 0 rows affected, 2 warnings (0.69 sec)

mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第7张图片

mysql> start slave;
Query OK, 0 rows affected (0.07 sec)
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第8张图片

mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.25.18.1
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 767
Relay_Log_File: server2-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 767
Relay_Log_Space: 529
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 2dbf26be-b022-11e9-bd7c-5254001b2ed2
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第9张图片

server1
mysql> create database westos
-> ;
Query OK, 1 row affected (0.02 sec)

mysql> use westos;
Database changed

mysql> create table usertb(
-> username varchar(10) not null,
-> password varchar(20) not null);
Query OK, 0 rows affected (0.74 sec)

mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第10张图片

mysql> desc usertb
-> ;
±---------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±------------±-----±----±--------±------+
| username | varchar(10) | NO | | NULL | |
| password | varchar(20) | NO | | NULL | |
±---------±------------±-----±----±--------±------+
2 rows in set (0.01 sec)

mysql> insert into usertb values(‘user1’,‘123’);
Query OK, 1 row affected (0.11 sec)

mysql> select * from usertb
-> ;
±---------±---------+
| username | password |
±---------±---------+
| user1 | 123 |
±---------±---------+
1 row in set (0.00 sec)

mysql>
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第11张图片

server2
mysql> show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| westos |
±-------------------+
5 rows in set (0.00 sec)

mysql> select * from westos.usertb;
±---------±---------+
| username | password |
±---------±---------+
| user1 | 123 |
±---------±---------+
1 row in set (0.00 sec)
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第12张图片
同步成功
mysql复制机制
IO线程读取
SQL线程回放

gtid 主从复制(等待防止数据丢失)
server1
vim/etc/my.cnf
末尾添加
gtid-mode=ON
enforce-gtid-consistency=true
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第13张图片
systemctl restart mysqld

server2
vim /etc/my.cnf
gtid-mode=ON
enforce-gtid-consistency=true
systemctl restart mysqld
登陆mysql
stop slave;
change master to master_host=‘172.25.18.1’,master_user=‘repl’,master_password=‘Wlt+123ld’,master_auto_position=1;
start slave;
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第14张图片
show slave status\G;
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第15张图片

server1
mysql -uroot -pWlt+123ld
use westos;
insert into usertb values(‘user2’,‘123’);
insert into usertb values(‘user3’,‘123’);

mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第16张图片

select *from mysql.gtid_executed; 查看等待的同步项
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第17张图片

半同步复制
server1
install plugin rpl_semi_sync_master soname ‘semisync_master.so’;

mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第18张图片
server2
install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第19张图片
server1 2
mysql> select plugin_name,plugin_status
-> from information_schema.plugins
-> where plugin_name like ‘%semi%’;
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第20张图片
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第21张图片
server1
set global rpl_semi_sync_master_enabled =1;
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第22张图片
server2
set global rpl_semi_sync_slave_enabled =1;
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第23张图片

server1
show status like ‘%rpl%’;
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第24张图片
server2
show status like ‘%rpl%’

mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第25张图片

测试
server1
use westos
insert into usertb values(‘user4’,‘123’);
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第26张图片
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第27张图片
server2
stop slave io_thread;
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第28张图片
server1
insert into usertb values(‘user5’,‘123’);等待到时间后回到异步
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第29张图片
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第30张图片
server2
start slave io_thread;
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第31张图片
组复制全同步复制

server_id=1
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=binlog
binlog_format=ROW

plugin_load_add='group_replication.so
transaction_write_set_extraction=XXHASH64
group_replication_group_name=“aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa”
group_replication_start_on_boot=off
group_replication_local_address= “s1:33061”
group_replication_group_seeds= “s1:33061,s2:33061,s3:33061”
group_replication_bootstrap_group=off

####mysql组复制(全同步复制)####
server1(master)节点:

1.关闭mysqld
systemctl stop mysqld

2.删除mysql数据 ##注意 :删除数据之前先复制uuid /var/lib/mysql/auto.cnf
rm -fr /var/lib/mysql/*

重新配置mysql

3.修改配置文件 ##官网 https://dev.mysql.com/doc/refman/5.7/en/group-replication-configuring-instances.html

vim /etc/my.cnf

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE #关闭binlog校验
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW #组复制依赖基于行的复制格式

mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第32张图片

transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name=“c36cc649-3f17-11e9-960e-525400cf2a01” ##可以看/var/lib/mysql/auto.cnf
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= “172.25.136.1:24901”
loose-group_replication_group_seeds= “172.25.136.1:24901,172.25.136.2:24901,172.25.136.3:24901”
loose-group_replication_bootstrap_group=off ##插件是否自动引导,这个选项一般都要off掉,只需要由发起组复制的节点开启,并只启动一次,如果是on,下次再启动时,会生成一个同名的组,可能会发生脑裂
loose-group_replication_ip_whitelist=“127.0.0.1,172.25.136.0/24”
loose-group_replication_enforce_update_everywhere_checks=ON
loose-group_replication_single_primary_mode=OFF #后两行是开启多主模式的参数

4.启动mysqld
systemctl start mysqld

5.初始化数据库
[root@server1 mysql]# grep password /var/log/mysqld.log

2019-03-14T07:50:42.947487Z 1 [Note] A temporary password is generated for root@localhost: J)hjM=V39sw>

登录数据库,先修改密码
mysql> alter user root@localhost identified by ‘Wsp+123ld’;
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第33张图片
6.配置 #看官网复制 https://dev.mysql.com/doc/refman/5.7/en/group-replication-user-credentials.html

mysql> SET SQL_LOG_BIN=0; #关闭二进制日志,防止传到其他server上
mysql> CREATE USER rpl_user@’%’ IDENTIFIED BY ‘Wsp+123ld’;

mysql> GRANT REPLICATION SLAVE ON . TO rpl_user@’%’;

mysql> FLUSH PRIVILEGES;

mysql> SET SQL_LOG_BIN=1; ##开启日志
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第34张图片

mysql> CHANGE MASTER TO MASTER_USER=‘rpl_user’, MASTER_PASSWORD=‘Wsp+123ld’ FOR CHANNEL ‘group_replication_recovery’;

mysql> INSTALL PLUGIN group_replication SONAME ‘group_replication.so’;
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第35张图片
mysql> SHOW PLUGINS; ##查看插件
mysql主从复制『异步、半同步、全同步(组复制) 』(未完)_第36张图片
| group_replication | ACTIVE | GROUP REPLICATION | group_replication.so | GPL |
±---------------------------±---------±-------------------±---------------------±--------+
在这里插入图片描述
mysql> SET GLOBAL group_replication_bootstrap_group=ON; ##组复制发起节点开启这个参数

mysql> START GROUP_REPLICATION;

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

mysql> SELECT * FROM performance_schema.replication_group_members; ##查看server1是否online

###注意:先不要添加数据 最后测试的时候再添加
加入数据

mysql> CREATE DATABASE test;

mysql> USE test;

mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);

mysql> INSERT INTO t1 VALUES (1, ‘Luis’);

mysql> SELECT * FROM t1;

##添加server2到组内
server2上:
[root@server2 mysql]# systemctl stop mysqld

rm -fr /var/lib/mysql/*

vim /etc/my.cnf

server_id=2
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=binlog
binlog_format=ROW

transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name=“c36cc649-3f17-11e9-960e-525400cf2a01” ##注意:这里和server1的保持一致!!!!!!
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= “172.25.136.2:24901”
loose-group_replication_group_seeds= “172.25.136.1:24901,172.25.136.2:24901,172.25.136.3:24901”
loose-group_replication_bootstrap_group=off
loose-group_replication_ip_whitelist=“127.0.0.1,172.25.136.0/24”
loose-group_replication_enforce_update_everywhere_checks=ON
loose-group_replication_single_primary_mode=OFF

#启动mysqld
systemctl start mysqld

#初始化
grep password /var/log/mysqld.log

#进入数据库
mysql> alter user root@localhost identified by ‘Wsp+123ld’; #修改root用户密码

mysql> SET SQL_LOG_BIN=0;

mysql> CREATE USER rpl_user@’%’ IDENTIFIED BY ‘Wsp+123ld’;

mysql> GRANT REPLICATION SLAVE ON . TO rpl_user@’%’;

mysql> FLUSH PRIVILEGES;

mysql> SET SQL_LOG_BIN=1;

mysql> CHANGE MASTER TO MASTER_USER=‘rpl_user’, MASTER_PASSWORD=‘Wsp+123ld’ FOR CHANNEL ‘group_replication_recovery’;

mysql> INSTALL PLUGIN group_replication SONAME ‘group_replication.so’;

#这里不需要做server1上做的SET GLOBAL group_replication_bootstrap_group=ON;

mysql> START GROUP_REPLICATION;
‘这里开启组复制可能会报错,查看mysql日志’
‘cat /var/log/mysqld.log ,找到解决办法’
2019-03-14T08:51:52.838185Z 0 [Note] Plugin group_replication reported: ‘To force this member into the group you can use the group_replication_allow_local_disjoint_gtids_join option’

mysql -pWsp+123ld

mysql> STOP GROUP_REPLICATION;

mysql> set global group_replication_allow_local_disjoint_gtids_join=on; ##直接做这一步 不用等报错

mysql> START GROUP_REPLICATION;

恢复正常

#再配置server3,和server2配置相同

配置好后在server1上查看
mysql> SELECT * FROM performance_schema.replication_group_members;
±--------------------------±-------------------------------------±------------±------------±-------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
±--------------------------±-------------------------------------±------------±------------±-------------+
| group_replication_applier | 43a9e177-46c2-11e9-9b8a-52540039a8e5 | server3 | 3306 | ONLINE |
| group_replication_applier | 926e543f-4635-11e9-bb87-525400cf2a01 | server2 | 3306 | ONLINE |
| group_replication_applier | de5a155a-462d-11e9-b9df-5254004c61ed | server1 | 3306 | ONLINE |
±--------------------------±-------------------------------------±------------±------------±-------------+

看到3台都是online,表示正常
这时在任何一个节点都可以看到刚才插入的数据
在任何节点写入数据,其他节点也能看到
如在server3上:
mysql> INSERT INTO t1 VALUES (2, ‘wsp’);

在server2和server1上查看:
mysql> select * from t1;
±—±-----+
| c1 | c2 |
±—±-----+
| 1 | Luis |
| 2 | wsp |
±—±-----+

你可能感兴趣的:(mysql主从复制『异步、半同步、全同步(组复制) 』(未完))