使用场景

  • 主数据库服务器故障后,可切换到从数据库继续工作
  • 不影响主数据库的性能的工作,比如在从数据库作备份、数据统计等工作

常见问题及解决方案

  • 复制延迟
    可以利用同步复制机制(Semi-sync)解决,但是影响性能,当主机写入时,确认更新已经同步到备机之后,再返回写操作成功。
    主从架构是一种高可用的解决方案,并不是处理高并发的,处理高并发可利用redis缓存来解决。

运行原理

从一个mysql instance(master)复制到另一个mysql instance(slave)的过程我们称之为mysql主从复制。在mysql复制的过程中,主要由3个线程完成sql线程和IO线程在slave,另一个IO线程在matser。

mysql复制的基本过程如下:

  1. slave上的IO线程连接master,请求日志文件指定位置或者最开始的位置之后的日志内容
  2. master接收请求,并通过负责复制的IO线程根据请求的信息读取日志文件内容,将日志信息和master端的Binary Log文件的名称以及在Binary Log中的位置返回给slave的IO线程
  3. slaveIO线程接收到信息后,将日志内容写到Relay Log文件最末尾,并将master端的bin-log的文件名和位置记录到master-info文件中。下次请求时可告知master需要请求的位置
  4. slave的sql线程检测到Relay Log文件新增后,执行此日志文件的sql语句

实施环境

系统环境:centos7
 MySQL版本:5.7.17
 主服务器(master)IP:192.168.20.101
 从服务器(slave)IP:192.168.20.99

配置

  • 配置master服务器
[root] # vim /etc/my.cnf

修改如下内容:

server-id=101 #设置服务器唯一的id,默认是1
log-bin=mysql-bin #启用二进制日志

  • 配置slave服务器
[root] # vim /etc/my.cnf

修改如下内容:

server-id=99 #设置服务器唯一的id,默认是1
replicate-do-db=cto #只同步cto库
slave-skip-errors=all #忽略因复制出现的所有错误

  • 重启主从mysql服务
[root] # service mysqld restart
  • 在master上给slave授权
[root] # >grant replication slave on *.* to slave@192.168.20.99 identified by "123456789";

mysql主从复制的实现 mysql主从复制原理详解_mysql主从复制的实现

  • 查看master上数据库状态
[root] # >show master status;

mysql主从复制的实现 mysql主从复制原理详解_mysql_02

  • 在slave执行sql语句的同步
[root] # >change master to master_host='192.168.20.101', master_user='slave', master_password=rd='123456789', master_log_file='mysql-bin.000001', master_log_pos=442;

mysql主从复制的实现 mysql主从复制原理详解_服务器_03

  • 开启salve同步
[root] # >start slave;

mysql主从复制的实现 mysql主从复制原理详解_mysql_04

  • 查看slave同步状态
[root] # >show slave status \G;

mysql主从复制的实现 mysql主从复制原理详解_mysql主从复制的实现_05

  • 检验
    主(master)

    从(slave)


转载于:https://blog.51cto.com/13660331/2096740