zoukankan      html  css  js  c++  java
  • Docker mysql主从配置

    一:Mysql基于Docker的主从复制搭建

    1:安装docker,安装步骤可见我之前的文章:Docker-常用基建的安装与部署

    docker ps 命令查询当前的容器状态,这就是我们最后要达到的效果。

    2:首先拉取mysql官方镜像

    bash> docker pull mysql:5.7

    演示环境是在同一台服务器上部署。因为docker创建容器时默认采用bridge网络,会自行分配ip,不允许指定,重启容器会导致ip变更。

    所以我们需要创建自定义的bridge网络,这样创建容器的时候才能指定ip。

    bash> docker network create --subnet=172.18.0.0/16 mynetwork

    3:创建三个mysql(一主两从)容器:

    docker run -p 3306:3306 --name mysql_master --net mynetwork --ip 172.18.0.36 -e TZ=Asia/Shanghai -v /home/data/docker/mysql/mysql1/logs:/logs -v /home/data/docker/mysql/mysql1/data:/var/lib/mysql -v /home/data/docker/mysql/mysql1/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=Abcd12345 -d --restart=always mysql:5.7
    
    docker run -p 3307:3306 --name mysql_slave1 --net mynetwork --ip 172.18.0.37 -e TZ=Asia/Shanghai -v /home/data/docker/mysql/mysql2/logs:/logs -v /home/data/docker/mysql/mysql2/data:/var/lib/mysql -v /home/data/docker/mysql/mysql2/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=Abcd12345 -d --restart=always mysql:5.7
    
    docker run -p 3308:3306 --name mysql_slave2 --net mynetwork --ip 172.18.0.38 -e TZ=Asia/Shanghai -v /home/data/docker/mysql/mysql3/logs:/logs -v /home/data/docker/mysql/mysql3/data:/var/lib/mysql -v /home/data/docker/mysql/mysql3/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=Abcd12345 -d --restart=always mysql:5.7

     上面的docker run命令中的参数都有其独特的含义,比如 -p 3307:3306  表示当前环境主键的端口(3307):docker容器内的端口(3306)

    -v /home/data/docker/mysql/mysql1/conf:/etc/mysql  这个配置的是mysql的配置文件路径,

    对于mysql_master 需要在当前系统/home/data/docker/mysql/mysql1/conf目录下创建 my.cnf文件,内容如下:

    [mysqld]
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    #log-error      = /var/log/mysql/error.log
    # By default we only accept connections from localhost
    #bind-address   = 127.0.0.1
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    log-bin=/var/lib/mysql/mysql-bin
    server-id=36
    ## 主从复制的格式(mixed,statement,row,默认格式是statement)
    binlog_format=mixed  
    ## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
    expire_logs_days=7
    max_allowed_packet=20M

    剩余的两个从库配置,/home/data/docker/mysql/mysql2/conf目录下创建 my.cnf文件

    [mysqld]
    server-id=37
    log-bin=/var/lib/mysql/mysql-slave1-bin

    /home/data/docker/mysql/mysql3/conf目录下创建 my.cnf文件

    [mysqld]
    server-id=38
    log-bin=/var/lib/mysql/mysql-slave2-bin

    配置修改完成后,重启容器:

    docker restart mysql_master
    docker restart mysql_slave1
    docker restart mysql_slave2

    二:主从配置

    1:进入主库:docker exec -it mysql_master /bin/bash

    bash> mysql -uroot -p
    mysql> SHOW MASTER STATUS;
     File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |      154| 

     2:同步mysql_slave1 和 mysql_slave2

    # 进入mysql_salve1
    bash> docker exec -it mysql_slave1 /bin/bash
    # 执行同步 mysql> change master to master_host
    ='172.18.0.36', master_user='root',master_password='Abcd12345',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=154,master_connect_retry=30; mysql> start slave;

    # 进入mysql_salve2
    bash> docker exec -it mysql_slave2 /bin/bash
    # 执行同步 mysql> change master to master_host='172.18.0.36', master_user='root',master_password='Abcd12345',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=154,master_connect_retry=30; mysql> start slave;
    master_port:Master的端口号,指的是容器的端口号
    master_user:用于数据同步的用户
    master_password:用于同步的用户的密码
    master_log_file:指定 Slave 从哪个日志文件开始复制数据,即主库中提到的 File 字段的值
    master_log_pos:从哪个 Position 开始读,即主库中提到的 Position 字段的值
    master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

    最后,可以自己验证下同步的效果了。



    ==================================================================

    勇气是,尽管你感到害怕,但仍能迎难而上。
    尽管你感觉痛苦,但仍能直接面对。
    向前一步,也许一切都会不同。

    ==================================================================

  • 相关阅读:
    odoo API装饰器one、model、multi的区别
    odoo配置界面设置字段默认值
    redhat_6.5下载地址
    常用在线工具链接
    odoo开发环境搭建(四):python开发工具IDE pycharm配置
    odoo开发环境搭建(三):安装odoo依赖的python包
    odoo开发环境搭建(二):安装Ubuntu 17虚拟机
    odoo开发环境搭建(一):安装VMware Workstation
    火狐浏览器网页截屏插件
    copy代码的时候,如何去掉代码前边的编号
  • 原文地址:https://www.cnblogs.com/yxy-ngu/p/14346298.html
Copyright © 2011-2022 走看看