主从搭建

1.主从同步原理示意图

主从搭建_第1张图片
image.png

默认是异步同步,半同步需要插件!
半同步执行流程:
1.事务请求提交操作执行后,写入maste的binlog,在引擎提交操作之前wait
2.master中的一个event监听事件,监听到binlog有变化,会起dump thread线程
3.dump thread通知slave的io thread线程有事务需要同步
4.slave的relay-log.info中获取slave的binlog文件和position位置告诉给master
5.把master的日志文件和position位置后面的日志同步给slave
6.slave写入relaybin日志,不管后面的写入操作,直接返回给master一个应答信息
7.master执行引擎提交操作
注:如果slave同步异常或者阻塞,应答时间超过10秒,master会执行异步同步操作,后续的请求都会执行异步同步操作,master写入binlog后,dump thread通知slave的io thread,master的引擎提交操作同时进行

2.开启搭建步骤

在安装完mysql服务的基础上(比如:docker)

2.1 添加配置文件到宿主机目录 my.cnf
[client]
port=3306
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character_set_server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 配置大小写不敏感
lower_case_table_names=1
## 同一局域网内注意要唯一
server-id=100  
## 开启二进制日志功能(关键)
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=1
  • 重启mysql
docker restart mysql3307
  • 进入mysql
docker exec -it mysql3307 /bin/bash
mysql -uroot -p #在提示下输入密码
  • 给docker slave用户授权
GRANT REPLICATION SLAVE,FILE,REPLICATION CLIENT ON *.* TO 'user'@'%' IDENTIFIED BY '123456';

FLUSH PRIVILEGES;

2.1 master 查看二进制日志
show  master status;
image.png
2.2 slave中设置master信息
#将master中的file和position设置到下边语句
change master to master_host='172.16.223.136',master_port=3307,master_user='user',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=625;

2.3 开启slave,启动SQL和IO线程
start slave;
2.4 查看slave的状态
show slave status\G
2.5 查看二进制日志是否开启
show global variables like "%log%";
2.6 查看进程信息
SHOW PROCESSLIST;

下面配置可忽略,至此,上边配置已经完成了主从

2.7 允许root远程连接
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;

FLUSH PRIVILEGES;

3.配置半同步模式(after sync)

3.1 加载主节点配置
  • 主库
install plugin rpl_semi_sync_master soname 'semisync_master.so';
  • 从库
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';  

可以一起装。建议一起装,因为会有主从(主主)切换的情景。

  • 查看,确保所有节点都成功加载
show plugins;
3.2 启动半同步

先启用从库上的参数,最后启用主库的参数

  • 从库
set global rpl_semi_sync_slave_enabled = {0|1};   # 1:启用,0:禁止
  • 主库
set global rpl_semi_sync_master_enabled = {0|1};   # 1:启用,0:禁止
#设置最大超时时间,默认为10s,可不设置
set global rpl_semi_sync_master_timeout = 10000;       # 单位为ms

你可能感兴趣的:(主从搭建)