文章目录
- 前言
- 一、获取需要备份的数据库的信息
- 二、备份步骤
- 1.准备工作
- 2.手动备份
- 3.定时任务自动备份
- 总结
前言
记录一下在k8s运行的数据库的备份步骤。
我的思路是新建一个数据库的容器作为工具容器,通过工具容器执行mysqldump命令进行备份,最后通过定时任务来执行命令。没有涉及保留时间的问题
一、获取需要备份的数据库的信息
kubectl get svc -A
mariadb mariadb ClusterIP 10.233.20.235 <none> 3306/TCP 71d
mariadb mariadb-nodeport NodePort 10.233.31.133 <none> 3306:30901/TCP
二、备份步骤
1.准备工作
# 准备备份目录
mkdir -p /data/backup/mysql/
# 获取镜像
docker pull dockerpull.cn/bitnami/mariadb:10.5.11-debian-10-r0
# 运行备份用数据库容器
docker run --name mariadb-bak-tool -d -e TZ=Asia/Shanghai -e MARIADB_ROOT_PASSWORD=passwd@123456 dockerpull.cn/bitnami/mariadb:10.5.11-debian-10-r0
2.手动备份
# 利用pod的容器网络的IP连接
/usr/bin/docker exec -it mariadb-bak-tool mysqldump -uroot -ppasswd@123456 --host=10.233.20.235 --port=3306 --all-databases > /data/backup/mysql/all_databases_backup_$(date +"%Y%m%d-%H:%M").sql# 使用nodeport连接
/usr/bin/docker exec -it mariadb-bak-tool mysqldump -uroot -ppasswd@123456 --host=XXX.XX.XX.XX --port=30901 --all-databases > /data/backup/mysql/all_databases_backup_$(date +"%Y%m%d-%H:%M").sql
3.定时任务自动备份
10 6 * * * /usr/bin/docker exec mariadb-bak-tool mysqldump -uroot -ppasswd@123456 --host=XXX.XX.XX.XX --port=30901 --all-databases > /data/backup/mysql/all_databases_backup_$(date +"\%Y\%m\%d-\%H:\%M").sql 2>&1
注意:
- cron环境中不支持交互式终端,需要去掉-it参数
- crontab中百分号需要转义
总结
记录一下,后续在项目中用。