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

    主从复制相关

    前置条件:

    docker安装的mysql是5.7.26版本

    1. 编排docker-compose文件如下:

    version: '3'
    services:
      mysql-master:
        volumes: # 挂载数据卷,因为docker如果重新启动容器之后mysql的数据会清空,因此这里采取持久化,挂载到本地文件夹
          - '/etc/mysql/master/data:/var/lib/mysql'
        container_name: masterNode #自定义生成的容器名称
        build:
          context: ./
          dockerfile: master/Dockerfile
        environment:
          - 'MYSQL_ROOT_PASSWORD=123456'
        links:
          - mysql-slave
        ports:
          - '3306:3306'
        restart: always
        hostname: mysql-master
      mysql-slave:
        volumes:
          - '/etc/mysql/slave/data:/var/lib/mysql'
        container_name: slaveNode
        build:
          context: ./
          dockerfile: slave/Dockerfile
        environment:
          - 'MYSQL_ROOT_PASSWORD=123456'
        ports:
          - '3307:3306'
        restart: always
        hostname: mysql-slave
    
    

    目录结构如下:

    docker-compose.yml
    
    master
    
    ​      Dockerfile
    
    ​      my.cnf
    
    slave
    
    ​    Dockerfile
    
    ​    my.cnf
    

    master下Dockerfile

    FROM mysql:5.7.26
    MAINTAINER YTJ
    ADD ./master/my.cnf /etc/mysql/my.cnf
    

    my.cnf如下:

    [mysqld]
    ## 设置server_id,一般设置为IP,注意要唯一
    server_id=100
    ## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
    binlog-ignore-db=mysql
    ## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
    log-bin=replicas-mysql-bin
    ## 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
    binlog_cache_size=1M
    ## 主从复制的格式(mixed,statement,row,默认格式是statement)
    binlog_format=mixed
    ## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
    expire_logs_days=7
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062
    

    slave下Dockerfile

    FROM mysql:5.7.26
    MAINTAINER YTJ
    ADD ./slave/my.cnf /etc/mysql/my.cnf
    

    my.cnf如下:

    [mysqld]
    ## 设置server_id,一般设置为IP,注意要唯一
    server_id=101
    ## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
    binlog-ignore-db=mysql
    ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
    log-bin=replicas-mysql-slave-bin
    ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
    binlog_cache_size=1M
    ## 主从复制的格式(mixed,statement,row,默认格式是statement)
    binlog_format=mixed
    ## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
    expire_logs_days=7
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062
    ## relay_log配置中继日志
    relay_log=replicas-mysql-relay-bin
    ## log_slave_updates表示slave将复制事件写进自己的二进制日志
    log_slave_updates=1
    

    2 .docker-compose up -d启动服务

    3. 配置master

    docker exec -it <master_containter_id> /bin/bash进入master内部

    mysql -u root -p 输入密码123456进入mysql命令行

    创建数据库同步用户:

    CREATE USER 'testSyn'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'testSyn'@'%';  
    

    查看master状态:show master status;

    1557904009549

    File和Position对应的值后面要用到。

    4. 配置slave

    进入mysql命令行

    连接master:

    change master to master_host='masterNode', master_user='testSyn', master_password='123456', master_port=3306, master_log_file='replicas-mysql-bin.000003', master_log_pos=621, master_connect_retry=30;

    master_host: Master 的IP地址

    master_user: 在 Master 中授权的用于数据同步的用户

    master_password: 同步数据的用户的密码

    master_port: Master 的数据库的端口号

    master_log_file: 指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

    master_log_pos: 从哪个 Position 开始读,即上文中提到的 Position 字段的值

    master_connect_retry: 当重新建立主从连接时,如果连接失败,重试的时间间隔,单位是秒,默认是60秒。

    查看从库状态:show slave status G;Slave_IO_Running,和Slave_SQL_Running都是NO

    启动slave:start slave;

    show slave status G;

    当你准备好了,机会来临的时候,你才能抓住
  • 相关阅读:
    js 自定义属性
    js innerText、textContent、innerHTML的区别和各自用法
    js 的常用选择器
    js Array属性和用法
    js---String对象
    iframe自适应高度js
    thinkphp 的save()不能更新数据解决办法
    转义字符
    获取客户端真实ip
    thinkphp条件查询和模糊查询的一些方法
  • 原文地址:https://www.cnblogs.com/studentytj/p/10899218.html
Copyright © 2011-2022 走看看