复制的基本原理

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

三步骤+原理图

  1. 原理图

image.png

  1. MySQL复制过程分成三步
  • master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
  • slave将master的binary log events拷贝到它的中继日志(relay log) ;
  • slave重做中继日志中的事件,将改变应用到自己的数据库中。MySQL复制是异步的且串行化的

    复制的基本原则

  1. 每个slave只有一个master
  2. 每个slave只能有一个唯一的服务器ID
  3. 每个master可以有多个salve

    复制的最大问题

    复制的最大问题是延迟

    一主一从常见配置

  4. 主从mysql版本一致且后台以服务运行

image.png

  1. 双方可以ping通

  2. 主从都配置在[mysqld]结点下,都是小写

image.png

主机配置

  1. 主机修改my.ini配置文件

[必须]主服务器唯一ID
server-id=1

[必须]启用二进制日志
log-bin=自己本地的路径/mysqlbin
log-bin=D:/devSoft/MySQLServer5.5/data/mysqlbin 例子

[可选]启用错误日志

log-err=自己本地的路径/mysqlerr
log-err=D:/devSoft/MySQLServer5.5/data/mysqlerr 例子

[可选]根目录
basedir=“自己本地路径”
basedir=“D:/devSoft/MySQLServer5.5/”

[可选]临时目录
tmpdir=“自己本地路径”
tmpdir=“D:/devSoft/MySQLServer5.5/”

[可选]数据目录
datadir=“自己本地路径/Data/”
datadir=“D:/devSoft/MySQLServer5.5/Data/”

主机,读写都可以
read-only=0

[可选]设置不要复制的数据库
binlog-ignore-db=mysql

[可选]设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字

从机配置

从机修改my.cnf配置文件
[必须]从服务器唯一ID server-id=2 例子
[可选]启用二进制日志

重启服务

配置文件,请主机+从机都重启后台mysql服务

  1. service mysql stop
  2. service mysql start

主机从机都关闭防火墙

  1. windows手动关闭
  2. 关闭虚拟机linux防火墙 :service iptables stop

    主机操作

  3. 在主机建立账户并授权给从机让其以用户名:zhangsan和密码:123456登录到主机 ```sql GRANT REPLICATION SLAVE ON . TO ‘docker_mysql5.5’@’192.168.56.10’ IDENTIFIED BY ‘root’;

从机用户名,ip地址,密码

注意是英文的单引号

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1636263777188-46c394cd-ef6c-4288-963a-fef154bd2d92.png#clientId=u22d1739f-ad5e-4&from=paste&height=273&id=u662012e3&margin=%5Bobject%20Object%5D&name=image.png&originHeight=218&originWidth=554&originalType=url&ratio=1&size=49434&status=done&style=none&taskId=ue92da978-5430-4ee1-9584-2a51de610b5&width=693)
  2. 2. 刷新
  3. flush privileges;
  4. 3. 查询master的状态
  5. show master status;<br />记录下FilePosition的值,此值用于从机操作的配置,让其明确复制地址<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1635902525396-dbe04384-fe3a-42d7-90df-b72bcd4f6d5a.png#clientId=u778fc664-39db-4&from=paste&height=122&id=u27d76e70&margin=%5Bobject%20Object%5D&name=image.png&originHeight=162&originWidth=722&originalType=binary&ratio=1&size=39007&status=done&style=none&taskId=ue74e7aef-f486-49e4-bae8-8ea94152f57&width=542)<br />执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
  6. <a name="XLVph"></a>
  7. ## 从机操作
  8. 1. 授权之前要先停止之前的主从复制:stop slave;
  9. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1635902692747-585be17e-e9a6-40f9-bec5-2185d60ff1d2.png#clientId=u778fc664-39db-4&from=paste&height=208&id=BpnHy&margin=%5Bobject%20Object%5D&name=image.png&originHeight=278&originWidth=803&originalType=binary&ratio=1&size=73139&status=done&style=none&taskId=u7ffa8a4f-0c55-4dab-b20b-02eecda3c71&width=602)
  10. 2. Linux从机上配置需要复制的主机
  11. ```sql
  12. CHANGE MASTER TO MASTER_HOST='192.168.171.35', MASTER_USER='root', MASTER_PASSWORD='root', MASTER_LOG_FILE='mysqlbin.000002', MASTER_LOG_POS=534;
  13. 填写主机ip地址,用户名,密码,
  1. 启动从服务器复制功能

start slave;

  1. 查看状态

show slave status\G

下面两个参数都是Yes,则说明主从配置成功!
Slave_IO_Running:Yes
Slave_SQL_Running:Yes

测试实现复制

  1. 主机新建库、新建表、insert记录,

image.png

  1. 从机复制

image.png

[

](https://blog.csdn.net/u011863024/article/details/115470147)