1. 逻辑备份与恢复
例子:假如存在一个叫netdata的数据库,我们要对具体的这个数据库进行一个备份与恢复全过程。如下
(1)以普通格式导出到/opt路径下
pg_dump -Fc -U postgres netdata > /opt/netdata_2020-4-7.dump
(2)在需要恢复的数据库系统中创建netdata数据库
CREATE DATABASE netdata;
(3)数据库恢复
pg_restore -d netdata < /opt/netdata_2020-4-7.dump
(如果远程恢复的话需要加-h “远程地址” -U “数据库用户” 这两个参数)
2. 物理备份
冷备份与恢复(数据迁移)
(1)先停库 pg_ctl -D $PADATA stop
(2)用cp、tar等指令复制到某一个文件夹
(3)修改环境变量的$PADATA路径
(4)指定复制数据所在的路径启动,一定要具体指定到目录名为data的目录下
热备份与恢复
备份:
PostgreSQL热备份的过程一般为:
(1)数据库中执行:pg_start_backup() 。
(2) 然后使用操作系统的tar或 cp命令拷贝 PostgreSQL数据文件。
可以手动执行这些命令,也可以在postgresql.conf文件里配置
archive_mode、archive_command、wal_level三个参数,使其自动执行命令,如下:
archive_mode = on
archive_command = 'cp -i %p /home/postgres/archive/%f'
wal_level = archive
(3) 数据库中执行:pg_stop_backup() 。
恢复:
1. 停掉数据库
pg_stop;
2. 删除/data/
rm –r /home/postgres/data/ #数据文件是放在/home/postgres/data/
#若这个时候启动数据pg_start; 启动是成功的;不会报错!这个跟oracle是不同的;启动日志也不会出现error的错误提示;
3. 恢复备份
cp backup/hotback.tar.gz ./
tar -zxvf hotback.tar.gz
4. 删除pg_xlog文件夹并重建
rm -rf pg_xlog
mkdir -p pg_xlog/archive_status
5. 拷贝recovery.conf文件并修改
vim /data/pgdata/recovery.conf
--新增内容,指定恢复文件和路径,%f,%p见上面说明
restore_command = 'cp /home/postgres/archive/%f "%p"'
6. 启动数据库
#pg_start;
下面提供自动热备份脚本:
##===========================================================
## pg_hot_back.sh
## created by lottu
## //
## usage: pg_hot_back.sh
##============================================================
#!/bin/bash
DATE=`date +%Y%m%d`;
PG_ARCHIVE=/home/postgres/archive/
PG_DATA=/home/postgres/data/
PG_HOME=/home/postgres
BACK_LOG=/home/postgres/log/hot_${DATE}.log
#START BACKUP
echo "START BACKUP..............." > $BACK_LOG
psql postgres -c "select pg_start_backup('hot_back')" >> $BACK_LOGcd $PG_HOME
tar -zcvf ${PG_HOME}/backup/pg_back_${DATA}.tar.gz data/ >> $BACK_LOG
psql postgres -c "select pg_stop_backup()" >> $BACK_LOG
psql postgres -c "select pg_switch_wal()" >> $BACK_LOG #有的postgresql版本是pg_switch_xlog()
psql postgres -c "select pg_current_wal_lsn()" >> $BACK_LOG #有的postgresql版本是pg_current_xlog_location()
echo "BACKUP END" > $BACK_LOG
网友评论