• MySQL主从复制搭建详解


    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 chaodev 即可关注。

    主从复制可以对数据备份,实现高可用,主服务器挂了,从服务器还可以使用。通过读写分离,提高数据库负载。
    但是不建议有太多的从节点,因为所有从节点都需要同步主节点的数据,如果数据太多就会造成延时问题,也就引发了数据的一致性问题。


    1、实现原理

    MySQL主从复制主要依靠二进制日志文件来实现,将主数据库中的DDL和DML操作通过二进制日志(BINLOG)传输到从数据库上,然后将这些日志重新执行(重做)。从而使得从数据库的数据与主数据库保持一致。

    这个过程涉及到三个线程,一个运行在主节点(log dump thread),其余两个(I/O thread,SQL thread)运行在从节点。
    在这里插入图片描述

    具体步骤如下:

    (1)主服务器会将写操作,写入自己的二进制日志文件中。
    (2)从服务器的IO线程会连接mysql主服务器,请求读取主服务器的二进制日志指定内容。
    (3)主服务器的IO线程将二进制内容读取到,复制给mysql从服务器的IO线程。
    (4)从服务器的IO线程将收到的日志,写入自己的中继日志中。
    (5)从服务器的SQL线程执行中继日志的mysql语句。


    2、实现步骤

    我这里就演示一主一从的配置过程,先准备两台服务器,都安装上mysql,如下:

    节点ip数据库角色
    节点1192.168.157.130Mysql主服务器
    节点2192.168.157.139Mysql从服务器
    2.1 主服务器配置

    主节点需要做的工作就是创建用户并赋予权限,然后开启binlog日志。

    首先创建给从服务器登录用的账号和密码,如下

    create user 'slave_user139'@'192.168.157.139' identified by '123456';
    
    • 1

    在这里插入图片描述

    赋予权限

    grant replication slave on *.* to 'slave_user139'@'192.168.157.139' identified by '123456';
    
    • 1

    在这里插入图片描述

    修改mysql配置文件

    vi /etc/my.cnf
    
    • 1
    log-bin=master-a-bin #日志文件名称
    binlog-format=ROW #二进制日志格式,有row,statement,mixed三种类型,主从要一致
    server-id=1 #要求各个服务器的这个id必须不一样
    binlog-do-db=db_test #同步的数据库名称
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述


    2.2 从服务器配置

    从服务器需要做的工作就是配置同步日志,指定主节点的ip,端口,用户,密码等,然后启动从节点。

    首先同样修改配置文件

    vi /etc/my.cnf
    
    • 1
    log-bin=slave-a-bin
    binlog-format=ROW
    server-id=2
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    重启从服务器mysql

    service mysqld restart
    
    • 1

    首先在主服务器查看主服务器状态信息,后面会用到。

    show master status;
    
    • 1

    在这里插入图片描述

    指定主服务器信息

    change master to master_host='192.168.157.130',master_user='slave_user139',master_password='123456',master_log_file='master-a-bin.000001',master_log_pos=120;
    
    • 1

    在这里插入图片描述

    master_host 是主节点ip,master_user 和 master_password 是主节点创建给从节点的账号和密码,master_log_file 和master_log_pos 根据上一步查询出来的File和Position值自行更换。

    启动从节点

    start slave;
    
    • 1

    在这里插入图片描述

    查看从节点状态

    show slave status \G;
    
    • 1

    在这里插入图片描述

    判断是否成功主要看 Slave_IO_Running 和 Slave_SQL_Running 是否都为YES。

    注:正常情况都会为YES,可以看到我这里Slave_IO_Running为No,原因是由于我的从节点是虚拟机克隆出来的,uuid会重复,修改uuid不一致即可。

    解决办法:
    首先安装目录auto.cnf文件里对比server-uuid 是否一样,如果一样修改了不一样就行,或者删了文件重启mysql服务。

    cat /var/lib/mysql/auto.cnf
    
    • 1

    在这里插入图片描述
    在这里插入图片描述
    果然一毛一样。将其中一个修改成不一样的值,重启mysql服务即可,如下,都为YES
    在这里插入图片描述


    2.3 同步测试

    在主节点创建数据库,名称为配置文件里需要同步的数据库名称,例如

    create database db_test;
    
    • 1

    在这里插入图片描述

    查看从节点,已经同步
    在这里插入图片描述

    再创建一个表
    在这里插入图片描述

    可以看到,从节点也已经同步。

    在这里插入图片描述

    主节点插入数据
    在这里插入图片描述

    从节点也已经同步
    在这里插入图片描述



    更多技术干货,请持续关注程序员大佬超。
    原创不易,转载请注明出处。

  • 相关阅读:
    北京陪诊小程序|陪诊系统开发|陪诊小程序未来发展不可小觑
    每天一道算法题:216. 组合总和 III
    000-基于Sklearn的机器学习入门:工作环境搭建与配置
    程序员的精力管理
    抗击.Elbie勒索病毒:如何应对.Elbie病毒威胁,保卫您的数据
    一次不完整的渗透
    UnityShader入门精要——表面着色器
    飞阳物联平台,智能开关2.0版本支持凌动开关
    四个offer,选择去外包?
    Linux 生成复杂密码并且检查密码强度
  • 原文地址:https://blog.csdn.net/xch_yang/article/details/126308347