Mysql的全同步复制
一、全同步复制((Fully synchronous replication)原理
1、逻辑上
指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。
2、技术上
当主库提交事务之后,所有的从库节点必须收到、APPLY并且提交这些事务,然后主库线程才能继续做后续操作。但缺点是,主库完成一个事务的时间会被拉长,性能降低。
3、全同步是主从同步的增强。
因为主从同步虽可以实现一主多从,但它的局限在于只有在主数据库上写的时候从数据库才会做数据备份,而在从数据库做出改变时,主数据库不会记录相应的改变。
然而,全同步出现了,它可以是只要在一个数据库做出改变,所以其它在同组的数据库也会改变,同组的数据库没有等级之分。可以理解为“同组数据库之间数据相等”。
二、全同步复制的实现
1、实验环境
172.25.7.2 server2
172.25.7.3 server3
172.25.7.4 server4
2、在server2上:
1)将数据库停掉并且设置成开机不自启,删除原来生成的文件
/etc/init.d/mysqld stop
chkconfig mysqld off
cd /var/lib/mysql
rm -fr *
2)修改mysql的配置文件
server_id=2 #id对应的组中编号
gtid_mode=ON #打开gtid模式
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="08b8df85-3ba2-4e3c-b2bb-630b85c7f6ee" #所属组的名称,必须是有效的uuid格式,可以用uuidgen来生成uuid
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "172.25.7.2:24901" #本机地址
loose-group_replication_group_seeds="172.25.7.2:24901,172.25.7.3:24901,172.25.7.4:24901" #组内其他成员的地址列表,以逗号分隔开
loose-group_replication_bootstrap_group=off
loose-group_replication_ip_whitelist="172.25.7.0/24"
loose-group_replication_enforce_update_everywhere_checks=on
loose-group_replication_single_primary_mode=off
3)修改配置文件后,重启mysql使其生效
4)grep password /var/log/mysqld.log #查找原始密码
5)修改数据库密码(用原始密码虽可以进入数据库,但不能对数据库进行操作的。需修改密码之后才可以)
6)登陆数据库看是否成功
7)对数据库进行配置
3、在server3上:
1)和server2上一样,停掉数据库,并且设置成开机不自启,删除原来生成的文件
2)修改mysql的配置文件,重启mysql使其生效
3)grep password /var/log/mysqld.log #查找原始密码
4)修改数据库密码
5)登陆数据库,对数据库进行配置
4、在server4上对数据库的配置和server3完全相同
只需要改变配置文件的
server_id=4
loose-group_replication_local_address= "172.25.7.4:24901"即可
5、测试:
在server2中创建新的数据库并写入数据,看server2和server3是否都同步有相同的数据。
在server3上查看同步到了server1上的数据
在server4上查看同步到了server1上的数据
在server3中创建新的数据库并写入数据,看server2和server4是否都同步有相同的数据。
在server2上查看同步到了server3上的数据
在server4上查看同步到了server3上的数据