MySQL主从复制

目录

主从复制

原理介绍

主从复制模式:

配置命令

条件:master和slave机器的信息

master配置:

slave配置:

Error问题:

开启centos防火墙3306端口


在实际生产环境中,若对MySQL数据库的读和写都在一台数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是不满足实际需求的,一般要通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。

<1>数据备份:当系统中某个节点发生故障时,可以方便故障切换

<2>读写分离:在开发过程中,若遇到某个sql语句需要锁表,导致暂时不能使用读的服务,使用主从复制,让主数据库负责写,从数据库负责读,即使主库出现锁表的情景,也可以通过从库正常读数据

<3>支持更大的并发:随着系统中业务访问量的增加,若是单机部署数据,会导致I/O访问频率过高。通过主从复制,增加多个数据存储结点,将负载分布在多个从节点上,降低单机的I/O访问频率,提高单机的I/O性能

主从复制

主从复制的流程:binlog二进制日志和三个线程(master的一个主线程和slave的二个线程)
一个运行在主节点:binary log dump thread
两个运行在从节点:I/O thread、SQL thread

原理介绍

 <1> 主库的更新操作写入binlog二进制日志中
<2> master服务器创建一个binlog转储线程,将二进制日志内容发送到从服务器
<3> slave机器执行START SLAVE命令会在从服务器创建一个I/O线程,接收master的binary log复制到其中继日志(relay log)。
        首先slave开始一个工作线程(I/O线程),I/O线程在master上打开一个普通的连接,然后开始binlog dump process,binlog dump process从master的二进制日志中读取事件,若已经跟上master,它会睡眠并等待master产生新的事件,I/O线程将这些事件写入中继日志(relay log)。
<4> sql slave thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志中读取事件,并重放其中的事件而更新slave机器的数据,使其与master的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于os缓存中,所以中继日志的开销很小。

主从复制模式:

1、异步模式
2、半同步模式
3、全同步模式
4、GTID复制模式

配置命令

条件:master和slave机器的信息

master(centos7):ifconfig
slave(win10):ipconfig
互ping一下保证master和slave之间的网络互通,并且保证3306端口是放开的

master配置:

<1>开启二进制日志:配置log_bin和全局唯一的server-id
<2>创建一个用于主从库通信用的账号

create user 'mslave'@'192.168.131.1' identified by 'lqaz@wsx';
grant replication slave on *.* to 'mslave'@'192.168.131.1' identified by 'lqaz@wsx';
flush privileges;

<3>获取binlog的日志文件名和position

show master status;

slave配置:

<1>配置全局唯一的server-id(在windows涉及修改配置文件,需要重启mysql57服务)
<2>使用master创建的账户读取binlog同步数据

change master to master_host='192.168.131.129',
master_port=3306,
master_user='mslave',
master_password='lqaz@wsx',
master_log_file='mysql-bin.000006',
master_log_pos=1106;

注:更新配置:需先stop slave,重新配置,然后start slave重启从线程

<3>通过show slave status命令查看主从复制状态
或通过show processlist查看master和salve相关线程的运行态

Error问题:

error 1045:connecting to master 'mslave'@'192.168.131.129:3306' -retry-time:60 retrises:1
若配置NET模式的虚拟机,会由NET提供一个ip
<1>网络是否互通?:ping
<2>主库所在机器的3306端口是否正常? telnet xxx.xxx.xxx.xxx 3306 是否对端口有限制
<3>查看主库的错误日志:/var/log/mysql/mysqld.log

error 1032:handler error HA_ERR_KEY_NOT_FOUND;the event's master log mysql-bin.000005,end_log_pos 1235
检查一下binlog和position是否配置正确!!!

开启centos防火墙3306端口

centos7防火墙配置不再是iptables了,配置如下:

#检查防火墙状态
systemctl stauts firewalld.service
#开启防火墙
systemctl start firewalld.service
#关闭防火墙
systemctl stop firewalld.service
#使能防火墙状态
systemctl enable firewalld.service
#不使能防火墙状态
systemctl disable firewalld.service
#开放3306端口
firewalld-cmd --zone=public --add-port=3306/tcp --permanent
#重启防火墙
firewall-cmd --reload
#查看当前开放的端口列表
firewall-cmd --list-ports
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值