mysql升级导致docker启动失败问题

588 阅读3分钟

docker-compose.yml

version: '3'
services:
  redis:
    platform: linux/x86_64
    image: redis
    command: ["redis-server", "--appendonly", "yes","--requirepass","redis_password"]
    ports:
      - '6379:6379'
    volumes:
      - redis-data:/data
    container_name: redis-master
  mysql:
    platform: linux/x86_64
    image: mysql:8.0
    volumes:
      - mysql-data:/var/lib/mysql
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: mysql_admin
      MYSQL_PASSWORD: mysql_password
      MYSQL_DATABASE: db_name
    ports:
      - "3306:3306"
volumes:
  redis-data:
  mysql-data:

因为MySQL从5.0升级到8.0,docker-compose up的时候出现以下报错

报错:

mysql         | 2023-12-01 07:50:32+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
mysql         | 2023-12-01 07:50:32+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.33-1.el8 started.
mysql         | '/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
mysql         | 2023-12-01T07:50:33.374098Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
mysql         | 2023-12-01T07:50:33.375585Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.33) starting as process 1
mysql         | 2023-12-01T07:50:33.382865Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
mysql         | 2023-12-01T07:50:33.453475Z 1 [ERROR] [MY-012526] [InnoDB] Upgrade is not supported after a crash or shutdown with innodb_fast_shutdown = 2. This redo log was created with MySQL 5.7.39, and it appears logically non empty. Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/upgrading.html
mysql         | 2023-12-01T07:50:33.453562Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
mysql         | 2023-12-01T07:50:33.911643Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
mysql         | 2023-12-01T07:50:33.911866Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
mysql         | 2023-12-01T07:50:33.911911Z 0 [ERROR] [MY-010119] [Server] Aborting
mysql         | 2023-12-01T07:50:33.913351Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.33)  MySQL Community Server - GPL.

解决方案:

  1. 备份数据(如果需要):

    在执行任何可能影响数据完整性的操作之前,请确保先备份你的 MySQL 数据。

  2. 清理 MySQL 数据目录:

    由于 MySQL 版本升级,清理数据目录以确保新版本的初始化。

    docker-compose down
    docker volume rm [your_mysql_volume]
    

    替换 [your_mysql_volume] 为你的 MySQL 数据卷名称,可以通过docker volume ls查看

  3. 更新 Docker Compose 文件:

    mysql 服务的配置中,添加一个环境变量以启用 MySQL 进行升级。更新 Docker Compose 文件中的 MySQL 服务部分:

version: '3'
services:
  redis:
    platform: linux/x86_64
    image: redis
    command: ["redis-server", "--appendonly", "yes","--requirepass","redis_password"]
    ports:
      - '6379:6379'
    volumes:
      - redis-data:/data
    container_name: redis-master
  mysql:
    platform: linux/x86_64
    image: mysql:8.0
    volumes:
      - mysql-data:/var/lib/mysql
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_USER: mysql_admin
      MYSQL_PASSWORD: mysql_password
      MYSQL_DATABASE: db_name
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      MYSQL_UPGRADE: "1"
    ports:
      - "3306:3306"
volumes:
  redis-data:
  mysql-data:

  1. 重新启动容器:

bash Copy code docker-compose up -d 这会重新创建容器,MySQL 将尝试执行升级。