一、主从的意义
a) 实时灾备,用于故障切换
如果机器发生故障,那么可以立刻切换到其他机器,保证系统能够正常运行。
b) 读写负载均衡
一般项目都读多写少,所以我们可以进行读写分离,主库进行请求,从库进行读操作,提升系统性能。
c) 定时任务专用
定时任务比较固定,可以独立一个slave出来做定时任务,与业务进行隔离。
d) 开发人员查看
当发生错误时,开发人员可能通过slave去查看数据,而不是直接连接master。
二、主从同步的原理
两种方式
1、 纯异步
a) 当有请求到达master时,会先到data
b) 再记录请求日志到binlogs中
c) 无需等待从库同步,data直接返回请求结果
d) slave通过I/O thread获取master的binlog,将其放到relaybinlog中(异步)
e) 通过sql thread执行binlogs记录的sql,从而使用slave data与master保持同步(异步)
优点:异步同步数据,速度快
缺点:如果master与slave链接断了,可能会产生数据不一致
2、 半同步
a) 当有请求到达master时,先记录请求日志到binlogs
b) 然后到data执行请求,等待其中一个slave获取master binlogs
c) Slave通过I/O thread获取master的binlog,将其放到relaybinlog中,并通知master binlogs
d) Master binlog接收到slave的通知后,会通知data,最后data才会返回执行结果
e) 通过sql thread执行binlogs记录的sql,从而使用slave data与master保持同步
优点:可以在一定程度上保证数据的一致性
缺点:性能比较差,等待时间较长,用户体验较差
三、主从同步产生的问题
问题
a) 中间链路中断,数据不一致问题
b) 从库只有一个sql thread,性能比较慢
解决方案
a) 半同步
b) 并行复制(mysql5.7可以并行复制)
四、主从同步的方案
五、主从同步配置
a) 准备两台服务器
Master服务器:192.168.1.101
Slave服务器:192.168.1.102
b) master服务器
my.cnf 配置
server-id=1
#binlog 格式
binlog-format=ROW
log-bin=mysql-master-bin
#slave更新时是否记录到日志中;
log-slave-updates=true
#开启半同步,需要安装插件(见:补充)
rpl_semi_sync_master_enabled=ON
#需要同步的二进制数据库名;
binlog-do-db=mydatabase
#不同步的二进制数据库名,如果不设置可以将其注释掉;
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=personalsite
binlog-ignore-db=test
创建用户,用于主从同步数据库
mysql> grant replication slave,super,reload on *.* toslave1@192.168.1.102 identified by '123456'
查看主节点状态
mysql>show master status
#在主库上查看已连接的slave主机
mysql> show slave hosts;
#查看所有binlog日志
mysql> show binary logs;
#查看所有binlog 事件
mysql> show binlog events in ' mysql-master-bin.000003';
c) slave服务器
my.cnf 配置-----
server-id = 2
log-bin=mysql-slave-bin
#需要同步的数据库
binlog-do-db=mydatabase
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=personalsite
binlog-ignore-db=test
slave 节点修改master 配置
mysql> change master to master_host='192.168.1.101',master_user='slave1',master_password='123456';
slave 相关操作
#启动slave
mysql>start slave;
mysql>stop slave;
#查看 slave 状态
show slave status\G;
六、验证
master执行命令
slave执行命令
mysql> show slave status
当看到以上两种结果时,意味着配置成功了
这个时候,操作master的数据,然后查看slave的数据是否会同步!
七、补充
开启半同步需要安装一个插件
在master库安装semisync_master插件:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so';
在slave库安装semisync_slave插件
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME'semisync_slave.so';
注:本篇文章为学习笔记,勿喷!