docker-compose启动mysql失败问题

文章目录


下面记录一下我使用docker-compose同时装多个版本mysql时碰到的问题

docker-compose.yaml配置文件内容如下

version: "3"

services:
  mysql-master:
    image: mysql:8.0.17
    container_name: mysql8.0.17
    command: --server-id=1 --log-bin=mysql-bin --binlog-format=row
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: testdb
      MYSQL_USER: test
      MYSQL_PASSWORD: 123456
    ports:
      - "3308:3306"

执行命令:docker-compose -f docker-compose.yml up -d,启动过程中控制台没有错误
在这里插入图片描述
结果通过docker ps查看不到启动的容器,也没有什么报错信息

通过docker-compose logs查看日志发现了原因
在这里插入图片描述

关键信息是这句
Cannot boot server version 80017 on data directory built by version 80018. Downgrade is not supported

网上搜了一大圈,最终在官方文档中找到原因:
https://dev.mysql.com/doc/refman/8.0/en/downgrading.html

我操作的机器上之前是使用docker-compose装过mysql8.0.18版本的,现在想装mysql8.0.17,版本不兼容,报了这个错误

[root@localhost test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 680b8c60dce6 2 months ago 586MB
mysql 8.0 307199bdf3e2 2 months ago 573MB
mysql 8.0.20 be0dbf01a0f3 4 years ago 541MB
mysql 8.0.18 ed1ffcb5eff3 4 years ago 456MB
mysql 8.0.17 b8fd9553f1f0 5 years ago 445MB

此时不使用docker-compose运行,单独使用docker来运行mysql:8.0.17也是不行的
docker run -d --name=mysql-server8.0.17 -p 3309:3306 -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.17

以下是该命令中每个参数的含义:

  1. -d 将以分离模式(attach mode)运行此容器,以便它在后台运行。
  2. –name 将名称分配mysql-server给您的容器实例。不指定则Docker会生成随机名称
  3. -p 将 MySQL 容器端口绑定3306到主机上的相同端口。您将能够 使用在您的主机上运行的MySQL 客户端连接到 127.0.0.1端口
  4. -v 选项将容器卷 ( /var/lib/mysql)内的数据文件夹绑定到mysql-data您在上一步中创建的本地 Docker 卷ss。
  5. -e 设置环境变量。在这种情况下,MySQL 根密码。
  6. mysql 是我们用来创建容器的图像的名称。

docker exec -it mysql-server8.0.17 mysql -u root -p123456

docker exec -it mysql-server mysql -u root -p123456

解决办法

因为新安装的低版本的mysql会占用默认的数据目录/var/lib/mysql,可以将原来安装的高版本使用的数据目录换个位置存放,即不占用/var/lib/mysql目录,然后再安装低版本即可

  1. 使用本机的绝对路径来作为mysql-server8.0.17这个容器的数据目录
docker run -d --name=mysql-server8.0.17 -p 3309:3306 -v mysql-data:/root/test/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.17
  1. 使用数据卷,运行容器时指定该数据卷作为mysql的数据目录

注意事项

  1. 确保您有足够的权限在宿主机的指定目录上创建和写入文件。
  2. 如果您使用数据卷(如 mysql-data),则 Docker 会处理数据的存储和隔离,而不需要您担心宿主机的具体路径。
  3. 如果您使用的是 Docker Desktop(在 Windows 或 macOS 上),则宿主机路径可能与您预期的不同,特别是如果您使用的是 Docker Desktop 的虚拟机功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值