mysql主从复制

作者: yufw | 来源:发表于2020-04-10 17:08 被阅读0次

    搭建

    准备至少两台mysql 服务

    此处使用docker 一个镜像 启动了两个 容器
    

    详见https://www.jianshu.com/p/8a8fc0983b14

    配置mysql配置文件

    • 主:
    添加
    # 服务的唯一编号
    server-id = 1
    
    # 开启mysql binlog功能
    log-bin = mysql-bin
    
    • 从:
    添加
    # 服务的唯一编号
    server-id = 2
    ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
    log-bin=mysql-slave-bin   
    ## relay_log配置中继日志
    relay_log=edu-mysql-relay-bin  
    
    • 配置完成后 重启服务

    在主服务器执行sql

    # 创建一个专门为复制服务的用户。
    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    # 分配权限
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    > 8.0以后必须 分开执行
    flush privileges;
    

    查看主服务状态

    FLUSH TABLES WITH READ LOCK;
    
    show master status;
    
    FILE                POSITION 
    mysql-bin.000003    908          "" ""  ""
    
    

    设置连接主服务器的信息(从服务器中)

    如果使用默认的插件:caching_sha2_password
    change master to
        master_host ='172.17.0.2',
        master_user ='slave',
        master_password ='123456',
        master_port =3306,
        master_log_file ='mysql-bin.000003',
        master_log_pos = 908,
        MASTER_SSL=1,
        master_connect_retry =30;
        
    如果使用MySQL5.7 的插件:mysql_native_password
    CHANGE MASTER TO
    MASTER_HOST='172.17.0.2',
    MASTER_USER='slave',
    MASTER_PASSWORD='12345678',
    MASTER_LOG_FILE='mysql-log-bin.000009',
    MASTER_LOG_POS=1302;
    
    》 master_port 为 主服务 position
    》 master_log_file 对应主服务 file
    
    如果使用(8.0+)默认的插件:caching_sha2_password
    必须有 MASTER_SSL=1;
    
    我们也可以使用MySQL5.7 的默认身份认证插件:mysql_native_password
    
    指定插件即可:
    
    CREATE USER 'my_slave'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';
    ALTER USER 'my_slave'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';
    
    命令说明:
    master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip
    master_port:Master的端口号,指的是容器的端口号
    
    master_user:用于数据同步的用户
    
    master_password:用于同步的用户的密码
    
    master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
    
    master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
    
    master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
    
    

    启动slave线程

    mysql> start slave;
    
    

    检查

    mysql> show slave status
    

    以下两项都为yes 即为成功

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    

    FAQ
    Q:

    Slave_IO_Running: connecting
    或
    Slave_IO_Running: no
    

    A:

    1. 首先查看 错误日志
    show slave status 中有错误日志
    
    2. 常见出问题可能
        检查防火墙
        
        查看主从服务器 server_id 是否一致
        
        检查position 和 file 是否一致
        
        使用的password插件和设置连接主服务的 配置 不一致
    

    相关文章

      网友评论

        本文标题:mysql主从复制

        本文链接:https://www.haomeiwen.com/subject/ggxdmhtx.html