postgresql数据库自动备份和还原shell脚本

备份

#!/bin/sh

cd /data/backups/ #进入你想保存的备份文件的路径
ls -lt|grep .dump|awk '{if(NR>10){print $9}}'|xargs rm -rf #只保留时间早的10个,其余删除
dbname=$(date +%d_%m_%Y_%H_%M_%S_you_database_name.dump) #备份数据库名 时间+你自己喜欢的名称

pg_dump -h 127.0.0.1 -p 5432 -U db_user -F c db_name -f /data/backups/${dbname} #开始备份 db_name是要备份的数据库名,db_user 是连接数据的用户名,要对db_name数据库有所有权

另外需要在postgres用户下添加免登文件

-rw-------  1 postgres postgres       56 Jan  9 16:58 .pgpass #名称权限和属组必须是这样,位置要在postgres用户的home目录下

内容固定格式

127.0.0.1:5432:db_name:db_user:password

注意:这行不在文件里 ip:point:登录数据库名称:免登陆用户名:密码

不明白的百度postgres 保存密码就会有详细解释了

注意!!完成之后别忘了写一个crontab。。


还原

一般还原多用在测试机器上,需要同步线上数据库,so 大家看看就好,但愿线上永远用不到还原。。

#!/bin/sh

 latestdb=`ssh you_login_name@host_ip 'ls -t /data/backups/|grep you_database_name|head -1|cut -d " " -f 2'` #别忘了ssh-keygen免密登录,怎么实现大家百度吧, !!ssh 如果需要输入端口也记得加上

 scp  you_login_name@host_ip:/data/backups/$latestdb /home/postgres/
 pg_restore -h 127.0.0.1 -p 5432 -U db_user_dev -d postgres -C /home/postgres/$latestdb #一般我喜欢用必有数据库postgres来做第一次的链接,当然可以换成其他数据库,前提得保证db_user_dev用户可连接,就是个登录作用,并不会吧数据还原到此数据上的。别忘了数据库的免密登录,上面有些

 psql -d postgres -c "alter database db_name owner to db_user_dev;alter database db_name rename to dev_${latestdb:0:5};"#把还原的数据库改为你想要的名字,db_name 是pg_dump时的db_name,不是文件名 。

后面改的名字你们自己定咯


写一下本文用到的变量,也是大家需要着重更改的

db_user:线上备份用到的连接备份库的用户名

db_name:线上被备份的数据名

password:db_user登录密码

you_login_name:登录线上机器用户名

host_ip:线上机器ip

you_database_name:线上备份文件通用名称,不包括时间戳

db_user_dev:测试机器数据库连接用户名


大家有什么想法和意见留言哦!

如发现问题记着留言哦!


你可能感兴趣的:(postgresql)