基于docker-compsoe.yml配置mysql8.0主从 (需要进入主从容器执行命令)

这篇具有很好参考价值的文章主要介绍了基于docker-compsoe.yml配置mysql8.0主从 (需要进入主从容器执行命令)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于docker-compsoe.yml配置mysql主从 (需要进入主从容器执行命令)

  1. 主my.cnf文件

    [mysqld]
    user=mysql                     # MySQL启动用户
    default-storage-engine=INNODB  # 创建新表时将使用的默认存储引擎
    character-set-server=utf8mb4      # 设置mysql服务端默认字符集
    pid-file        = /var/run/mysqld/mysqld.pid  # pid文件所在目录
    socket          = /var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字
    datadir         = /var/lib/mysql              # 数据文件存放的目录
    #log-error      = /var/log/mysql/error.log
    #bind-address   = 127.0.0.1                   # MySQL绑定IP
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等!
    # 允许最大连接数
    max_connections=200
    
    # ================= ↓↓↓ mysql主从同步配置start ↓↓↓ =================
    
    # 同一局域网内注意要唯一
    server-id=3306
    # 开启二进制日志功能 & 日志位置存放位置`/var/lib/mysql`
    #log-bin=mysql-bin
    log-bin=/var/lib/mysql/mysql-bin
    # binlog格式
    # 1. STATEMENT:基于SQL语句的模式,binlog 数据量小,但是某些语句和函数在复制过程可能导致数据不一致甚至出错;
    # 2. MIXED:混合模式,根据语句来选用是 STATEMENT 还是 ROW 模式;
    # 3. ROW:基于行的模式,记录的是行的完整变化。安全,但 binlog 会比其他两种模式大很多;
    binlog_format=ROW
    # FULL:binlog记录每一行的完整变更 MINIMAL:只记录影响后的行
    binlog_row_image=FULL
    # 日志文件大小
    # max_binlog_size=1G
    max_binlog_size=100M
    # 定义清除过期日志的时间(这里设置为7天)
    expire_logs_days=7
    
    # ================= ↑↑↑ mysql主从同步配置end ↑↑↑ =================
    
    [mysql]
    default-character-set=utf8mb4
    
    [client]
    default-character-set=utf8mb4  # 设置mysql客户端默认字符集
    
    
    
  2. 从my.cnf文件

    
    [mysqld]
    user=mysql                     # MySQL启动用户
    default-storage-engine=INNODB  # 创建新表时将使用的默认存储引擎
    character-set-server=utf8mb4      # 设置mysql服务端默认字符集
    pid-file        = /var/run/mysqld/mysqld.pid  # pid文件所在目录
    socket          = /var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字
    datadir         = /var/lib/mysql              # 数据文件存放的目录
    #log-error      = /var/log/mysql/error.log
    #bind-address   = 127.0.0.1                   # MySQL绑定IP
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等!
    
    # 允许最大连接数
    max_connections=200
    
    # ================= ↓↓↓ mysql主从同步配置start ↓↓↓ =================
    
    # 同一局域网内注意要唯一,从库只需要设置 server_id 即可
    server-id=3307
    
    # ================= ↑↑↑ mysql主从同步配置end ↑↑↑ =================
    
    [mysql]
    default-character-set=utf8mb4
    
    [client]
    default-character-set=utf8mb4  # 设置mysql客户端默认字符集
    
    
    
  3. 主要的yml配置

    version: '3'
    
    # 网桥 -> 方便相互通讯
    networks:
      mysql:
        driver: bridge
    
    services:
      mysql-master:
        image: mysql  #镜像
        container_name: mysql-master                                 # 容器名为'mysql-master'
        restart: unless-stopped                                       # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
        volumes:                                                      # 数据卷挂载路径设置,将本机目录映射到容器目录
          - "./mysql/master/my.cnf:/etc/mysql/my.cnf"
          - "./mysql/master/data:/var/lib/mysql"
          #      - "./mysql/master/conf.d:/etc/mysql/conf.d"
          - "./mysql/master/log/mysql/error.log:/var/log/mysql/error.log"
          - "./mysql/master/mysql-files:/var/lib/mysql-files"
        environment:                        # 设置环境变量,相当于docker run命令中的-e
          TZ: Asia/Shanghai
          LANG: en_US.UTF-8
          MYSQL_ROOT_PASSWORD: "123456"         # 设置root用户密码
        ports:                              # 映射端口
          - "3306:3306"
        networks:
          - mysql
    
      mysql-slave:
        image: mysql  #镜像
        container_name: mysql-slave                                  # 容器名为'mysql-slave'
        restart: unless-stopped                                       # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
        volumes:                                                      # 数据卷挂载路径设置,将本机目录映射到容器目录
          - "./mysql/slave/my.cnf:/etc/mysql/my.cnf"
          - "./mysql/slave/data:/var/lib/mysql"
          #      - "./mysql/slave/conf.d:/etc/mysql/conf.d"
          - "./mysql/slave/log/mysql/error.log:/var/log/mysql/error.log"
          - "./mysql/slave/mysql-files:/var/lib/mysql-files"
        environment:                        # 设置环境变量,相当于docker run命令中的-e
          TZ: Asia/Shanghai
          LANG: en_US.UTF-8
          MYSQL_ROOT_PASSWORD: "123456"     # 设置root用户密码
        ports:                              # 映射端口
          - "3307:3306"
        depends_on:
          - mysql-master
        networks:
          - mysql
    
    
  4. 主容器的操作

    1. 进入主mysql容器 3306端口的
      docker exec -it 容器id /bin/bash
    2. 登录mysql
      mysql -uroot -p
    3. 创建主从复制的账号 - 创建用户slave,密码123456
      CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    4. 授权主从复制
      GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    5. 刷新权限
      FLUSH PRIVILEGES;
    6. 查看状态
      show master status;
      +------------------+----------+--------------+------------------+-------------------+
      | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
      +------------------+----------+--------------+------------------+-------------------+
      | mysql-bin.000003 |      839 |              |                  |                   |
      +------------------+----------+--------------+------------------+-------------------+
      
    7. 记住File 和 Position下面的值的值
  5. 配置从库

    1. 进入主mysql容器 3307端口的
      docker exec -it 容器id /bin/bash

    2. 登录mysql
      mysql -uroot -p

    3. 执行主从授权命令

      change master to master_host='我们3306的id或者域名',master_port=3306, master_user='slave', master_password='123456', master_log_file='mysql-bin.000003', master_log_pos= 839, get_master_public_key=1,master_connect_retry=30;
      

      master_log_file='mysql-bin.000003',和master_log_pos= 839就是我们刚刚记住的值

    4. 开启主从同步
      start slave;

    5. 查询结果
      show slave status \G

    6. 代表成功的标识

      Slave_IO_Running: Yes
      Slave_SQL_Running: Yes
      

