莲湖区邓紫棋头像

Docker 部署 MySQL:本地目录挂载(Bind Mounts)实战笔记

一、 核心原理与目的
为什么要用本地目录挂载?
不用挂载,容器一删数据灰飞烟灭;用挂载,宿主机和容器共享同一块物理硬盘空间。

数据持久化:数据存宿主机,删容器不丢数据。

配置修改方便:直接在宿主机改 my.cnf,不用进容器。

自动化建库:通过挂载 SQL 脚本,容器首次启动时自动建库建表。

二、 前置准备(标准三步曲)

  1. 创建宿主机目录
    在 /root 下建好专门管理 MySQL 的文件夹。
mkdir -p /root/mysql/data
mkdir -p /root/mysql/conf
mkdir -p /root/mysql/init
  1. 准备配置文件和初始化脚本
    配置文件 my.cnf:解决中文乱码(UTF8MB4)。
echo -e "[mysqld]\ncharacter-set-server=utf8mb4\ncollation-server=utf8mb4_unicode_ci" > /root/mysql/conf/my.cnf

初始化脚本 init.sql:首次启动时自动建一个测试库。

echo "CREATE DATABASE IF NOT EXISTS test_db;" > /root/mysql/init/init.sql
  1. 赋予数据目录最高权限(极其重要)
    MySQL 容器内的用户经常因为宿主机目录权限不足而启动失败,直接给 777。
chmod -R 777 /root/mysql/data

三、 标准启动命令

复制下面这段完整命令,一把过:

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /root/mysql/data:/var/lib/mysql \
  -v /root/mysql/init:/docker-entrypoint-initdb.d \
  -v /root/mysql/conf:/etc/mysql/conf.d \
  mysql:8.0

(注:如果你的系统有网络转发Bug,可以将 -p 3306:3306 替换为 --network host)

三个挂载参数深度解析:

-v /root/mysql/data:/var/lib/mysql:存数据的,里面有表结构、记录等。

-v /root/mysql/init:/docker-entrypoint-initdb.d:魔法目录,放进去的 .sql 会在第一次启动时自动执行。

-v /root/mysql/conf:/etc/mysql/conf.d:放配置文件的,覆盖容器默认配置。
四、 验证是否成功
看状态:docker ps,出现 Up 即成功。

看数据:打开左侧 SFTP,进入 /root/mysql/data,刷新,如果看到一堆 ibdata1、mysql 等文件,说明挂载生效了。

验脚本:进入容器连 MySQL,看 test_db 库是否存在。

docker exec -it mysql mysql -uroot -p123 -e "show databases;"

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_50379372/article/details/170294727

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--