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;

    当你准备好了,机会来临的时候,你才能抓住
  • 相关阅读:
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Symmetric Tree
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Triangle
    Populating Next Right Pointers in Each Node II
    Pascal's Triangle II
    Pascal's Triangle
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/studentytj/p/10899218.html
Copyright © 2011-2022 走看看