Q: 定时备份docker中的postgresql数据库
A: 问题可以分为两个子问题
- 如何备份dacker中的postgresql
- 如何开启定时任务, 执行备份脚本
pg_bak.sh ( 注意命令路径必须使用绝对路径)
#!/bin/sh
file="bak_$(date +"%Y%m%d_%H%M%S").sql"
/usr/bin/docker exec -t postgresql pg_dump -U username -d dbname > "/data/pg_bak/${file}"
赋予脚本执行权限
chmod +x pg_bak.sh
crontab -e
# 用每分钟一次来调试
* * * * * . ~/.bash_profile; /data/pg_bak/pg_bak.sh
# 实际用每天11点钟
0 11 * * * . ~/.bash_profile; /data/pg_bak/pg_bak.sh
知识点整理
- 用当前时间来命名文件
file="bak_$(date +"%Y%m%d_%H%M%S").sql"
-
用crontab执行shell脚本.shell脚本里面的命令必须用绝对路径
/usr/bin/docker
-
调试crontab日志 , 用
mail
或者tail -f /var/log/cron
-
crontab -e配置文件里要使用环境变量的方式是
* * * * * . ~/.zshrc; /xxx/yy.sh
-
写完shell脚本之后一定要给shell脚本执行权限
-
调试的时候cron可以用 * * * * *, 之后改, 分别代表意思是分 时 日 月 周
如何恢复数据
如果恢复到正式数据库
cat bak_20190801_151806.sql| docker exec -i postgresql psql -U username
如果恢复到其他数据库
-
创建数据库
create database dbname_prod_bak_20190722 owner username; grant all privileges on database dbname_prod_bak_20190722 to username;
-
恢复数据
cat bak_20190801_151806.sql| docker exec -i postgresql psql -U username -d dbname_prod_bak_20190722