• Docker实战(2):主从库搭建


    入门

    基于Docker的Mysql主从复制搭建

    1. 首先安装docker
    2. 拉取mysql镜像:5.7版本
    3. 启动主从数据库容器
    docker run -p 3339:3306 --name Maste -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7  # Master(主库)
    docker run -p 3340:3306 --name Slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7   # Slave(从库)
    

    启动后用可用数据库软件测试一下是否连通。

    • 配置Master
    1. Master配置文件修改
    docker exec -it 容器名 /bin/bash  #进入主库docker
    apt-get update   #更新安装源
    apt-get install -y vim   #安装vim
    vim  /etc/mysql/my.cnf   #编辑my.cnf配置文件
    
    
    [mysqld]
    ## 同一局域网内注意要唯一
    server-id=100  
    ## 开启二进制日志功能,可以随便取(关键)
    log-bin=mysql-bin
    
    1. 重启mysql容器。
    2. 进入主库创建数据库同步用户,并授予REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于主从之间同步数据。
    docker exec -it 主库容器名 /bin/bash  # 进入主库docker
    mysql -uroot帐号  -p用户密码   # 登录入mysql
    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';   #创建用户名“slave”,密码“123456”的数据库用户。
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';   #授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限
    
    1. 查看File、Position字段值,并记录下来
    show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |      617 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    
    • 配置Slave
    1. Slave配置文件修改
    docker exec -it 容器名 /bin/bash  #
    apt-get update
    apt-get install -y vim
    vim  /etc/mysql/my.cnf
    
    [mysqld]
    ## 设置server_id,注意要唯一
    server-id=101  
    ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
    log-bin=mysql-slave-bin   
    ## relay_log配置中继日志
    relay_log=edu-mysql-relay-bin
    
    1. 重启mysql服务跟docker容器
    2. 进入Slave数据库,执行主从同步命令;
    change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 617, master_connect_retry=30;  #   master_host='docker独立ip' ;
    master_user='主库创建的同步帐号';master_password='同步帐号密码';master_port=mysql主库端口;master_log_file='主库File字段名';master_log_pos= Position字段;master_connect_retry=重连时间
    
    show slave status \G;   #查看主从同步状态
    start slave  #启动主从同步功能
    
       SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。
    

    进阶

    1. 创建主库
    docker run -itd -p 3308:3306 --name master -v /master/var/mysql:/var/lib/mysql -v /master/conf/:/etc/mysql/ -v /etc/localtime:/etc/localtime:ro  -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
    
    1. 创建从库
    docker run -itd -p 3309:3306 --name slave -v /slave/var/mysql:/var/lib/mysql -v /slave/conf/:/etc/mysql/ -v /etc/localtime:/etc/localtime:ro  -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
    

    **注意:**因数据库版本不同,所有些并不会立即启动,需写配置文件才可启动。5.7经测试会立即启动。
    3. 主从配置文件夹中创建配置文件 my.cnf

    #主库配置如下:
    cd /master/conf/ 
    touch my.cnf
    vim my.cnf
    [mysqld]
    lower_case_table_names=1
    wait_timeout=30
    sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    max_allowed_packet= 1024M
    group_concat_max_len = 1024M
    thread_cache_size=64   
    max_connections=160000   #设置最大的连接数
    server-id=1001   ##设置server_id,注意要唯一
    transaction-isolation = READ-COMMITTED
    auto-increment-increment = 1
    auto-increment-offset = 1
    slave-skip-errors = all  #忽略一些错误
    binlog-ignore-db=mysql
    binlog-ignore-db=test1  #不同步给从库的库test1
    log-bin = mysql-bin  #开启二进制日志功能,以备Slave作为其它Slave的Master时使用
    binlog-do-db=test  #需要复制给从库的库
    !includedir /etc/mysql/   #***主要:此路径是docker内的配置文件放置路径,也就是刚刚启动映射的配置文件路径
    # 从库配置如下:
    [mysqld]
    lower_case_table_names=1
    wait_timeout=30
    sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    max_allowed_packet= 1024M
    group_concat_max_len = 1024M
    thread_cache_size=64
    max_connections=10000
    server-id=1002
    replicate-do-db=test    #从库需要复制的库
    replicate-ignore-db=test1    #从库需要忽略同步的库
    log-slave-updates    #一主多从必写的配置
    log-bin = mysql-bin  #开启二进制日志功能,以备Slave作为其它Slave的Master时使用
    auto-increment-increment = 1
    auto-increment-offset = 1
    slave-skip-errors = all  
    slave-net-timeout=60   #这是slave60秒超时会重连
    !includedir /etc/mysql/
    
    1. 重启启动主从库
    docker restart master
    docker restart slave
    
    1. 接下来主从库操作可参考入门步骤3,大同。

    参考连接

    slave启动失败解决方案一

    slave启动失败解决方案二-清理slave同步信息

  • 相关阅读:
    VS2019 技巧
    html5-Canvas
    JS动画三剑客——setTimeout、setInterval、requestAnimationFrame
    C# 从1到Core--委托与事件
    ILSpy工具使用
    .NET 表达式计算:Expression Evaluator
    jQuery.globalEval()方法
    jquery的eval的使用
    js中的eval方法
    设计模式速查手册
  • 原文地址:https://www.cnblogs.com/98record/p/13648609.html
Copyright © 2020-2023  润新知