MySQL主从复制

114 阅读2分钟

介绍

MySQL主从复制是一个异步的复制过程,底层是基于MySQL数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带的功能,无需借助第三方工具。

MySQL复制过程分成三步:

  1. master将改变记录到二进制日志(binary log)
  2. slave将master的binary log拷贝到它的中继日志(relay log)
  3. slave重做中继日志中的事件,将改变应用到自己的数据库中

snipaste_20220530_122247.png

总的来说,和小学生抄作业是一样的。

提前准备好两台服务器,分别安装MySQL并启动服务成功

  • 主库master:192.168.74.129

  • 从库slave:192.168.74.130

配置主库master

  1. 修改mysql数据库的配置文件/etc/my.cnf

    [mysqld]
    log-bin=mysql-bin      #启用二进制日志
    server-id=100          #服务器唯一ID
    
  2. 重启mysql服务

    systemctl restart mysqld

  3. 登录mysql数据库,执行下面的sql

    grant replication slave on *.* to 'xiaoming' identified by '123456';

    注:上面sql的作用是创建一个用户xiaoming,密码为123456,并且给xiaoming用户授予replication slave权限。常用于复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。

    可以理解为xiaoming想抄master的作业,必须得到master的同意(权限)。

  4. 登录mysql数据库,执行下面的sql,记录下结果中FilePosition的值

    show master status;

    snipaste_20220530_122247.png 注:上面sql的作用时查看master的状态,执行完此sql后不要再执行任何操作。

    至此,主库master配置完成。

配置从库slave

  1. 修改mysql数据库的配置文件/etc/my.cnf

    [mysqld]
    server-id=101          #服务器唯一ID
    
  2. 重启mysql服务

    systemctl restart mysqld

  3. 登录mysql数据库,执行下面的sql

    change master to master_host='192.168.74.129',master_user='xiaoming',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=1073;

    start slave;

  4. 登录mysql数据库,执行下面sql,查看从数据库状态

    show slave status\G;

    snipaste_20220530_122247.png

测试

使用Navicat登录以上两个数据库。在主库master:192.168.74.129中新建一个数据库test, 然后刷新从库slave:192.168.74.130,可以发现从库中也会执行相同的操作。