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容器将实现数据、配置、脚本和日志的完整挂载,确保持久化和可维护性。

相关推荐
Fleshy数模1 天前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
az44yao1 天前
mysql 创建事件 每天17点执行一个存储过程
mysql
秦老师Q1 天前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
橘子131 天前
MySQL用户管理(十三)
数据库·mysql
Dxy12393102161 天前
MySQL如何加唯一索引
android·数据库·mysql
我真的是大笨蛋1 天前
深度解析InnoDB如何保障Buffer与磁盘数据一致性
java·数据库·sql·mysql·性能优化
怣501 天前
MySQL数据检索入门:从零开始学SELECT查询
数据库·mysql
啦啦啦小石头1 天前
Docker 换源
docker
人道领域1 天前
javaWeb从入门到进阶(SpringBoot事务管理及AOP)
java·数据库·mysql
千寻技术帮1 天前
10404_基于Web的校园网络安全防御系统
网络·mysql·安全·web安全·springboot