六、主从复制

637 阅读3分钟

1. 简述

1.1. 复制的基本原理

slave 从 master 读取 binlog 文件来进行数据同步

image-20210706160047334

【基本步骤】

① master 将改变记录到二进制文件(binary log)这些记录过程叫做二进制日志事件(binary log events)

② slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)

③ slave 重做中继日志中的事件,将改变应用到自己的数据库中。MySQL 复制是异步且串行化的。

1.2. 复制基本原则

① 每个 slave 只有一个 master

② 每个 slave 只能有唯一的服务器 ID

③ 每个 master 可以有多个 salve

1.3. 复制的最大问题

发生多次 IO 可能存在延时问题。

2. 一主一从常见配置

配置前请保证主机和从机在同一局域网内,能够相互 ping 通。

【配置步骤】

① 主机和从机的 MySQL 版本保持一致;

② 主机和从机的配置都在 [mysqld] 节点下;

③ 主机修改配置文件

  • 【必须】主服务器ID唯一:server-id = 1
  • 【必须】启用二进制文件:log-bin=配置路径/mysqlbin ,例:D:/mysql/mysql5.5/data/mysqlbin
  • 【可选】启动错误日志:log-err=配置路径/mysqlerr,例:D:/mysql/mysql5.5/data/mysqlbin
  • 【可选】配置根目录:basedir="自己的本地路径",例:basedir="D:/mysql/mysql5.5"
  • 【可选】配置临时目录:tmpdir="自己本地路径",例:tmpdir="D:/mysql/mysql5.5"
  • 【可选】配置数据目录:datadir="自己本地目录/Data",例:datadir="D:/mysql/mysql5.5/Data"
  • read-only=0:主机读写都可以
  • 【可选】配置不需要复制的数据库:binlog-ignore-db="xxx",例:binlog-ignore-db="mysql"
  • 【可选】配置需要复制的数据库:binlog-do-db="xxx",例:binlog-do-db="mysql_test"

④ 从机修改配置文件

  • 【必须】从机服务器ID唯一:server-id=3
  • 【可选】启动二进制文件

⑤ 主机和从机修改配置文件后重启后台 MySQL 服务;

⑥ 主机和从机全部关闭防火墙;

  • Linux 关闭防火墙命令:service iptables stop

⑦ 在主机上建立账户并授权 slave;

  • 创建账号命令:GRANT REPLICATION SALVE ON *.* TO '备份账号'@'从机器数据库 IP'IDENTIFIED BY '密码'
  • 查询 master 状态,并记录下 File 和 Position 的值。show master state;,执行完成命令后不要再操作主服务器 MySQL,防止主服务器状态值变化。

⑧ 在从机上配置需要复制的主机

  • 从服务器配置 master 命令:CHANGE MASTER TO MASTER_HOST='主机IP',MASTER_USER='创建用户名',MASTER_PASSWORD='创建的密码',MASTER_LOG_FILE='主机FILE名',MASTER_LOG_POS=主机post数字
  • 启动从服务器复制功能:start salve;
  • 查看启动后的参数情况:show salve status\G;,当 Slave_IO_Running:YESSlave_SQL_Running:YES 两个参数均为 YES 时说明主从配置成功。

【注意】

  • Slave_IO_RunningSlave_SQL_Running 两个参数不全是 YES 时说明主从配置可能存在问题,会导致同步复制失败。
  • 若主从连接配置出现问题,重新配置时需要填入重新查询后新的主机 FILE 名和post数字

⑨ 检验主机新建数据库、数据表、插入记录、从机是否复制;

⑩ 停止从机复制

  • 停止复制命令:stop salve