1.首先需要注意的事项

  • 注意防火墙,需要关闭对mysql(3306)端口的保护
  • mysql的主从复制并不会像redis的主从复制一下从头复制,它只会从接入点开始算
  • 如果说是克隆的虚拟机,请修改mysql的uuid


2.搭建一主一从

一个主机用于负责所有读请求,一个主机用于所有写请求

2.1架构图

image.png

2.2 主从复制原理

mysql开启主从复制后,从库会通过网络io获取主库的Binarylog日志,Binarylog日志包含了主库的所有的写请求的操作记录,读取日志后,从库并不会马上的写入数据同步到从库数据库中,而是先写入Relaylog日志文件中,在同步数据。

原理图

image.png

2.3 binlog日志三种格式

mysql的binlog日志分为STATEMENT、ROW、MINED
  1. STATEMENT模式:基于sql语句的复制,每一行会修改数据的sql语句将会被记录

优点:它的优点在于不需要记录每一条sql语句与每行的数据变化,这样子binlog日志也会比较少,减少了磁盘io,提高了性能。
缺点:可能导致数据不一样的情况,比如使用now等函数

  1. ROW模式:基于行的复制,不记录每一条sql语句的上下文信息,仅需记录那些语句被修改了。

优点:不会出现某些情况下特定函数导致的数据不一致问题
缺点:在进行alter table语句时,会产生大量的日志

  1. MINED模式:混合模式,也就是STATEMENT和ROW两种模式的结合模式,一般使用STATEMENT来保存日志,如果碰到STATEMENT处理不了了的则使用ROW保存

    2.3 主机配置

    修改配置文件:/etc/my.conf

  1. #主服务器唯一ID
  2. server-id=1
  3. #启用二进制日志
  4. log-bin=mysql-bin
  5. # 设置不要复制的数据库(可设置多个)
  6. binlog-ignore-db=mysql
  7. binlog-ignore-db=information_schema
  8. #设置需要复制的数据库
  9. binlog-do-db=需要复制的主数据库名字
  10. #设置logbin格式
  11. binlog_format=STATEMENT

2.4 从机配置

修改配置文件: /etc/my.conf

  1. #从服务器唯一ID
  2. server-id=2
  3. #启用中继日志
  4. relay-log=mysql-relay

2.5 修改完配置后需要做的事情

  1. 重启mysql服务
  2. 关闭防火墙

    2.6 在主库数据库中建立复制账号并且查看从机数据库相关配置

    2.6.1 建立账号
  • mysql 6.x

    1. GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
  • mysql 8.x


  • 2.6.2 查看配置

    使用 show master status命令,需要记录File和Position字段,后面会用到

image.png

2.7 在从机配置需要复制的主机

2.7.1 配置命令(需要配置ip地址和具体指)
  1. CHANGE MASTER TO MASTER_HOST='主机的IP地址',
  2. MASTER_USER='slave',
  3. MASTER_PASSWORD='123123',
  4. MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;

image.png

2.7.2 配置完成后,开启复制功能并查看服务器状态
  • 使用start slave命令开启复制功能
  • 使用show slave status\G以行的方式查看服务器状态,确保SLAVE_IO_Running和Slave_SQL_Running为yes状态

image.png

3 失败解决

3.1 失败原因1,可能是曾经搭建过主从复制,需要重置
  • stop slave:停止复制
  • reset master:重置master
    3.2 失败原因2,可能是mysql的uuid相同,导致冲突
  1. 使用show variables like ‘datadir’命令查看当前mysql的安装目录

image.png

  1. 然后通过select uuid()生成一串uuid

image.png

  1. 到对应目录下的auto.cnf文件更改uuid

    3.3 失败原因3,未知原因,查看mysql日志
  2. 查看/etc/my.conf配置文件群钊mysql日志路径

image.png