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.
解决方案:
-
备份数据(如果需要):
在执行任何可能影响数据完整性的操作之前,请确保先备份你的 MySQL 数据。
-
清理 MySQL 数据目录:
由于 MySQL 版本升级,清理数据目录以确保新版本的初始化。
docker-compose down docker volume rm [your_mysql_volume]替换
[your_mysql_volume]为你的 MySQL 数据卷名称,可以通过docker volume ls查看 -
更新 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:
- 重新启动容器:
bash Copy code docker-compose up -d 这会重新创建容器,MySQL 将尝试执行升级。