• docker实现mysql主从复制(巨详细!!!)


    新建主机服务容器实例3307

    docker run -p 3307:3306 --name mysql-master \
    -v /mydata/mysql-master/log:/var/log/mysql \
    -v /mydata/mysql-master/data:/var/lib/mysql \
    -v /mydata/mysql-master/conf:/etc/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    -d mysql:5.7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这段代码是用于在 Docker 中启动一个名为 mysql-master 的 MySQL 5.7 数据库容器的命令,并将其映射到主机的 3307 端口。具体参数含义如下:

    • docker run: Docker 命令,用于创建并启动 Docker 容器。
    • -p 3307:3306: 将 Docker 容器的 3306 端口映射到主机的 3307 端口。
    • --name mysql-master: 为 Docker 容器指定一个名称。
    • -v /mydata/mysql-master/log:/var/log/mysql: 将主机上的目录 /mydata/mysql-master/log 挂载到 Docker 容器的 /var/log/mysql 目录,用于容器中数据库日志文件的存放。
    • -v /mydata/mysql-master/data:/var/lib/mysql: 将主机上的目录 /mydata/mysql-master/data 挂载到 Docker 容器的 /var/lib/mysql 目录,用于容器中数据库文件的存放。
    • -v /mydata/mysql-master/conf:/etc/mysql: 将主机上的目录 /mydata/mysql-master/conf 挂载到 Docker 容器的 /etc/mysql 目录,用于容器中 MySQL 配置文件的存放。
    • `-e MYSQL_ROOT_PASSWORD=root: 设置容器中 MySQL 数据库的 root 用户密码为 root。
    • -d mysql:5.7: 使用 Docker Hub 中的 mysql:5.7 镜像创建容器,并以后台方式运行。

    综合上述参数,该命令会创建一个名为 mysql-master 的 MySQL 5.7 数据库容器,并将其映射到主机的 3307 端口,同时将容器中数据库的日志文件、数据文件和配置文件挂载到主机上指定的目录。容器中的 MySQL 数据库的 root 用户密码将被设置为 ROOT。该命令在后台运行,并返回容器的 ID。

    进入/mydata/mysql-master/conf目录下新建my.cnf

    cd /mydata/mysql-master/conf
    vim my.cnf
    
    [mysqld]
    ##同一局域网中需要唯一
    server_id=101
    ##指定不需要同步的数据库每个in成
    binlogn-ignore-db=mysql
    ##开启二进制日志功能
    log_bin=mall-mysql-bin
    ##设置二进制日志使用内存大小(事务)
    binlog_cache_size=1M
    ##设置使用的二进制日志格式(mixed,statement,row)
    binlog_format=mixed
    ##二进制过期清理时间。默认值为0,表示不自动清理
    expire_logs_days=7
    ##跳过主从复制中遇到的所有错误或之慈宁宫类型的错误,避免slave端复制中断
    ##如:1062错误是指一些主键重复,1032是指因为主从数据库数据不一致
    slave_skip_errors=1062
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    修改完配置后重启master实例

    docker restart mysql_master
    
    • 1

    进入mysql-master容器

    docker exec -it mysql_master /bin/bash
    mysql-uroot-proot
    
    • 1
    • 2
    • mysql:启动 MySQL 客户端程序。
    • -uroot:指定连接的用户名为 root。
    • -proot:指定连接的密码为 root。

    master容器实例内创建数据同步用户

    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.*TO 'slave'@'%';
    
    • 1
    • 2

    这是两个 MySQL 数据库命令用于创建一个名为 ‘slave’ 的用户,并授予该用户复制从库和复制客户端的权限。具体命令含义如下:

    1. CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
      • CREATE USER: 创建一个新用户。
      • 'slave'@'%': 用户名和允许连接的主机。在这里,用户名为 ‘slave’,‘%’ 表示允许从任何主机连接。
      • IDENTIFIED BY '123456': 设置用户的密码为 ‘123456’。
    2. GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
      • GRANT: 授予权限给指定用户。
      • REPLICATION SLAVE, REPLICATION CLIENT: 授予复制从库和复制客户端的权限。
      • *.*: 要授权的数据库和表。在这里,*.* 表示所有数据库和表。
      • TO 'slave'@'%': 授予权限的用户和允许连接的主机。

    综合上述命令,第一个命令创建了一个名为 ‘slave’ 的用户,并设置其密码为 ‘123456’,允许从任何主机连接。第二个命令给该用户授予了复制从库和复制客户端的权限,并对所有数据库和表进行授权。这样,用户 ‘slave’ 就可以作为一个复制从库连接到 MySQL 主服务器,并进行数据复制操作。

    新建 服务器容器实例3308

    docker run -p 3308:3306 --name mysql_slave \
    -v /mydata/mysql_slave/log:/var/log/mysql \
    -v /mydata/mysql-slave/data:/var/lib/mysql \
    -v /mydata/mysql-slave/conf:/etc/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    -d mysql:5.7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    进入/mydata/mysql-slave/conf目录新建my.cnf

    cd /mydata/mysql-slave/conf
    vim my.cnf
    
    [mysqld]
    ##设置server_id,同一局域网需要唯一
    server_id=102
    ##指定不需要同步的数据库名称
    binlog-ignore-db=mysql
    ##开启二进制日志功能,以备slave作为其他数据库实例的master时使用
    log-bin=mall-mysql-slave1-bin
    ##设置二进制日志使用内存大小(事务)
    binlog_cache_size=1M
    ##设置使用的二进制日志模式(mixed,statement,row)
    binlog_format=mixed
    ##二进制日志过期清理时间。默认值为0,表示不自动清理
    expire_logs_days=7
    ##跳过主从复制中遇到的所有错误或制动类型的错误,避免slave端复制中断
    ##如:1062错误是指一下主键重复,1032错误是因为主从数据不一致
    slave_skip_errors=1062
    ##relay_log配置中继日志
    relay_log=mall-mysql-relay-bin
    ##log_slave_updates表示slave将表示复制事件写进自己的二进制日志
    log_slave_updates=1
    ##slave设置为只读(具有super权限的用户除外)
    read_only-1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    修改完配置后重启slave实例

    docker restart mysql-slave
    
    • 1

    在主数据库中查看同步状态

    show master status;
    
    • 1

    进入mysql-slave容器

    docker exec -it mysql-slave /bin/bsh
    mysql -uroot -proot
    
    • 1
    • 2

    在从数据库中配置主从

    change master to master_host='宿主机ip',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin,000001',master_log_pos=617,master_connect_retry=30;
    
    • 1
    • CHANGE MASTER TO`:指定要修改主从复制配置。
    • MASTER_HOST='宿主机ip':设置主服务器的 IP 地址(或主机名)。
    • MASTER_USER='slave':设置主服务器的用户名。
    • MASTER_PASSWORD='123456':设置主服务器的密码。
    • MASTER_PORT=3307:设置主服务器的端口号。
    • MASTER_LOG_FILE='mall-mysql-bin.000001':设置主服务器的二进制日志文件名。
    • MASTER_LOG_POS=617:设置主服务器的二进制日志位置。
    • MASTER_CONNECT_RETRY=30:设置从服务器重试连接主服务器的间隔时间(单位:秒)。

    通过执行这个命令,可以将从服务器配置为连接到指定的主服务器,并使用指定的凭据进行认证和复制操作。请确保替换 '宿主机ip''slave''123456''mall-mysql-bin.000001'617 为正确的主服务器信息。

    在从数据库中查看主从同步状态

    show slave status \G;
    
    • 1

    在这里插入图片描述

    在从数据库中开启主从同步

    start slave;
    
    • 1

    查看从数据库状态发现已经同步

    在这里插入图片描述

    主从复制测试

    主机新建库-使用库-新建表-插入数据,ok
    在这里插入图片描述

    从机使用库-查看记录,ok

    在这里插入图片描述

  • 相关阅读:
    牛客网之SQL非技术快速入门(9)-综合练习
    基于JavaSwing开发小区物业信息房屋出租管理系统 课程设计 大作业
    凡客平台数据接口,根据ID取商品详情,Onebound电商API
    DDR3 功能测试记录
    ISO IEC 27001-2022 《信息安全、网络安全和隐私保护 信息安全管理系统 要求》
    uniapp-引入模块失效的问题
    释放开发人员生产力:“文档级”代码了解一下?
    Yolo-FastestV2:更快更轻
    Linux常用命令 - 网络管理与通信命令
    华为防火墙:GRE over IPSec
  • 原文地址:https://blog.csdn.net/weixin_49750432/article/details/133252679