使用 Docker Compose 安装 MySQL 以及所遇到的问题解决

本文详细指导如何使用DockerCompose在Linux下安装MySQL8.1.0,包括数据持久化设置、docker-compose.yml编写,以及在遇到网络桥接创建和版本升级错误时的解决方案。

简介

本文章将详细介绍如何使用 Docker Compose 安装 MySQL 以及所遇到的问题解决。

相关文章参考:
Linux操作系统下Docker和Docker Compose的安装教程(包含x86和arm64平台离线一键安装资源包)

版本如下

名称版本
MySQL8.1.0
CentOS7.6+
Docker20.10.22
Docker Compose1.23.1

1. 安装步骤

整体文件结构:

[root@localhost mysql] tree -L 1
.
├── data
├── docker-compose.yml
└── log

1.1 数据持久化

# 创建持久化文件夹
[root@localhost mysql] mkdir -p log
[root@localhost mysql] mkdir -p data
[root@localhost mysql] chmod +777 log
[root@localhost mysql] chmod +777 data

1.2 创建docker compose文件

#创建docker compose文件
[root@localhost mysql] vim docker-compose.yml

具体内容如下:

version: "3.7"

networks:
  mysql:   #对应“mysql网桥”
    external: true

services:
  mysql:
    image: mysql:8
    restart: always
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: "root" # root密码
      # MYSQL_USER: test  # 新用户账号
      # MYSQL_PASSWORD: root # 新用户 密码
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql
      - ./log:/var/log/mysql
    networks:
      - mysql #网桥 这里的网桥名称“mysql”

1.3 安装使用

# 执行安装
[root@localhost mysql] docker network create mysql
a4465fd58291621302219908b7407a8a4586621b6817162cc359e1286fec8a6a
[root@localhost mysql] docker-compose up -d
Creating mysql ... done
[root@localhost mysql]

Navicat 主机ip:3306
root账户密码也为root

在这里插入图片描述

2. 问题解决

2.1 网桥创建报错

直接执行 docker-compose up -d 报错:
ERROR: Network mysql declared as external, but could not be found.

[root@localhost mysql] docker-compose up -d
ERROR: Network mysql declared as external, but could not be found. Please create the network manually using `docker network create mysql` and try agai

解决办法:
按照报错提示先执行命令 docker network create mysql
再次 docker-compose up -d 即可

2.2 升级MySQL版本报错

MySQL镜像版本升级为最新(mysql:latest)后重新执行 docker-compose up -d 报错:
[ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.

023-08-03T02:17:11.613448Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
2023-08-03T02:17:11.613472Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
2023-08-03T02:17:11.613582Z 0 [ERROR] [MY-010119] [Server] Aborting
2023-08-03T02:17:11.613960Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.1.0)  MySQL Community Server - GPL

解决办法:
1.删除MySQL容器

[root@localhost mysql] docker stop mysql
[root@localhost mysql] docker rm mysql

2.删除映射的持久化目录 data (./data:/var/lib/mysql)

[root@localhost mysql] rm -rf data

3.重新创建持久化文件夹和容器

[root@localhost mysql] mkdir -p data
[root@localhost mysql] chmod +777 data
[root@localhost mysql] docker-compose up -d
Creating mysql ... done
[root@localhost mysql] docker logs -f mysql # 查看日志是否安装成功

相关文章参考:
Linux操作系统下Docker和Docker Compose的安装教程(包含x86和arm64平台离线一键安装资源包)

使用 Docker Compose 安装 MySQL 可按以下步骤进行: ### 环境准备 在开始之前,需要确保已经安装Docker Compose,如果没有安装或者不熟悉 Compose,可查阅 Docker 实战:使用 Docker Compose 实现高效的多容器部署 [^3]。 ### 目录结构 创建一个名为 `docker-mysql` 的目录,目录结构如下: ```plaintext docker-mysql/ ├── docker-compose.yml └── my.cnf # 可选:自定义配置文件 ``` ### `docker-compose.yml` 配置 `docker-compose.yml` 配置示例如下: ```yaml version: "3.9" services: mysql: image: mysql:8.0 container_name: mysql8 restart: always ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root123456 # root用户密码(必填) MYSQL_DATABASE: demo_db # 自动创建数据库 MYSQL_USER: dev_user # 创建新用户 MYSQL_PASSWORD: dev_pass # 用户密码 volumes: - ./data:/var/lib/mysql # 数据持久化路径 - ./my.cnf:/etc/mysql/conf.d/my.cnf # 可选:自定义配置 networks: - mysql_net networks: mysql_net: driver: bridge ``` 参数详解: - `image`:使用官方的 `mysql:8.0` 镜像。 - `container_name`:容器名称。 - `restart: always`:容器异常退出后自动重启。 - `ports`:主机与容器的端口映射,默认 MySQL 为 3306。 - `environment`:配置 MySQL 初始参数(环境变量)。 - `volumes`:挂载数据和配置,确保持久化。 - `networks`:自定义网络,支持多服务联通 [^5]。 ### `my.cnf` 自定义配置(可选) 如果需要自定义配置,可创建 `my.cnf` 文件,示例配置如下: ```plaintext [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_general_ci sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION ``` ### 启动 MySQL 容器 在 `docker-mysql` 目录下,执行以下命令启动 MySQL 容器: ```bash docker-compose up -d ``` 通过以上步骤,即可在几分钟内启动一个 MySQL 容器,并开始存储和检索数据。如果需要更多关于使用 DockerDocker Compose 的教程,请查看 Docker 教程 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值