docker 安装mysql8 实现互为主从

这篇具有很好参考价值的文章主要介绍了docker 安装mysql8 实现互为主从。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录结构

docker 安装mysql8 实现互为主从,docker,容器,mysql

先按照这个目录结构创建。

mysql.conf 配置,mysql的基础可以在此添加

mysql配置

mysql-master下conf配置

[mysqld]
# 设置服务器唯一标识号
server-id=1
# 启用二进制日志
log-bin=master-bin
# 指定需要复制的数据库
binlog-do-db=test_db
# 指定二进制日志的格式为行级别
binlog-format=row
# 启用 GTID 模式
gtid-mode=ON
# 强制 GTID 一致性检查
enforce-gtid-consistency=ON

mysql-slave下conf配置

[mysqld]
# 设置服务器唯一标识号
server-id=2
# 启用二进制日志
log-bin=slave-bin
# 指定需要复制的数据库
binlog-do-db=test_db
# 指定二进制日志的格式为行级别
binlog-format=row
# 启用 GTID 模式
gtid-mode=ON
# 强制 GTID 一致性检查
enforce-gtid-consistency=ON

 注意我指定了数据库为test_db

 docker一键部署配置

version: '3.8'

services:
  mysql-master:
    image: mysql:latest
    container_name: mysql-master
    environment:
      MYSQL_ROOT_PASSWORD: 123456  # MySQL root 用户的密码
      MYSQL_DATABASE: test_db  # 要创建的数据库名称
    ports:
      - "3001:3306"  # 映射到主服务器的端口
    volumes:
      - ./mysql-master/data:/var/lib/mysql  # 挂载数据目录
      - ./mysql-master/config/mysql.conf:/etc/mysql/conf.d/mysql.conf  # 挂载主服务器的配置文件
      - ./mysql-master/log:/var/log/mysql  # 挂载日志目录
    command: --server-id=1 --log-bin=master-bin --binlog-do-db=test_db --binlog-format=row --gtid-mode=ON --enforce-gtid-consistency=ON  # 主服务器的命令参数

  mysql-slave:
    image: mysql:latest
    container_name: mysql-slave
    environment:
      MYSQL_ROOT_PASSWORD: 123456  # MySQL root 用户的密码
      MYSQL_DATABASE: test_db  # 要创建的数据库名称
    ports:
      - "3002:3306"  # 映射到从服务器的端口
    volumes:
      - ./mysql-slave/data:/var/lib/mysql  # 挂载数据目录
      - ./mysql-slave/config:/etc/mysql/conf.d  # 挂载从服务器的配置文件
      - ./mysql-slave/log:/var/log/mysql  # 挂载日志目录
    command: --server-id=2 --log-bin=slave-bin --binlog-do-db=test_db --binlog-format=row --gtid-mode=ON --enforce-gtid-consistency=ON --skip-slave-start  # 从服务器的命令参数
    depends_on:
      - mysql-master  # 确保主服务器先启动

 注意:我使用的mysql用户为默认root,可以自行创建其他用户访问数据库。

在mysql文件夹下执行

docker-compose up -d

 docker 安装mysql8 实现互为主从,docker,容器,mysql

如上图所示表示mysql创建成功。

主从配置

获取主服务器状态信息

在主服务下执行,进入容器

#进入容器内部
docker-compose exec mysql-master bash

#输入用户密码
mysql -u root -p

#为了避免从服务复制出现权限不足的情况需要执行
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

# 查看状态
SHOW MASTER STATUS;

docker 安装mysql8 实现互为主从,docker,容器,mysql

如上图所示,需要记下 FilePosition 的值。

如不配置ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

会出现 如下错误

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.3.150' IDENTIFIED BY '123456'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY '123456'' at line 1

配置从服务器复制

在从服务器下执行,进入容器

#进入容器
docker-compose exec mysql-slave bash

#输入用户密码
mysql -u root -p

#配置从服务器复制
CHANGE MASTER TO MASTER_HOST='192.168.3.150', MASTER_USER='root', MASTER_PASSWORD='123456',MASTER_PORT=3001, MASTER_LOG_FILE='master1-bin.000003', MASTER_LOG_POS=478;

注意

  1. MASTER_HOST='192.168.3.150': 如果在同一个docker 环境下,可以替换成主容器名称,即mysql-master
  2. MASTER_PORT=3001:如果不指定端口默认端口为3306。
  3. MASTER_LOG_FILE='master1-bin.000003', MASTER_LOG_POS=478; 必须指定主服务器的FilePosition 值。

配置成功后可以查看主从状态:

#查看主从配置状态
SHOW REPLICA STATUS\G;

docker 安装mysql8 实现互为主从,docker,容器,mysql

如果从服务器正在运行作为主服务器的复制进程,则应该会看到 Slave_IO_RunningSlave_SQL_Running 字段都显示为 Yes。您还可以查看 Master_Log_FileRead_Master_Log_Pos 字段,以获取关于当前复制位置的信息。如上图所示,已经配置成功。

可能会出现的错误:

 Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

