docker内的mysql容器的数据持久化
为什么需要数据持久化
容器只是一个状态,启动后的mysql 容器作为一个运行的状态是没有对数据进行持久化的,这也导致了在容器停止或者删除后,mysql内的数据消失。以此类推,其余需要进行数据存储的服务,在删除容器后,数据均不会保存。(但是部分服务由于其服务内容的特殊性,可能会有其余方式保存数据:例如网络服务通过后端接口存储数据)
启动容器
mysql容器建议统一使用 docker-compose 启动,便于管理参数,多场景开发时,不用敲复杂的命令
version: "2" #版本号,常用2和3
services:
nginx: #服务名,在网络请求时(例如apache server),可以当作hosts使用
container_name: fastapi-mysql #启动时的容器名称
image: mysql:5.7.20 #启动容器需要的基础镜像,本地没有会从docker源pull
volumes: #挂载卷,用以持久化数据或者对源镜像新增内容或功能
- ./config/my.cnf:/etc/my.cnf #数据库配置,可以在my.cnf自定义配置项
- ./db_data:/var/lib/mysql #mysql的数据都存储在/var/lib/mysql中,将这个目录进行外部挂载,以达到数据持久化的目的
- ./init:/docker-entrypoint-initdb.d/ #初始化数据库,例如创建一个user用户,创建一个database等
ports:
- "3300:3306"
environment: #环境变量,在docker mysql官方镜像中有写,必须最少指定root密码
- MYSQL_ROOT_PASSWORD=highsai123
- MYSQL_DATABASE=investment
restart: always
将以上代码保存为” docker-compose.yml “,在对应目录下执行:
docker-compose up -d
容器正确启动后,对mysql 容器的数据持久化就已经完成了,但是数据持久化不等于数据备份,删除mysql数据后,本地数据也会消失。所以还需要做好备份工作