MySQL:MySQL的集群——主从复制的原理和配置

前言

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

1、数据备份 - 热备份&容灾&高可用
2、读写分离,支持更大的并发

文章目录

  • 前言
  • 原理介绍
  • 问题
  • 配置
  • 常见错误

原理介绍

MySQL:MySQL的集群——主从复制的原理和配置_第1张图片

主从复制的流程:两个日志(binlog二进制日志&relay log日志)和三个线程(master的一个线程和
slave的二个线程)

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

问题

为什么不用I/O线程直接从主库的bin-log里读数据写入从库中,而是写入中继日志?

因为主库的bin-log内容可能很多,而一个I/O线程读取的缓慢,导致从库更新数据可能会和主库的内容差距越来越大,数据落后。

配置

master(centos7):192.168.131.129
slave(win10):192.168.0.6
保证master和slave之间的网络互通,并且保证3306端口是开放的。

master配置:
1、开启二进制日志 , 目录:/etc/my.cnf
配置log_bin和全局唯一的server-id。

MySQL:MySQL的集群——主从复制的原理和配置_第2张图片

2、创建一个用于主从库通信用的账号

mysql> CREATE USER ‘mslave’@‘192.168.131.1’ IDENTIFIED BY ‘1qaz@WSX’;
mysql> GRANT REPLICATION SLAVE ON . to ‘mslave’@‘192.168.131.1’ IDENTIFIED BY ‘1qaz@WSX’;
mysql> FLUSH PRIVILEGES;

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

mysql> show master status;

slave配置:
1、配置全局唯一的server-id(涉及修改配置文件,需要重启mysql57服务)
MySQL:MySQL的集群——主从复制的原理和配置_第3张图片

MySQL:MySQL的集群——主从复制的原理和配置_第4张图片
MySQL:MySQL的集群——主从复制的原理和配置_第5张图片

2、使用master创建的账户读取binlog同步数据(stop slave;start slave)

根据自己情况调整参数
MySQL:MySQL的集群——主从复制的原理和配置_第6张图片

示例,个人的主库bin-log到哪了就配置哪个
MySQL:MySQL的集群——主从复制的原理和配置_第7张图片

3、START SLAVE
通过show slave status命令查看主从复制状态。show processlist查看master和salve相关线程的运行
状态。

MySQL:MySQL的集群——主从复制的原理和配置_第8张图片

常见错误

  1. IO_ERROR

MySQL:MySQL的集群——主从复制的原理和配置_第9张图片

解决方案:

  1. 先使用ping命令查看网络通不通?
  2. 主库所在机器的3306端口是否正常? telnet xxx.xxx.xxx.xxx 3306
  3. 防火墙对端口有限制?
  4. 查看主库的错误日志 /var/log/mysql/mysqld.log

2.Last_Error
MySQL:MySQL的集群——主从复制的原理和配置_第10张图片

解决:查看配置信息是否写错,然后重启slave线程
MySQL:MySQL的集群——主从复制的原理和配置_第11张图片
MySQL:MySQL的集群——主从复制的原理和配置_第12张图片

3.SQL_Error

MySQL:MySQL的集群——主从复制的原理和配置_第13张图片

错误原因:

从库还没有同步mytest这个库,但主库使用了 drop database mytest的SQL,那么这条SQL会写到bin-log日志,然后I/O线程读到这个SQL,写入中继日志,从库从中继日志读到了这个SQL,执行后产生的错误。

解决:

可以先停止slave线程,跳过一个错误,然后重启slave

stop slave;
set global sql_slave_skip_counter = 1;
start slave;

你可能感兴趣的:(MySQL,mysql,数据库,服务器,sql,学习)