Docker 安装 Mysql

以下是安装Docker版MySQL 8.0.25并实现目录挂载的步骤:

docker仓库:https://hub.docker.com/_/mysql


1. 拉取Mysql镜像文件

bash 复制代码
docker pull mysql:8.0.25

2. 创建mysql临时容器服务

bash 复制代码
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:8.0.25

3. 创建宿主机挂载目录

bash 复制代码
mkdir -p /root/docker/mysql/{data,init,conf,logs}
  • /root/docker/mysql/data :映射容器的 /var/lib/mysql(数据库文件)
  • /root/docker/mysql/init :映射容器的 /docker-entrypoint-initdb.d(初始化 SQL/Shell 脚本)
  • /root/docker/mysql/conf :映射容器的 /etc/mysql/conf.d(自定义配置文件)
  • /root/docker/mysql/logs :映射容器的 /var/log/mysql(自定义日志文件)

4. 调整目录权限(避免权限问题)

bash 复制代码
#[root@localhost ~]# docker run --rm mysql:8.0.25 sh -c 'cat /etc/passwd | grep mysql'
#mysql:x:999:999::/home/mysql:/bin/sh
chmod -R 755 /root/docker/mysql/{data,init,conf,logs}
chown -R 999:999 /root/docker/mysql/data  # MySQL容器内默认使用UID/GID 999
chmod -R 777 /root/docker/mysql/logs      # 确保容器可写入日志

5. 将容器中的数据、配置信息复制到宿主机

bash 复制代码
docker cp mysql:/var/lib/mysql/. /root/docker/mysql/data
docker cp mysql:/docker-entrypoint-initdb.d/. /root/docker/mysql/init
docker cp mysql:/etc/mysql/conf.d/. /root/docker/mysql/conf

6. 准备MySQL配置文件

创建或编辑配置文件 `/root/docker/mysql/conf/my.cnf:

ini 复制代码
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
# 错误日志
log_error = /var/log/mysql/error.log
# 可选:启用通用日志和慢查询日志
general_log = 1
general_log_file = /var/log/mysql/mysql.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log

# 其他自定义配置...

7. 准备初始化脚本(由于步骤2已完成初始化导致该测试脚本未生效)

将SQL脚本(如建表语句)放入 /root/docker/mysql/init,例如:

bash 复制代码
echo "CREATE DATABASE IF NOT EXISTS test_nacos;" > /root/docker/mysql/init/test.sql

8. 启动MySQL容器

bash 复制代码
# 删除临时容器
docker rm -f mysql
# 启动新容器
docker run -d \
  --name mysql \
  -p 3306:3306 \
  #--restart unless-stopped
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -v /root/docker/mysql/data:/var/lib/mysql \
  -v /root/docker/mysql/init:/docker-entrypoint-initdb.d \
  -v /root/docker/mysql/conf:/etc/mysql/conf.d \
  -v /root/docker/mysql/logs:/var/log/mysql \
  mysql:8.0.25 \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_unicode_ci
参数说明
  • -d:后台运行容器。
  • --name mysql:容器名称。
  • -p 3306:3306:将宿主机的 3306 端口映射到容器的 3306 端口。
  • -e MYSQL_ROOT_PASSWORD:设置 MySQL root 用户的密码(必填)。
  • -v:将容器内的 /var/lib/mysql 目录挂载到宿主机,确保数据持久化。
  • --character-set-server--collation-server:配置字符集和排序规则(可选)。
  • --restart:mysql重启策略。
    • no:不自动重启容器(默认值)。

    • always:容器无论退出状态如何都会自动重启。

    • unless-stopped:容器除非被手动停止,否则会自动重启。

    • on-failure:仅当容器因错误退出时才重启,你还可以设置最大重启次数(例如 on-failure:5)。

      bash 复制代码
      # 由于运行时没有设置mysql的启动策略,这里需要更新重启策略配置
      docker update --restart unless-stopped mysql
      # 查看重启策略
      docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' mysql

9. 验证容器运行状态

bash 复制代码
docker ps -a | grep mysql   # 检查状态是否为Up
docker logs mysql           # 查看启动日志,确认无报错

10. 容器开启、关闭、重启

bash 复制代码
docker start mysql   # 开启
docker stop mysql    # 关闭
docker restart mysql # 重启

11. 检查挂载内容

  • 数据持久化/root/docker/mysql/data 会保存所有数据库文件。

  • 配置生效 :进入容器检查配置:

    bash 复制代码
    docker exec -it mysql bash
    cat /etc/mysql/conf.d/my.cnf
  • 初始化脚本 :首次启动后,/root/docker/mysql/init中的脚本会自动执行。

  • 日志文件 :在 /root/docker/mysql/logs 下查看 error.log 等日志。


常见问题解决

  • 权限拒绝 :确保挂载目录权限正确(尤其 datalogs)。
  • 配置不生效 :检查配置文件路径是否为 /etc/mysql/conf.d
  • 日志未生成 :确认 my.cnf 中的日志路径与挂载路径一致。

通过以上步骤,MySQL 8.0.25容器将实现数据、配置、脚本和日志的完整挂载,确保持久化和可维护性。

相关推荐
潇湘馆记3 小时前
MySQL 事务(Transaction)详解
数据库·mysql
九思x3 小时前
使用Docker部署RabbitMQ
docker·容器·rabbitmq
m0_748240254 小时前
【MySQL】环境变量配置
数据库·mysql·adb
是阿建吖!4 小时前
【MySQL】内置函数
数据库·mysql
檀越剑指大厂5 小时前
【Docker系列五】Docker Compose 简介
运维·docker·容器
S+叮当猫5 小时前
15:视图
数据库·sql·mysql
钢板兽6 小时前
MySQL高频八股——索引
数据库·后端·mysql·面试
XMYX-08 小时前
Docker-Compose 实战:解决 Zookeeper 容器挂载错误及 ulimit 配置问题
docker·zookeeper
JxHillMan9 小时前
Ubuntu 上安装 Docker
linux·ubuntu·docker
ONE_PUNCH_Ge9 小时前
Ubuntu Docker 安装
docker