共计 808 个字符,预计需要花费 3 分钟才能阅读完成。
不知道大家有没有过想保存已经运行的 mysql 容器为镜像的经验,如果有的话你会发现 commit 以后再运行的 mysql 能启动,但是数据没有保存过来。如果你不知道什么的话,看看阿蛮君的这篇文章 Docker commit 镜像后数据丢失。
既然已经知道了问题所在,那么想办法解决问题,只需要更改 mysql 的数据目录即可。
1. 正常方式启动 mysql
docker run -d \
--name mysql8 \
-p 3306:3306 \
-v /home/docker/mysql8/conf.d:/etc/mysql/conf.d \
-v /home/docker/mysql8/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart always mysql:8.0.26
2. 修改配置文件
进入容器新建目录并复制数据,并修改配置文件。
# 进入容器
docker exec -it mysql8 bash
# 创建目录
mkdir /var/lib/mysql2
# 复制数据
cp -r /var/lib/mysql/* /var/lib/mysql2
# 创建配置文件,修改指定的数据保存的目录
cat >> /etc/mysql/my.cnf <<EOF
[mysqld]
datadir = /var/lib/mysql2
EOF
3. 提交为镜像
接下来可以尝试在 mysql 添加一些数据,看看新的镜像是否会保存数据。
# 提交镜像
docker commit -m 'commit mysql8' mysql8 my-mysql
4. 运行新的镜像
docker run -d \
--name mysql8 \
-p 3306:3306 \
-v /home/docker/mysql8/conf.d:/etc/mysql/conf.d \
--restart always my-mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart always my-mysql
提醒:本文发布于609天前,文中所关联的信息可能已发生改变,请知悉!
AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完
发表至: 瞎折腾
2023-03-23