docker初始化mysql数据及数据持久化
docker mysql初始化数据及数据持久化
1.初始化默认数据
原理
当Mysql容器首次启动时,会在 /docker-entrypoint-initdb.d/目录下扫描 .sh、.sql、.sql.gz类型的文件。如果这些类型的文件存在,将执行它们来初始化一个数据库。这些文件会按照字母的顺序执行。默认情况下它们会初始化在启动容器时声明的 MYSQL_DATABASE变量定义的数据库中,例如下面的命令会初始化一个REGION_DB 数据库:
docker run --name some-mysql -e MYSQL_DATABASE=REGION_DB -d mysql:tag
如果你的启动命令没有指定数据库那么就必须在数据库DDL脚本中声明并指定使用该数据库。否则就会实现下面的异常:
ERROR 1046 (3D000) at line 7: No database selected
操作
我们经常会在mysql容器启动时,需要初始化一些数据库、数据表或者其他默认数据。其实mysql早已支持我们这种需求,具体方案如下:
# 其实主要的做法就是重新build mysql镜像
# 新建Dockerfile
FROM mysql:5.7
COPY sql/*.sql /docker-entrypoint-initdb.d/
# gantt.sql文件
create database `gantt` default character set utf8 collate utf8_general_ci;
# build镜像(tag需要更新为自己需要镜像tag)
docker build -t tag .
2.mysql数据持久化
数据持久化主要是将mysql中的数据内容映射到宿主机,从而保证数据的可以永久保存(down - v 后数据依然在),如果需要完全迁移数据,则需要将映射在宿主机的文件一并迁移。docker-compose.yml文件配置如下:
version: '2.3'
services:
schedule-mysql:
image: hub.infervision.com/dev/viewer-collection:schedule-mysql-5.7
restart: always
ports:
- 3311:3306
volumes:
- ./mysql_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_USER=gantt
- MYSQL_PASSWORD=gantt
分类:
Docker
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!