PgSQL定时备份
1, 综述:
下面主要是通过SQL转储的方式备份PostgreSQL, SQL 转储的方法是创建一个文本文件,这个文本里面都是 SQL 命令,当把这个文件回馈给服务器时,将重建与转储时状态一样的数据库。
2, 备份命令
(1) PostgreSQL 自带的内置备份工具叫做 pg_dump
实例:
#su - postgres #cd/usr/local/postgressql/bin #./pg_dump mydb > test_db.out
从转储中恢复
#./created restoredb
#./psql –d restoredb < test_db.out
(2) 当遇到大数据库时候,请使用以下方式
实例:
#su - postgres #cd /usr/local/postgressql/bin #./pg_dump –Ft –b mydb > test_db.tar
恢复大数据库
#./created restored #pg_restore –d restored test_db.tar
(3) 备份整个数据库使用pg_dumpall
实例:
#su - postgres #cd /usr/local/postgressql/bin #./pg_dumpall –U postgres > alldb.out
恢复数据库
#./psql –Upostgresql < alldb.out
一旦恢复成功,建议使用
#vacuumdb -a –z
3, 计划备份任务
(1) 编写一个备份脚本
#vim /home/postgres/backup.sh
#shell variables date_now=`date +%Y%m%d` back_dir=./ back_log_dir="./backup.log" rmback_log_dir="./rmback.log" #postgresql bakup /usr/local/postgressql/bin/pg_dump -U postgres mydb >$back_dir/$date_now.out if [ $? = 0 ];then echo "$date_now postgresql backup success" >>$back_log_dir echo "" >> $back_log_dir else echo "$date_now postgresql backup failed" >> $back_log_dir echo "" >>$back_log_dir fi #rm back files find $back_dir -mtime +8 -exec rm -fr {} \; if [ $? = 0 ];then echo "$date_now rm backup files successful">>$rmback_log_dir echo "" >>$rmback_log_dir else echo "$date_now rm backup files failed">>$rmback_log_dir echo "" >>$rmback_log_dir fi
#chmod –R 777 backup.sh #mkdir –p /data/backupdb #mkdir –p /var/log/pgsqllog/rmback #chown –R postgres /data/backupdb #chown –R postgres/var/log/pgsqllog/rmback #crontab -u postgres –e 0 3 * * * /home/postgresql/backup.sh