• 认真研究MySQL主从复制


    这里的配置指的是MySQL的my.cnf文件[mysqld]下进行配置。环境是Centos7.9+MySQL8.0,可以参考博文Centos7下使用RPM包安装MySQL8

    如果是在虚拟机上操作并且是克隆方式生成的虚拟机(包含MySQL Server),则克隆的虚拟机MySQL Server的UUID相同,这是需要修改的。

    vim /var/lib/mysql/auto.cnf
    
    systemctl restart mysqld
    
    • 1
    • 2
    • 3

    【1】 主MySQL配置

    建议MySQL版本一致且后台以服务运行,主从所有配置项都配置在[mysqld]节点下,且都是小写字母。

    ① 必选

    主服务器唯一ID

    # 主服务器唯一ID
    server-id=1
    
    #启用二进制日志,指明路径 log-bin=自己本地路径/mysqlbin
    log-bin=mysqlbin
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ② 可选

    # 0 默认 表示读写,1 表示只读
    read-only=0
    
    #设置日志文件保留的时长 单位是秒
    binlog_expire_logs_seconds=6000000
    
    # 控制单个二进制日志大小,此参数的最大和默认值是1GB
    max_binlog_size=200M
    
    # 设置不要复制的数据库
    binlog-ignore-db=test
    
    # 设置需要复制的数据库,如果不设置,则默认同步除忽略的之外的数据库
    binlog-do-db=需要复制的主数据库名字
    
    #设置binlog格式
    binlog_format=STATEMENT
    
    # --------其他亦可自行配置,比如数据目录--------
    #错误日志
    log-err=自己本地路径/mysqlerr
    #根目录
    basedir="自己本地路径"
    # 临时目录
    tmpdir="自己本地路径"
    # 数据目录
    datadir="自己本地路径/Data/"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    重启后台MySQL服务,使配置生效。需要注意的是,建议先搭建主从配置,再创建数据库。MySQL主从复制起始时,从机不继承主机数据。

    【2】从服务器配置

    主要是从服务器唯一ID与二进制日志文件配置。

    #[必选]
    server-id=2
    
    #[可选]如果默认已经配置,无需更改
    log-bin=mysqlbin
    
    #[可选] 启用中继日志
    relay-log=mysql-relay
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    修改完配置需要重启MySQL服务。

    【3】开启复制

    ① 主MySQL上建立账户并授权

    在master上建立账户并授权给slave。

    grant replication slave on *.* to 'slave1'@'从机数据库IP' identified by '123456'; # 5.5 ,5.7
    
    flush privileges;
    
    • 1
    • 2
    • 3

    如果使用的MySQL8.0,需要如下的方式建立账户并授权salve。

    #创建用户
    create user 'slave1'@'%' identified by '123456';
    
    #授予复制权限
    grant replication slave on *.* to 'slave1'@'%';
    
    #重置密码哦,必须执行
    alter user 'slave1'@'%' identified with mysql_native_password by '123456';
    
    #刷新权限
    flush privileges;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    查询master状态,并记录下file和position的值

    show master status
    
    mysql> show master status;
    +-----------------+----------+--------------+------------------+-------------------+
    | File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +-----------------+----------+--------------+------------------+-------------------+
    | mysqlbin.000001 |     1164 |              |                  |                   |
    +-----------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    到这里暂时不要操作master,防止状态值变化,接下来设置slave。

    ② 从机配置需要复制的主机

    从机上复制主机的命令:

    change master to 
    master_host='主机IP',
    master_user='主机用户名',
    master_password='主机用户密码',
    master_log_file='mysqlbin.具体数字',
    master_log_pos=position数字;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    举例:

    change master to master_host='192.168.255.128',master_user='slave1',master_password='123456',
    master_log_file='mysqlbin.000001',master_log_pos=1164;
    
    • 1
    • 2

    启动slave同步

    start slave;
    
    • 1

    如果报错如下:
    在这里插入图片描述
    可以执行如下操作,删除之前的relay_log信息。然后重新执行change master to ...语句即可。

    reset slave ; #删除slave数据库的relaylog日志文件,并重新启用新的relaylog文件
    
    • 1

    查看slave状态

    show slave status
    
    • 1

    如果下面两个参数都是yes,则说明主从复制成功。

    Slave_IO_Running:Yes
    Slave_SQL_Running:Yes
    
    • 1
    • 2

    在这里插入图片描述

    停止从复制功能

    stop slave
    
    • 1

    重新配置主从,需要在从机上执行:

    stop slave;
    
    reset master;#删除master中所有的binlog文件,并将日志索引文件清空,重新开始所有新的日志文件--慎用!!
    
    • 1
    • 2
    • 3
  • 相关阅读:
    基于Java Web的汽车租赁系统的设计与实现
    C/C++数据结构——QQ帐户的申请与登陆(散列表)
    mongo基础操作总结
    仔细解读Linux中的“引导过程与服务内容”
    垃圾判断算法与4大引用
    指令格式学习
    d3dcompiler_47.dll缺失怎么修复,d3dcompiler_47.dll的作用有哪些
    Docker挂载镜像到本地(日常记录)
    【云原生】docker容器引擎
    利用TreeMap来达成离散化的目的
  • 原文地址:https://blog.csdn.net/J080624/article/details/126872402