一、数据库的主从复制(基于gtid)
配置环境:server2为master ip:172.25.77.2
server3为slave ip:172.25.77.3
我这里使用的mysql版本为5.7
修改master的配置文件如图:
log-bin=mysql-bin 开启二进制日志;二进制日志必须开启,因为数据的同步实质上就是其他的MySQL数据库服务器将这个数据变更的二进制日志在本机上再执行一遍。
开启gtid模式
slave端配置如图
master登陆mysql 进行授权:
mysql>GRANT REPLICATION SLAVE ON *.* TO ‘admin’@’172.25.77.%’ IDENTIFIED BY ‘Redhat-98k’;
mysql>FLUSH PRIVILEGES;刷新数据使其更新
在slave指定要复制的master;
change master to master_host='172.25.77.2',master_user='admin',master_password='Redhat-98k',master_auto_position=1;
slave端开启服务 start slave;
查看状态:SQL线程和IO线程,这两个线程yes即主从复制完成
测试:
master端创建linux数据库,并插入表kkk,写入内容如图:
slave端查看同步是否成功:
二、基于组提交的并行复制
基于组的并发复制,可以支持在一个database中,并发执行relaylog中的事务。相同的二进制日志组在master上提交并行应用到slave节点上,没有跨数据库的限制,并且不需要把数据分割到多个数据库。
更改slave配置文件
slave-parallel-type=LOGICAL_CLOCK 基于组提交的并行用户
slave-parallel-workers=16 开启16个work:单线程变成多线程(前两个必须加入,后面为优化)
master_info_repository=TABLE 优化选项,默认以文件存储,记录master信息,用表来记录,更新速度更快
relay_log_info_repository=TABLE 读日志信息,用表来记录(原来是刷在磁盘里)
relay_log_recovery=ON 激活recovery:读取master二进制日志,如果损坏,直接丢弃然后重新读取
配置完成,查看三个表的信息
master进程查看
slave进程查看
三、半同步复制
MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从