定是备份docker中的postgresql数据库

Q: 定时备份docker中的postgresql数据库

A: 问题可以分为两个子问题

  1. 如何备份dacker中的postgresql
  2. 如何开启定时任务, 执行备份脚本

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

知识点整理

  1. 用当前时间来命名文件
   file="bak_$(date +"%Y%m%d_%H%M%S").sql"
  1. 用crontab执行shell脚本.shell脚本里面的命令必须用绝对路径/usr/bin/docker

  2. 调试crontab日志 , 用mail 或者tail -f /var/log/cron

  3. crontab -e配置文件里要使用环境变量的方式是* * * * * . ~/.zshrc; /xxx/yy.sh

  4. 写完shell脚本之后一定要给shell脚本执行权限

  5. 调试的时候cron可以用 * * * * *, 之后改, 分别代表意思是分 时 日 月 周

如何恢复数据

如果恢复到正式数据库

cat bak_20190801_151806.sql| docker exec -i postgresql  psql -U username

如果恢复到其他数据库

  1. 创建数据库

    create database dbname_prod_bak_20190722  owner username;
    grant all privileges on database dbname_prod_bak_20190722 to username;
    
  2. 恢复数据

cat bak_20190801_151806.sql| docker exec -i postgresql  psql -U username -d dbname_prod_bak_20190722