使用shell脚本+Cron任务自动执行postgres数据库备份
思路:先创建一个shell脚本,用于备份pgsql数据库,再使用Cron任务,根据自己需求设置定时任务。
环境:centos7+postgres12.0
一、创建一个根据日期来定义备份文件名的脚本
1. 创建db_backup.sh文件
touch db_backup.sh
2. 赋予777权限
chmod -R 777 db_backup.sh
二、对db_backup.sh文件进行编写脚本
编辑db_backup.sh
#!/bin/bash #备份路径 path=/home/postgres/db_back; #创建备份路径文件 if [ ! -d "$path" ];then mkdir -p $path; fi #获取备份日期时间 cur_time=$(date '+%Y-%m-%d-%H-%M-%S') #db数据库名称 dbname=oyzData_CivilAirDefence_NeiMengGu_Xilinguolemeng_postgresql #执行备份命令 /usr/local/pgsql/bin/pg_dump -h 127.0.0.1 -U postgres -p 5432 -E UTF8 -f ${path}/backup_$cur_time.sql ${dbname} --inserts
三、编辑crontab以创建新的cron任务
1、编辑cron定时任务
crontab -e
2、每周六凌晨五点备份(具体备份时间以自己公司要求为准)
00 5 * * 6 /usr/local/sbin/db_backup.sh
四、重启cron定时任务
systemctl restart crond
五、备份的数据就保存在/home/postgres/db_back目录下。
六、使用定时任务执行db_backup.sh备份脚本备份结果为空
1、用crontab自动备份postgresql的时候导出总是为空,原因是corn的环境变量中没有pg_dump,所以用crontab执行pg_dump的时候要加上绝对路径,如:/usr/local/pgsql/bin/pg_dump xxxxxxx这样就可以了。
2、如果系统中配置了mysql的环境变量,可以在脚本的开头添加一行:
#!/bin/bash source /etc/profile
七、shell脚本备份docker 容器中 postgresql 数据库
#!/bin/bash #备份路径 folder=/backup/pgdatabackup if [ ! -d folder ];then mkdir -p "$folder" fi cd $folder day=`date +%Y%m%d%H%M%S` #备份文件名称 FILENAME=$day.sql #数据登录用户名 user=postgres #数据库密码 password=123456 #数据库名称 db=postgres #空器名称 container=postgresql #执行备份命令 docker exec -i $container /bin/bash -c 'PASSWORD='$password' /usr/bin/pg_dump -E UTF8 -p 5432 -U '$user' -d '$db' --column-inserts > /home/'$FILENAME'' #复制容器内备份文件 docker cp ''$container':/home/'$FILENAME'' ''$folder'/'$FILENAME'' #删除容器内备份文件 docker exec -i $container /bin/bash -c 'rm -rf /home/'$FILENAME''
八、导入数据,执行sql
psql -U postgres -d postgres -f /home/postgres/user.sql
参数解释:
-U:用户
-d:数据库名称
–f:指定文件路径
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析