zoukankan      html  css  js  c++  java
  • docker mysql5.7主从复制搭建(双主双从)

    1.1 简单说明

    这里用了两台服务器,分别是161,163,有条件可以用四台

    • 161服务器 :

    11备(mysql-5.7-master-161  mysql-5.7-slave-161

    端口:3339 3340

    • 163服务器 :

    11备(mysql-5.7-master-163  mysql-5.7-slave-163

    端口:3339 3340

    • docker镜像

    mysql:5.7

    1.2 这分别构建容器

    • 拉取镜像:
    docker pull mysql:5.7
    
    • 分别创建容器:

    (可以挂载配置文件,这里没有挂载)

    161服务器:

    docker run -itd --name=mysql-5.7-master-161 -p 3339:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    
    docker run -itd --name=mysql-5.7-slave-161 -p 3340:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

    163服务器.

    docker run -itd --name=mysql-5.7-master-163 -p 3339:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    
    docker run -itd --name=mysql-5.7-slave-163 -p 3340:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    

    分别进入容器修改配置文件:(没有挂载文件的需要vim命令修改配置)

    apt-get update
    apt-get install vim

    分别修改配置文件:

     vim /etc/mysql/my.cnf  

    4份配置文件添加信息如下:(可相应去补充其他的)

    161-master======

    [mysqld]
    server-id=1
    log-bin=mysql-bin
    skip-name-resolve
    log-slave-updates
    lower_case_table_names=1
    interactive_timeout=7200
    wait_timeout=86400
    max_connections=4000
    back_log=100
    expire_logs_days=3
    max_binlog_size=100M
    character_set_server=utf8
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    161-slave======

    [mysqld]
    server-id=2
    log-bin=mysql-slave-bin
    relay_log=edu-mysql-relay-bin
    skip-name-resolve
    log-slave-updates=1
    lower_case_table_names=1
    interactive_timeout=7200
    wait_timeout=86400
    max_connections=4000
    back_log=100
    expire_logs_days=3
    max_binlog_size=100M
    character_set_server=utf8
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

       163-master======

    [mysqld]
    server-id=3
    log-bin=mysql-bin
    skip-name-resolve
    log-slave-updates
    lower_case_table_names=1
    interactive_timeout=7200
    wait_timeout=86400
    max_connections=4000
    back_log=100
    expire_logs_days=3
    max_binlog_size=100M
    character_set_server=utf8
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    163-slave======
    [mysqld]
    server-id=4
    log-bin=mysql-slave-bin
    relay_log=edu-mysql-relay-bin
    skip-name-resolve
    log-slave-updates=1
    lower_case_table_names=1
    interactive_timeout=7200
    wait_timeout=86400
    max_connections=4000
    back_log=100
    expire_logs_days=3
    max_binlog_size=100M
    character_set_server=utf8
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    1.3 配置文件字段说明

    Server-id

    ID值唯一的标识了复制群集中的主从服务器,因此它们必须各不相同。Master_id必须为12321之间的一个正整数值,slave_id值必须为22321之间的一个正整数值。

    Log-bin

    表示打开binlog,打开该选项才可以通过I/O写到Slaverelay-log,也是可以进行replication的前提。

    Binlog-do-db

    表示需要记录二进制日志的数据库。如果有多个数据可以用逗号分隔,或者使用多个binlog-do-dg选项。

    Binglog-ingore-db

    表示不需要记录二进制日志的数据库,如果有多个数据库可用逗号分隔,或者使用多binglog-ignore-db选项。

    Replicate-do-db

    表示需要同步的数据库,如果有多个数据可用逗号分隔,或者使用多个replicate-do-db选项。

    Replicate-ignore-db

    表示不需要同步的数据库,如果有多个数据库可用逗号分隔,或者使用多个replicate-ignore-db选项。

    Master-connect-retry

    master-connect-retry=n表示从服务器与主服务器的连接没有成功,则等待n秒(s)后再进行管理方式(默认设置是60s)。如果从服务器存在mater.info文件,它将忽略些选项。

    Log-slave-updates

    配置从库上的更新操作是否写入二进制文件,如果这台从库,还要做其他从库的主库,那么就需要打这个参数,以便从库的从库能够进行日志同步。

    Slave-skip-errors

    在复制过程,由于各种原因导致binglo中的sql出错,默认情况下,从库会停止复制,要用户介入。可以设置slave-skip-errors来定义错误号,如果复制过程中遇到的错误是定义的错误号,便可以路过。如果从库是用来做备份,设置这个参数会存在数据不一致,不要使用。如果是分担主库的查询压力,可以考虑。

    1.4 配置主从、主主

    • 创建slave角色,用于数据同步。

       分别进入在161和163服务器的主库容器中:

    docker exec -it mysql-5.7-master-161 /bin/bash
    mysql -uroot -p123456
    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    flush privileges;

      

    docker exec -it mysql-5.7-master-163 /bin/bash
    mysql -uroot -p123456
    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    flush privileges;
    • 配置主从连接

        在宿主机161、163分别执行命令

     docker inspect mysql-5.7-master-161
     docker inspect mysql-5.7-master-163

                  161的是172.17.0.2 主从之间基于此ip,可能docker重启ip会发生改变,也可以用宿主机host的ip和端口

                  163的是172.17.0.3

                  下面分别在161、163配置主从连接

                        1) 161-master:

            show master status;
    

      

                  关注file和position的值

                      2) 161-slave:

    show slave status G;
    change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000004', master_log_pos=1490;
    start slave;
    show slave status G;
    

                       change操作前要先stop slave;

    • 配置主主连接

                 分别去对应show master status;查看对应的动态参数。

    #主机2复制主机1命令
    change master to master_host='xxx.xx.x.161',
    master_port=3339,
    master_user='slave', 
    master_password='123456', 
    master_log_file='mysql-bin.000003',
    master_log_pos=1306,
    master_connect_retry=60;
    
    #主机1复制主机2命令
    change master to master_host='xxx.xx.x.163',
    master_port=3339,
    master_user='slave', 
    master_password='123456', 
    master_log_file='mysql-bin.000005',
    master_log_pos=769,
    master_connect_retry=60;
    

      关联主从,主主之间主要关注:

          master_host,master_log_file,master_log_pos字段
    • 验证

  • 相关阅读:
    【css】容器撑满浏览器--- height:100%
    【实践】js六道有趣的题
    【Canvas】树冠
    asp.net上传Excel文件到服务端进行读取
    HttpContext.Current多线程调用
    abstract修饰符,具体类与抽象类的区别
    如何快速恢复MyEclipse的默认主题
    日历源代码
    for语句应用:乘法表
    Java的优先级
  • 原文地址:https://www.cnblogs.com/godpo/p/13257149.html
Copyright © 2011-2022 走看看