Docker 安装 Mysql

发布于:2025-03-24 ⋅ 阅读:(51) ⋅ 点赞:(0)

以下是安装Docker版MySQL 8.0.25并实现目录挂载的步骤:
docker仓库:https://hub.docker.com/_/mysql


1. 拉取Mysql镜像文件

docker pull mysql:8.0.25

2. 创建mysql临时容器服务

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:8.0.25

3. 创建宿主机挂载目录

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. 调整目录权限(避免权限问题)

#[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. 将容器中的数据、配置信息复制到宿主机

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:

[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,例如:

echo "CREATE DATABASE IF NOT EXISTS test_nacos;" > /root/docker/mysql/init/test.sql

8. 启动MySQL容器

# 删除临时容器
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)。

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

9. 验证容器运行状态

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

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

docker start mysql   # 开启
docker stop mysql    # 关闭
docker restart mysql # 重启

11. 检查挂载内容

  • 数据持久化/root/docker/mysql/data 会保存所有数据库文件。
  • 配置生效:进入容器检查配置:
    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容器将实现数据、配置、脚本和日志的完整挂载,确保持久化和可维护性。