MYSQL的主从复制


1. 基本原理

MySQL的复制是异步的、串行化的

2. 执行步骤

  1. 主机(master) 将改变记录到二进制日志(binary log,简称binlog)。这些记录过程叫二进制日志事件;
  2. 从机(slave)从主机(master)读取binlog,并拷贝到中继日志(relay log)
  3. 从机(slave)重做中继日志的事件,将改变应用到自己的数据库中
  • 复制的原则
    • MySQL的复制是异步的、串行化的
    • 主机只能有一台,从机可以多台
    • 每一个从机只能有一个唯一的服务器ID
    • 从机从接入点开始复制,不会从头复制
  • 最大的问题:延时(毫秒),即主从数据读取的延时

3. 主从机的配置

  1. 主从机的MySQL版本保持一致,后台以服务运行
  2. 主从配置在mysql节点下,都是小写
  3. 修改my.ini(主机)配置文件
    • 注意:配置前,最好先提前备份my.ini文件,便于恢复

1.主服务器id(必须)

   # 服务器id
   server id 1

2.启用二进制日志(必须)

  • 建议:创建一个新的目录,最好别和mysql混在一起
   log-bin=(自己本地的路径)/data/mysqlbin
   # 例如
   log-bin=D:/devSoft/MySQL5.5/data/mysqlbin

3.启用错误日志(可选)

   #错误日志配置
   log-err=(自己本地的路径)/data/mysqlerr

4.根目录(可选)

   #根目录
   basedir="自己本地的路径"

5.临时目录(可选)

   #临时目录
   tmpdir="自己本地的路径"

6.数据目录(可选)

   #数据目录
   datadir="自己本地的路径/Data/"

7.设置只读(可选)

   #设置只读
   read-only=0

8.设置不要复制的数据库(可选)

   #设置不要复制的数据库
   binlog-ignore-db=mysql

9.设置需要复制的数据库(可选)

  • 注意:这里这个数据库先不要创建,先写上名字,等到主从库都搭建完毕后,再创建
   #设置需要复制的数据库
   binlog-do-db=(需要复制的主数据库名)

10.设置binlog格式

   #设置binlog格式
   binlog_formal=STATEMENT(默认)
  • 补充:
    • STATEMENT:会在日志文件中记录所有的写操作SQl,如果语句有函数,如now(),输出当前时间,由于延时关系,会造成主从复制不一致,难以解决
    • ROW:在日志中记录每一行的改变,虽然解决主从复制不一致,但是对表中大部分数据进行更新时,效率太低
    • MIXED:判断SQL语句中有没有函数,如果没有函数,就是用STATEMENT格式,若有函数,就是用ROW格式,但是只要出现系统变量,会出现主从复制不一致

4. 修改(从机)配置文件

  1. 从服务器唯一id(必须)
    #从服务器唯一id
    server-id=2
    
  2. 启用二进制日志(可选)

5. 重启主从机的MySQL服务

  • 注意:如果重启时一直显示“正在启动”,表示配置文件配置错误,使用备份恢复,重新配置

6. 主从机都关闭防火墙

  1. Windows手动关闭
  2. Linux虚拟机:service iptables stop 或者 systemctl stop firewalld

7. 在主机上建立账户并授权slave

  1. 给从机授权、名字、密码
# 从机数据库ip 可以直接写 % ,表示所有远程用户
GRANT REPLICATION SLAVE ON *.* TO 'slave200806'@'从机数据库ip【%】' IDENTIFIED BY '123456';

2.订阅

Subtopic;

3.刷新

flush privileges;

4.查询主机状态

show master status;

)

  • 记录下File和Position的值

8. 在Linux从机配置需要复制的主机

1.给从机 授权、名字、密码

#注意:主机地址要和从机地址在一个网段,即前三个字段要一样,第四个字段为 1
CHANGE MASTER TO MASTER_HOST='主机 IP',

MASTER_USER='slave200806',

MASTER_PASSWORD='123456',

MASTER_LOG_FILE='前面要记住的 File值',MASTER_LOG_POS=前面要记住的 Position值;

2.启动从服务器复制功能

start slave;

3.查看配置结果

show slave status\G;
  • 如果以下两项为Yes表示配置成功
    • Slave_IO_Running
    • Slave_SQL_Running

)

9. 主机新建库、新建表、插入数据,从机复制

10. 停止从服务复制功能

stop slave;

11. 重新配置主从机设置

reset master;
  • 注意:重新配置需要
    • 先停止服务
    • 重新配置,即stop slave;-> reset master;
    • 然后回到“从机配置”第一步

12. 如果配置失败

  1. 检查有没有关闭防火墙
  2. 检查主机状态中的File与Position字段的值有没有变化



Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • 2379. Minimum Recolors to Get K Consecutive Black Blocks
  • 2471. Minimum Number of Operations to Sort a Binary Tree by Level
  • 1387. Sort Integers by The Power Value
  • 2090. K Radius Subarray Averages
  • 2545. Sort the Students by Their Kth Score