mysql 主从复制学习

mysql 主从复制学习

什么是主从复制

MySQL主从复制是其最重要的功能之一。主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器即可充当主机,也可充当从机。MySQL主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。

主从复制的过程

在这里插入图片描述
1、首先client端(tomcat)将数据写入到master节点的数据库中,master节点会通知存储引擎提交事务,同时会将数据以(基于行、基于sql、基于混合)的方式保存在二进制日志中

2、SLAVE节点会开启I/O线程,用于监听master的二进制日志的更新,一旦发生更新内容,则向master的dump线程发出同步请求

3、master的dump线程在接收到SLAVE的I/O请求后,会读取二进制文件中更新的数据,并发送给SLAVE的I/O线程

4、SLAVE的I/O线程接收到数据后,会保存在SLAVE节点的中继日志中

5、同时,SLAVE节点钟的SQL线程,会读取中继日志钟的数据,更新在本地的mysql数据库中

6、最终,完成slave——>复制master数据,达到主从同步的效

记住两个日志和三个线程:

两个日志:二进制日志(bin log) 、中继日志(Relay log)

三个线程:I/O线程、dump线程、SQL线程

注意:中继日志通常会位于 OS 缓存中,所以中继日志的开销很小。

       复制过程有一个很重要的限制,即复制在 Slave上是串行化的,也就是说 Master上的并行             更新操作不能在 Slave上并行操作。

      半同步复制,会多一个ack确认线程(ack collector thread),专门用于接收slave 的反馈            信息(收集slave节点返回的ack信息)。
mysql 主从复制延迟原因
  1. master服务器高并发,形成大量事务
  2. 网络延迟
  3. 主从硬件设备导致
  4. cpu主频、内存io、硬盘io
  5. 本来就不是同步复制、而是异步复制
  6. 从库优化Mysql参数。比如增大innodb_buffer_pool_size,让更多操作在Mysql内存中完 成,减少磁盘操作。
  7. 从库使用高性能主机。包括cpu强悍、内存加大。避免使用虚拟云主机,使用物理主机,这样提升了i/o方面性。
  8. 从库使用SSD磁盘
  9. 网络优化,避免跨机房实现同步
mysql 主从复制模式
  1. 异步复制(Asynchronous replication): MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整
  2. 全同步复制(Fully synchronous replication):指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。
  3. 半同步复制(Semisynchronous replication):介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。
主从架构 (这里使用了一出一从)

master: 192.168.1.239
slave: 192.168.1.238

master
  1. 安装mysql
  2. 关闭防火墙
  3. 修改 /etc/my.cnf 文件,添加如下两行
log_bin=mysql-bin    #启用二进制文件
server-id=1			 # 服务器唯一ID。唯一即可
  1. 然后重启mysql
    在这里插入图片描述
  2. 进入mysql,然后使用grant语句配置slave访问master的权限,ip 为slave的ip
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'IP' identified by 'slave';   #语法
GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'192.168.1.238' identified by '123456';
flush privilages;  # 刷新权限
  1. 执行成功后,使用 show master status;即可查看二进制日志和偏移量
    在这里插入图片描述
slave
  1. 按照同样的步骤对slave的机器安装mysql,关闭防火墙。
  2. 修改 /etc/my.cnf
server-id=2  # 不要和 master 一样
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
relay_log_recovery=1
  1. 重启登录mysql
  2. 设置主库地址及同步位置
change master to master_host='192.168.1.239',master_user='xiaoming',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=120;
flush privilages;
#参数说明
A. master_host : 主库的IP地址
B. master_user : 访问主库进行主从复制的用户名(上面在主库创建的)
C. master_password : 访问主库进行主从复制的用户名对应的密码
D. master_log_file : 从哪个日志文件开始同步(上述查询master状态中展示的有)
E. master_log_pos : 从指定日志文件的哪个位置开始同步(上述查询master状态中展示的有)
  1. 查看从数据库的状态 show slave status;
    在这里插入图片描述
  2. 当看到两个yes的时候表示主从数据库创建成功
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值