pg数据库备份

 1. pg_dumpall 备份还原

--备份脚本
vim pgall.sh

#!/bin/bash
source /etc/profile
source ~/.bashrc
DATE=`date +%Y%m%d%H%M%S`

newdir=/4T/postgresql/pg127/pgdir
dbname=postgres

#备份内容详细输出到日志文件里
 pg_dumpall > $newdir/all_database-$DATE.sql 
 

# 删除旧的备份文件
find /4T/postgresql/pg127/pgdir -name "*.sql" -mtime +2 -exec rm -rf  {} \;

-------------------------------------------------------------------
crontab -e 
0 5 * * *  su - pg127 -c /4T/postgresql/pg127/scripts/pgall.sh


--------------------------------------------------------------------
还原数据库

[pg12@db02 pgdir]$ psql
psql (12.7)
Type "help" for help.
postgres=# create database test;                   /* 创建中间库,用于删除postgres */
CREATE DATABASE
postgres=# exit
[pg12@db02 pgdir]$ psql -d test                    /* 中间库登录*/              
psql (12.7)
Type "help" for help.
test=# drop database postgres;                     /* 删除postgres */                 
DROP DATABASE
test=# create database postgres;                   /* 创建空库postgres */
CREATE DATABASE
postgres=# exit

[pg12@db02 pgdir]$ psql -f all_database-20241107001001.sql     /* 还原数据库postgres */

 2. pg_dump备份还原

vim pgbak.sh

#!/bin/bash
source /etc/profile
source ~/.bashrc
DATE=`date +%Y%m%d%H%M%S`

newdir=/4T/postgresql/pg127/pgdir
dbname=postgres

#备份内容详细输出到日志文件里
 pg_dump -U postgres -v -Fc -d $dbname --no-owner -f $newdir/postgres-$DATE.dump  2>$newdir/postgres-$DATE.log

#过滤所有备份日志文件里面的error信息,合并一个文件
grep error:*.log > 0error-$DATE.log

# 删除旧的备份文件
find /4T/postgresql/pg127/pgdir -name "postgres*" -mtime +1 -exec rm -rf  {} \;

-------------------------------------------------------------------
crontab -e 
0 15 * * *  su - pg127 -c /4T/postgresql/pg127/scripts/pgbak.sh
----------------------------------------------------------------------
数据库还原

还原数据库
[pg12@db02 pgdir]$ psql
psql (12.7)
Type "help" for help.
postgres=# create database test;                   /* 创建中间库,用于删除postgres */
CREATE DATABASE
postgres=# exit
[pg12@db02 pgdir]$ psql -d test                    /* 中间库登录*/              
psql (12.7)
Type "help" for help.
test=# drop database postgres;                     /* 删除postgres */                 
DROP DATABASE
test=# create database postgres;                   /* 创建空库postgres */
CREATE DATABASE
postgres=# exit

[pg12@db02 pgdir]$ pg_restore -U postgres -h localhost -p 15434 -d postgres   -F c postgres-20241111001001.dump   2> postgres-20241111001001.log   /* 还原数据库postgres */

2.自动删除原库还原(-c)
[pg12@db02 pgdir]$ pg_restore -U postgres -h localhost -p 15434 -d postgres  -c -F c postgres-20241111001001.dump   2> postgres-20241111001002.log   

3. pg_basebackup备份还原
 

vim /4T/postgresql/pg12/scripts/pg_basebackup.sh

  
source /home/pg12/.bash_profile
DATE=`date "+%Y%m%d%H%M%S"`
PGDIR=/4T/postgresql/pg12/pgdir
PGARCH=/4T/postgresql/pg12/archive

#输人密码
export PGPASSWORD='!@#Bds#pg¥%……'


#备份内容输出到备用服务器上
#pg_basebackup -h 192.168.18.101  -U postgres -l bk-${DATE} -F p -P -R -D $PGDIR/bak-${DATE}
pg_basebackup -h 192.168.18.101  -U postgres -l bk-${DATE} -F p -P -R -D $PGDIR/bak-${DATE}  2>&1 | tee $PGDIR/bak-${DATE}.log


# 删除旧的备份文件
find $PGDIR/  -name "bak*" -mtime +7 -exec rm -rf  {} \;
find $PGARCH/ -name "*"    -mtime +7 -exec rm -rf  {} \;

-------------------------------------------------------------------
crontab -e 
10 0  * * *  su - pg12 -c /4T/postgresql/pg12/scripts/pg_basebackup.sh
----------------------------------------------------------------------


数据库还原
[pg12@db02 pgdir]$ pg_ctl stop

[pg12@db02 pgdir]$ rm -rf /4T/postgresql/pg12/pgdata/*
[pg12@db02 pgdir]$ mv  /4T/postgresql/pg12/pgdir/bak-20250307150045/*   /4T/postgresql/pg12/pgdata/
(#*/ 括号里里面的不要管)
[pg12@db02 pgdir]$ rm -rf /4T/postgresql/pg12/pgdata/standby.signal

[pg12@db02 pgdir]$ pg_ctl start

4. 定时truncate表里数据

vim truncate.sh

source /home/pg12/.bash_profile

#输人密码
export PGPASSWORD='!@#Bds#pg¥%……'

#清空表数据
psql -h 192.168.18.1 -U postgres -d postgres -c "TRUNCATE TABLE smp.smp_disk_status_info;"
psql -h 192.168.18.1 -U postgres -d postgres -c "TRUNCATE TABLE smp.smp_memory_status_info;"
psql -h 192.168.18.1 -U postgres -d postgres -c "TRUNCATE TABLE smp.smp_network_status_info;"
psql -h 192.168.18.1 -U postgres -d postgres -c "TRUNCATE TABLE smp.smp_processor_status_info;"
psql -h 192.168.18.1 -U postgres -d postgres -c "TRUNCATE TABLE smp.smp_task_log_info;"
psql -h 192.168.18.1 -U postgres -d postgres -c "TRUNCATE TABLE public.dps_position ;"


-------------------------------------------------------------------
crontab -e 
20 0  * * *  su - pg12 -c /4T/postgresql/pg12/scripts/truncate.sh
----------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值