• 基于docker实现mysql的主从复制 详细步骤


    docker安装mysql的详细教程已经放在上篇博文:点这里

    这篇来用docker实现mysql的主从复制

    首先创建主节点容器

    同样使用本机3306端口(上篇博文创建的那个容器已经删掉了,所以没有占用宿主机的3306端口),挂载数据、日志和配置文件三个目录,并设置root用户密码为123456

    版本可以是5.7或者8.0

    docker run -d -p 3306:3306 --privileged=true -v /usr/local/mysql/master/log:/var/log/mysql -v /usr/local/mysql/master/data:/var/lib/mysql -v /usr/local/mysql/master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7

     mysql8需要修改一下默认密码校验方式,执行下面命令

    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

    挂载的配置文件目录下创建配置文件my.cnf并写入配置如下,注释也写得很清楚

    1. [mysqld]
    2. # 主服务器唯一Id[必填],同一局域网内需要唯一
    3. server-id=1
    4. # 启用二进制日志[必填]
    5. log-bin=mall-mysql-bin
    6. # 设置二进制日志使用内存大小(事务)
    7. binlog_cache_size=1M
    8. # 设置使用的二进制日志格式
    9. binlog_format=mixed
    10. # 二进制日志过期清理时间,默认值为0(不自动清理)
    11. expire_logs_days=7
    12. # 主机,读写都可以
    13. read-only=0
    14. # 设置不要复制的数据库[可选]
    15. binlog-ignore-db=mysql
    16. # 设置需要复制的数据库[可选](输数据库名字)
    17. #binlog-do-db=test
    18. # 跳过主从复制过程中遇到的所有错误 或 指定类型错误,避免从端复制中断 比如1062是主键重复错误
    19. slave_skip_errors=1062

    然后docker restart mysql 重启主节点容器使配置生效

    主节点创建用户,授予主从复制权限

    进入容器

    docker exec -it mysql /bin/bash

    使用root用户连接mysql ,并输入密码

    mysql -u root -p 

     创建一个用户slave 密码为123456    5.7版本

    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

     创建一个用户slave 密码为123456   8.0版本

    CREATE USER 'slave'@'%';
    ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

    授予权限

    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

     刷新权限

    FLUSH PRIVILEGES;

    创建从节点容器

    命令跟创建主节点差不多,就改了容器名称,映射的本地端口号和数据卷的挂载目录

    版本可以是5.7或者8.0,需要跟前面主节点容器版本相同

    docker run -d -p 3307:3306 --privileged=true -v /usr/local/mysql/slave/log:/var/log/mysql -v /usr/local/mysql/slave/data:/var/lib/mysql -v /usr/local/mysql/slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave mysql:5.7

     mysql8需要修改一下默认密码校验方式,执行下面命令

    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

    在挂载的配置文件目录创建配置文件并写入配置如下

    1. [mysqld]
    2. # 主服务器唯一Id[必填],同一局域网内需要唯一
    3. server-id=2
    4. # 启用二进制日志[必填]
    5. log-bin=mall-mysql-bin
    6. # 设置二进制日志使用内存大小(事务)
    7. binlog_cache_size=1M
    8. # 设置使用的二进制日志格式
    9. binlog_format=mixed
    10. # 二进制日志过期清理时间,默认值为0(不自动清理)
    11. expire_logs_days=7
    12. # 主机,读写都可以
    13. read-only=0
    14. # 设置不要复制的数据库[可选]
    15. binlog-ignore-db=mysql
    16. # 设置需要复制的数据库[可选](输数据库名字)
    17. #binlog-do-db=test
    18. # 跳过主从复制过程中遇到的所有错误 或 指定类型错误,避免从端复制中断 比如1062是主键重复错误
    19. slave_skip_errors=1062
    20. # 配置中继日志
    21. relay_log=mall-mysql-relay-bin
    22. # slave将复制事件写入自己的二进制日志
    23. log_slave_updates=1
    24. # 设置只读
    25. read_only=1

    写完之后docker restart mysql-slave 重启从容器

    查看主容器中主从同步的状态

    show master status;

    可以看到日志文件以及忽略同步的库等信息 

    在从数据库中配置主从复制

    命令说明:

    master_host: 主数据库的IP地址

    master_port: 主数据库的运行端口

    master_user: 主数据库中创建的用于同步数据的用户名称

    master_password: 主数据库中创建的用于同步数据的用户密码

    master_log_file: 指定从数据库要复制数据的日志文件(通过查看主数据库状态,获取file参数,也就是上一步的查看状态里面的File)

    master_log_pos: 指定从数据库从哪个位置开始复制数据(通过查看主数据库状态,获取position参数,也就是上一步的查看状态里面的Position)

    master_connect_retry: 连接失败重试的时间间隔,单位为秒

    下面命令把参数修改为实际值再执行

    change master to master_host='111.111.111.111', master_user='slave', master_password='123456', master_port=3306, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;

    查看从数据库中同步状态

    show slave status \G;

    后面加个\G表示以键值对方式显示,不然数据太多,表格显示在命令行里面看非常乱

    可以看到现在还是一个未开始的状态 

    在从数据库中开启主从复制

    start slave;

     

    此时再次查看主从复制状态,可以看到现在已经是yes了

    主从复制测试

    在主数据库创建库创建表

    从数据库查看库表和数据,同样存在

    说明主从同步已成功 

  • 相关阅读:
    jenkins流水线部署springboot应用到k8s集群(k3s+jenkins+gitee+maven+docker)(1)
    基于图像去雾处理的雾霾污染程度评估(任务书+lunwen+翻译及原文+答辩PPT)
    基于最低水平面的三维装箱问题的启发式算法
    Java中mybatis的Mpper代理开发的详细使用步骤
    Transformer12
    Spring Boot获取节假日API
    淘宝/天猫API,获得淘宝商品评论(返回值说明)
    指针和数组试题解析(4)字符数组部分续集
    部署LVS-NAT群集实验
    前端AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(二)
  • 原文地址:https://blog.csdn.net/qq_41890624/article/details/127875035