此时这样就成功了!!!文章来源地址https://www.toymoban.com/news/detail-571697.html

到了这里,关于基于docker-compsoe.yml配置mysql8.0主从 (需要进入主从容器执行命令)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker-compose.yml配置文件参数

    1. image 在 services 标签下的第二级标签是 web,这个名字是用户自己自定义,它就是服务名称。 image 则是 指定服务的镜像名称或镜像 ID 。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。 2. environment 环境变量 ,这个标签的作用是 设置镜像变量 ,它可以保存变量到镜像

    2024年02月10日
    浏览(25)
  • Docker 安装mysql8.0

    1.从 Docker Hub 下载 MySQL 8.0 镜像。打开终端并运行以下命令: 2. 创建一个 MySQL 容器并运行。在终端中运行以下命令: 3.连接到 MySQL 服务器。使用以下命令连接到容器内的 MySQL 服务器: ,“my-mysql” 是容器的名称,“-uroot” 是 MySQL 的 root 用户名,“-p” 表示需要输入密码。

    2024年02月15日
    浏览(30)
  • docker安装Mysql8.0

    1.拉取镜像 当前安装mysql8.0,执行docker pull mysql:8.0 2.查看镜像 3.复制目录 这里由于8.0和5.6配置文件目录有所不同,可能会发生 通过docker logs命令查看,是由于缺少/etc/mysql/conf.d目录,启动失败.需要先查看目录结构,再做判断. 此处不绑定端口,只用于查看文件目录,和拷贝配置,

    2024年03月09日
    浏览(36)
  • docker中安装mysql8

    2.1 创建3个文件夹,一会创建容器需要用(用于挂载本地文件和目录) 2.2 配置mysql.cnf的内容,并放入conf文件夹中 2.3 将sql文件放入init文件夹中 sql文件只在容器创建时执行一次 sql文件可以有多个 3.1 测试是否成功 3.2 出现错误:docker 启动MySQL一直处于restarting状态 解决方案:查看

    2024年04月17日
    浏览(19)
  • Docker 安装 MySQL8.0

    docker安装mysql docker仓库搜索mysql docker search mysql docker仓库拉取mysql8.0 docker pull mysql:8.0 // 默认拉取最新版本 docker pull mysql 查看本地仓库镜像是否下载成功 docker images mysql:8.0 安装运行mysql8.0容器 查看mysql8.0容器运行情况 docker ps docker登录mysql 重启mysql docker restart mysql8.0 设置开机启

    2024年02月19日
    浏览(24)
  • 【Docker构建MySQL8.0镜像】

    拉取成功后就可以看到镜像了: 这里我们选择 MySQL 8.0.35 版本,因为在 8.0.33 及其之前的版本被扫出 多个漏洞 ,所以决定使用比较新版本的 8.0.35 。 最好在启动时自己准备好配置文件 3.1 启动脚本 注意:上述启动命令需要修改 密码 、 日志目录 、 配置文件目录 等内容后才能

    2024年01月18日
    浏览(42)
  • centos docker安装mysql8

    1、创建挂载文件夹 mkdir -p /mydata/mysql/log mkdir -p /mydata/mysql/data mkdir -p /mydata/mysql/conf 2、拉取镜像最新版本,如果写 mysql:8.0.26可以指定版本 docker pull mysql 3、启动命令 docker run -p 3306:3306 --restart=always -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/my

    2024年02月07日
    浏览(43)
  • 3.Docker 搭建 MySQL8.0

    重启后自动加载mysql

    2024年02月11日
    浏览(47)
  • Docker Compose部署Mysql8

    MySQL是一个广泛使用的开源关系型数据库管理系统,它被用于许多Web应用程序的数据存储和管理。MySQL提供了高性能、可靠性和灵活性,让开发者能够轻松处理各种规模的数据处理需求。 下面是一些关于MySQL的重要特点和功能: 关系型数据库 : MySQL是一个基于关系模型的数据库

    2024年02月05日
    浏览(30)
  • Docker 安装 MySQL5.7 和 MySQL8

    拉下来镜像后 执行 docker images 此时我们已经有这个镜像了。 在根目录下创建 app , 在 app 目录下创建 mysql57 文件夹。 命令如下: 参数说明 : -d :将容器在后台运行(以分离模式运行)。 -p 3306:3306 :将宿主机的 3306 端口映射到容器的 3306 端口,这样可以通过宿主机的 3306

    2024年02月04日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包