这个错误通常意味着从服务器无法找到在二进制日志索引文件中找到主服务器的第一个日志文件名。

重新初始化从服务器并重新开始复制过程就可以解决。

#停止复制
STOP SLAVE;
#清除从服务器上的复制信息
RESET SLAVE;
#启动复制
START SLAVE;

现在mysql-master为主数据库,mysql-slave为从数据库。实现互为主从,反过来再配置一遍即可。

获取从服务器状态信息

从服务器下执行

#为了避免从服务复制出现权限不足的情况需要执行
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

# 查看状态
SHOW MASTER STATUS;

docker 安装mysql8 实现互为主从,docker,容器,mysql

如上图所示,主从信息是有变化的,同时记录 FilePosition 的值。

配置主服务器复制 

在主服务下执行

#配置主服务器复制
CHANGE MASTER TO MASTER_HOST='192.168.3.150', MASTER_USER='root', MASTER_PASSWORD='123456',MASTER_PORT=3002, MASTER_LOG_FILE='slave-bin.000003', MASTER_LOG_POS=1855;

#开始复制
START SLAVE;

#查看主从配置状态
SHOW REPLICA STATUS\G;

docker 安装mysql8 实现互为主从,docker,容器,mysql如上图所示,即主从配置成功。

测试主从复制

在其中一个数据添加数据

docker 安装mysql8 实现互为主从,docker,容器,mysql

 另外一个数据库查询

docker 安装mysql8 实现互为主从,docker,容器,mysql

做了个gif。

docker 安装mysql8 实现互为主从,docker,容器,mysql文章来源地址https://www.toymoban.com/news/detail-836410.html

到了这里,关于docker 安装mysql8 实现互为主从的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Ubuntu20.04安装Mysql8主从

    1.下载安装包并初始化数据库 2.修改配置文件 3.创建并启动Mysql服务 安装步骤和主数据库的安装步骤基本一样,但配置文件内容不同,以及不必开启远程连接。 1.检查防火墙 关闭主从数据库服务器防火墙或开放3306端口 这里以firewall为例 2.数据库测试是否已经可以访问 3.主数据

    2024年02月08日
    浏览(29)
  • Linux环境下Mysql8的下载、安装、主从模式搭建

      下载地址:MySQL :: Download MySQL Community Server (Archived Versions) 文件名称:mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz 先解压xz xz -d mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz 再解压tar tar -xvf mysql-8.0.17-linux-glibc2.12-x86_64.tar mkdir data groupadd mysql useradd -g mysql mysql chown -R mysql.mysql /data/mysql8 /data/mysql8是解压

    2024年02月08日
    浏览(41)
  • CentOS7安装Mysql8并进行主从复制配置

    CentOS7中安装Mysql8并配置远程连接和修改密码等: CentOS7中安装Mysql8并配置远程连接和修改密码等_霸道流氓气质的博客-CSDN博客 在上面实现安装Mysql8的基础上,克隆出两台机器,修改ip后进行mysql的主从复制搭建。 在主库上把数据更改记录到二进制日志中(Binary Log)中,这些记

    2024年02月16日
    浏览(25)
  • docker 容器启动 mysql8.0失败

    使用docker run命令时启动  mysql8.0镜像时失败, 报错信息如下 :   [ERROR] [MY-010095] [Server] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : /var/lib/mysql-files 原因 :MYSQL新特性secure_file_priv,对读写文件的限制,secure-fil

    2024年02月14日
    浏览(27)
  • Docker 容器搭建mysql 集群(主从数据库)

    目录 1.背景         2.设备及软件版本 3.开始搭建(这里不介绍安装docker及mysql) 3.1创建主数据库容器(master) 3.2查看容器是否创建成功 3.3进入修改容器下的/etc/my.cnf文件 3.3.1先拷贝my.cnf到容器外修改完再覆盖容器原来的my.cnf文件 3.4重启mysql容器使配置文件生效 3.5查看是否

    2024年02月08日
    浏览(84)
  • MYSQL8主从复制

    关键点: 主库 创建一个 远程用户 并 授予复制权限 。 在 主库 和 从库 的 my.cnf 配置 服务器唯一id ; 开启 全局事务ID ; 在 my.cnf 文件中启用 二进制日志 记录,并为其分配一个 唯一的服务器 ID 。 关闭 主节点 和 从节点 的mysql服务。 主服务器配置 每个数据库实例的 服务器ID 要

    2024年02月01日
    浏览(46)
  • 安装 mysql8.0-docker版安装

    docker pull mysql:8.0 //重新创建容器  docker run --name mysql8 -p 3306:3306 -d  -v /home/data/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /home/data/mysql/data:/var/lib/mysql -v /home/data/mysql/log:/logs -e MYSQL_ROOT_PASSWORD=123456 --restart=always  mysql:8.0 --lower_case_table_names=1 1-e MYSQL_ROOT_PASSWORD 设置mysql密码 -v /home/data/mysql/con

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

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

    2024年02月15日
    浏览(29)
  • 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.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)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包