1:部署mysql数据库
Docker部署数据库很简单,下面我提供几个不同网络场景的命令
监听容器IP
docker run -d --name mysql -p 172.17.0.1:3306:3306 -v ./data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
共享宿主机网络
docker run -d --name mysql --network=host -v ./data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
连接到指定容器网络
docker run -d --name mysql --network my_network -v ./data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
2:数据库管理工具
phpmyadmin
是一个轻量级的mysql管理面板,由mysql官方开发,支持mysql
和mariadb
数据库,功能强大,满足日常运维需求。下面是通过docker-compose.yaml
部署的示例:
services:
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
ports:
- "7890:80" # 映射面板公网端口
environment:
- UPLOAD_LIMIT=128M # 设置上传文件大小限制
# 数据库连接设置
- PMA_HOST=mysql # MySQL 地址
- PMA_PORT=3306 # MySQL 端口号
- PMA_DATABASE=mysql # 默认连接的数据库名称
networks:
- home_default # 连接到指定网络的网名
networks:
home_default:
external: true # 加入已存在的网络
变量里我设置了文件上传限制,是为了方便迁移数据库和导入数据库,因为默认的限制太小了,备份文件大一点就会无法导入。还有就是由于Docker的网络特性,容器的各个网络不互通,想要连接到一个容器需要加入该容器所在的网络,所以这里我指定了网络,如果你不知道另一个容器的网络名称可以使用命令查看:
docker inspect -f '{{.HostConfig.NetworkMode}}' 容器名称或ID
替换实际的容器名称或者ID,如果你的mysql部署在宿主机的话也可以删掉网络配置,指定为host网络模式,修改上述配置的网络为:
network_mode: host
3:定时自动备份数据库
编程的世界里数据是无价的,一个好的程序员养成备份的习惯是基本素养,防止意外发生,最常见的就是服务器宕机了,导致数据丢失,下面我介绍一个我经常使用的一个数据库自动定时备份的工具,简单好用,适合小白。就是mysql-cron-backup
这个项目,支持mysql
和mariadb
数据库,支持自动备份到对象存储,再也不怕一键删库跑路了。
通过docker-compose.yaml
部署的示例:
services:
backup-db:
image: fradelg/mysql-cron-backup
container_name: backup-db
environment:
- MYSQL_HOST=mysql # 数据库地址
- MYSQL_PORT=3306 # 数据库端口
- MYSQL_USER=user # 数据库用户名
- MYSQL_PASS=password # 数据库密码
- MYSQL_DATABASE=db_name # 数据库名称
- MAX_BACKUPS=10 # 保留的备份数量,旧的备份将被清理
- CRON_TIME=0 3 * * * # 每天凌晨3点执行备份
volumes:
- ./backup:/backup # 挂载本地目录用于保存备份
restart: always
networks:
- home_default # 连接到指定网络的名称
networks:
home_default:
external: true # 加入已存在的网络
该配置会每天凌晨3点自动备份数据库到本地./backup
目录,并且我配置了只保留最新的10个备份,防止占满存储。
想要恢复备份也是非常的简单,一条命令即可:
docker container exec backup-db /restore.sh ./backup/<your_sql_backup_gz_file>
该命令的意思是恢复当前目录内的./backup/<your_sql_backup_gz_file>
文件,需替换具体备份的数据库文件名称。如果恢复成功,会输出Restore succeeded
否则会输出Restore failed
,配置里我也是指定了Docker网络,如果你想要备份宿主机的数据库,同样的替换网络配置即可。
Comments NOTHING