zoukankan      html  css  js  c++  java
  • Docker 中搭建 MySQL 主从复制

    说明

    MySQL 版本 5.7

    搭建一主二从架构

    启动三个 MySQL5 容器

    docker run -d 
     --name=mysql5-3317 
     -p 3317:3306 
     -e MYSQL_ROOT_PASSWORD=poterliu 
     -h mysql5-3317 
     --net=mysql5 
     mysql:5.7
    
    
    docker run -d 
     --name=mysql5-3318 
     -p 3318:3306 
     -e MYSQL_ROOT_PASSWORD=poterliu 
     -h mysql5-3318 
     --net=mysql5 
     mysql:5.7
     
    docker run -d 
     --name=mysql5-3319 
     -p 3319:3306 
     -e MYSQL_ROOT_PASSWORD=poterliu 
     -h mysql5-3319 
     --net=mysql5 
     mysql:5.7
    

    修改配置文件 my.conf

    可能在以下两个目录中:/etc/my.cnf 或 /etc/mysql/my.cnf文件

    master

    [mysqld]下面增加几行配置:
    
    [mysqld]
    log-bin=/var/lib/mysql/mysql-bin
    binlog-format=ROW
    server_id=1
    

    slave

    [mysqld]下面增加几行配置:
    
    [mysqld]
    log-bin=/var/lib/mysql/mysql-bin
    binlog-format=ROW
    server_id=2
    
    [mysqld]下面增加几行配置:
    
    [mysqld]
    log-bin=/var/lib/mysql/mysql-bin
    binlog-format=ROW
    server_id=3
    

    重启 docker 容器!

    master

    CREATE USER 'repl'@'172.22.0.*' IDENTIFIED BY 'poterliu';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.22.0.*';
    FLUSH PRIVILEGES;
    

    将 repl 的 host 手动修改为 % 才能在 slave 连接成功

    其他指令

    show global variables like '%log%';
    show global variables like '%server%';
    

    获取binlog名字和position

    接下来要获取最新的binlog文件名和position

    show master status;
    

    记住file名字和position,后面会用到。
    这个时候master不要发生写操作,否则position和file可能会变化。

    slave

    change master to master_host='mysql5-3317', master_user='repl', master_password='poterliu', master_log_file='mysql-bin.000001', master_log_pos=1380;
    

    查看从节点状态

    show slave status G;
    

    注意,主从同步成功的标志:
    IO线程和SQL线程都是成功运行的:

                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    

    现在可以在master节点上面做任意对于库表的修改操作,slave会自动同步。
    不要直接操作slave。

    如果IO线程not running:

    stop slave;                                                      
    SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    start slave;                                                      
    show slave status G
    

    注意事项

    基于 docker 花了两个小时搭建完成,遇到的一些注意事项。

    1、改完 my.conf 文件需要重启 docker 容器或 MySQL,目的是让配置文件生效。

    2、master 上新增的 repl 用户授权 host 是 IP 时可能导致 slave 上不能修改 master 成功,将 host 改为 % 就可以了,目的是为了搭建成功。

    3、当 slave 在执行同步时发生错误时(错误可能是因为表冲突、数据库冲突等),Slave_IO_Running 和 Slave_SQL_Running 都将关闭,需要重启 salve,即执行:

    stop slave;

    SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

    start slave。

    4、docker 运行的 MySQL 容器需要处于同一个通络中。

  • 相关阅读:
    android工程下assets与raw文件夹
    eclipse增加jar包方式对比
    跳出内循环,继续下一次外循环的写法
    ImportError: cannot import name 'BaseDataset' from 'src.dataset'
    神经网络中的反向传播法
    Pytorch中ndarray tensor list互转
    Python运行语法错误:IndentationError: unindent does not match any outer indentation level
    module 'torch' has no attribute 'gesv'
    极大似然估计
    Gaussian Processes
  • 原文地址:https://www.cnblogs.com/poterliu/p/14852503.html
Copyright © 2011-2022 走看看