pg_dump 只备份数据库集群中的某个数据库的数据,它不会导出角色和表空间相关的信息,因为这些信息是整个数据库集群共用的,不属于某个单独的数据库。
pg_dumpall 对集群中的每个数据库调用pg_dump来完成该工作,还会还转储对所有数据库公用的全局对象(pg_dump不保存这些对象)。 目前这包括数据库用户和组、表空间以及适合所有数据库的访问权限等属性。
举例-数据库信息:
数据库名:pgdb01
用户:pgsql/123456
pg_dump备份:
pg_dump -p5432 -d pgdb01 -Upgsql -c -C -f pgdb01-`date +%Y%m%d`.sql
pg_dumpall备份:
pg_dumpall –p 5432 -Upgsql –c -C –f db_bak-`date +%Y%m%d`.sql
说明:
-d, --dbname=DBNAME database to dump
-t, --table=PATTERN dump the specified table(s) only
-c, --clean clean (drop) database objects before recreating
-C, --create include commands to create database in dump
恢复:
psql -p 5432 -Upgsql –f xxx.sql
定时任务:
[pgsql@localhost bak]$ crontab -l
5 0 * * * $HOME/pgsql9.6.9/bak/pgsql_bak.sh >$HOME/pgsql9.6.9/bak/pgsql_bak.log 2>&1
[pgsql@localhost bak]$ pwd
/home/pgsql/pgsql9.6.9/bak
[pgsql@localhost bak]$ ll
总用量 8
drwxrwxr-x. 2 pgsql pgsql 33 8月 29 19:45 data
-rw-r--r--. 1 pgsql pgsql 88 8月 29 19:45 pgsql_bak.log
-rwxrw-r--. 1 pgsql pgsql 241 8月 29 19:38 pgsql_bak.sh
[pgsql@localhost bak]$ cat pgsql_bak.sh
#!/bin/bash
. $HOME/.bash_profile
echo =================`date +%Y-%m-%d~%H:%M:%S`===start
cd $HOME/pgsql9.6.9/bak
pg_dump -p5432 -d pgdb01 -Upgsql -c -C -f data/pgdb01-`date +%Y%m%d`.sql
pg_dump -p5432 -d kettle -Upgsql -c -C -f data/kettle-`date +%Y%m%d`.sql
#delete bak files 30 days ago
find $HOME/pgsql9.6.9/bak/data -mtime +30 |xargs rm -rf
echo =================`date +%Y-%m-%d~%H:%M:%S`===end
[pgsql@localhost bak]$