亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

postgres的增量恢復

發布時間:2020-04-04 22:18:34 來源:網絡 閱讀:1287 作者:橡皮高 欄目:數據庫

DBA童鞋對增量恢復的概念一定很熟悉,與mysql的增量恢復類似,使用“t1時刻的全備”+“t1至t2時刻的wal日志”,即可將postgres恢復至t2時刻。

前期準備:
配置postgres.conf:
wal_level=archive 或 hot_standby 或 更高級別
archive_mode = on
archive_command='DATE=date +%Y%m%d;DIR="/paic/pg6666/pg_archlog/$DATE";(test -d $DIR || mkdir -p $DIR) && cp %p $DIR/%f'

備份腳本backup.sh:

#!/bin/bash 

export LANG=en_US.utf8 
export PGHOME=/paic/postgres/base/9.4.0 
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH 
export DATE=`date +"%Y%m%d"` 
export PATH=$PGHOME/bin:$PATH:. 
export PGDATA=/paic/pg6666/data

BASEDIR="/paic/postgres/home/postgres/pg_bak" 

date +%F-%T 

if [ ! -d $BASEDIR/$DATE ]; then 
  mkdir -p $BASEDIR/$DATE 
  if [ $? -eq 0 ]; then 
    psql -h 127.0.0.1 -p 6666 -U postgres postgres -c "select pg_start_backup(now()::text)" 
    if [ $? -eq 0 ]; then 
      cp -r -L $PGDATA $BASEDIR/$DATE 
    else 
      echo -e "select pg_start_backup(now()::text) error" 
      exit 1 
    fi 
    psql -h 127.0.0.1 -p 6666 -U postgres postgres -c "select pg_stop_backup()" 
    date +%F-%T 
    echo -e "backup successed" 
    exit 0 
  else 
    echo -e "mkdir -p $BASEDIR/$DATE error" 
    exit 1 
  fi 
else 
  echo -e "$DATE backuped, don't backup repeated" 
  exit 1 
fi

恢復腳本recovery.sh:

#!/bin/bash 
export LANG=en_US.utf8 
export PGHOME=/paic/postgres/base/9.4.0 
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH 
export PATH=$PGHOME/bin:$PATH:. 
export PGDATA=/paic/pg6666/data
export DATE=`date +"%Y%m%d"`

if [ -z "$1" ]; then
  echo "1st argument is empty!"
else
  if [ -z "$2" ]; then
    echo "2nd argument is empty!"
  else
    if [ -f $PGDATA/postmaster.pid ]; then
      echo "shutdown database first!"
    else 
      cd $PGDATA
      rm -rf *
      cp -r /paic/postgres/home/postgres/pg_bak/$DATE/data/* $PGDATA/
      cd $PGDATA/pg_xlog
      rm -rf *
      cd $PGDATA
      cp $PGHOME/share/recovery.conf.sample ./recovery.conf
      echo restore_command = \'cp /paic/pg6666/pg_archlog/$DATE/%f %p\' >> ./recovery.conf
      echo recovery_target_time = \'$1 $2\' >> ./recovery.conf
      pg_ctl start
    fi
  fi
fi

backup.sh和recovery.sh中的目錄請自行修改。

模擬故障恢復:
1.準備階段
-bash-4.1$ psql
psql (9.4.0)
Type "help" for help.
postgres=# \c mydb alex
You are now connected to database "mydb" as user "alex".
確認數據庫初始狀態
mydb=# \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
public | test | table | alex
(1 row)
此時mydb數據庫只有test表

創建aaa
mydb=# create table aaa(id int);
CREATE TABLE
mydb=# \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
public | aaa | table | alex
public | test | table | alex
(2 rows)
mydb=# checkpoint; --確保修改寫入文件(非必須)
CHECKPOINT
mydb=# select pg_switch_xlog(); --確保修改寫入歸檔(非必須)
pg_switch_xlog
·····················
0/E6000120
(1 row)
上述操作于2017-12-22 13:52:00前完成

接著在2017-12-22 13:53:00時,創建表bbb
mydb=# create table bbb(id int);
CREATE TABLE
mydb=# \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
public | aaa | table | alex
public | bbb | table | alex
public | test | table | alex
(3 rows)
mydb=# checkpoint;
CHECKPOINT
mydb=# select pg_switch_xlog();
pg_switch_xlog
·····················
0/E7013FC0
(1 row)
mydb=# \q
上述操作于2017-12-22 13:54:00前完成

2.現在嘗試回滾數據庫至指定時間點
-bash-4.1$ pg_ctl stop -m fast
waiting for server to shut down..... done
server stopped
-bash-4.1$ cd --我的recovery.sh 文件放在home目錄,所以需切換目錄
-bash-4.1$ . recovery.sh 2017-12-22 13:52:00 --傳入時間參數$1:2017-12-22, $2:13:52:00 并執行腳本
pg_ctl: another server might be running; trying to start server anyway
server starting
-bash-4.1$ 2017-12-22 13:54:26 HKT:undefined:[13323]: LOG: redirecting log output to logging collector process
2017-12-22 13:54:26 HKT:undefined:[13323]: HINT: Future log output will appear in directory "/paic/pg6666/data/pg_log".
-bash-4.1$
-bash-4.1$
-bash-4.1$ psql
psql (9.4.0)
Type "help" for help.
postgres=# \c mydb alex
You are now connected to database "mydb" as user "alex".
mydb=# \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
public | aaa | table | alex
public | test | table | alex
(2 rows)
mydb=# \q
可知目前數據庫已回滾至2017-12-22 13:52:00時,剛創建完表aaa狀態

繼續測試
-bash-4.1$ pg_ctl stop
waiting for server to shut down.... done
server stopped
-bash-4.1$ cd
-bash-4.1$ . recovery.sh 2017-12-22 13:53:10
pg_ctl: another server might be running; trying to start server anyway
server starting
-bash-4.1$ 2017-12-22 13:56:39 HKT:undefined:[13390]: LOG: redirecting log output to logging collector process
2017-12-22 13:56:39 HKT:undefined:[13390]: HINT: Future log output will appear in directory "/paic/pg6666/data/pg_log".
-bash-4.1$
-bash-4.1$ psql
psql (9.4.0)
Type "help" for help.
postgres=# \c mydb alex
You are now connected to database "mydb" as user "alex".
mydb=# \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
public | aaa | table | alex
public | bbb | table | alex
public | test | table | alex
(3 rows)
可知目前數據庫已回滾至2017-12-22 13:53:10時,剛創建完表bbb的狀態

3.現在模擬刪表誤操作的回滾
2017-12-22 14:01:00 刪除表test
mydb=# drop table test;
DROP TABLE
mydb=# \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
public | aaa | table | alex
public | bbb | table | alex
mydb=# checkpoint;
CHECKPOINT
mydb=# select pg_switch_xlog();
pg_switch_xlog
·····················
0/E9005140
(1 row)
mydb=# \q

執行recovery.sh回滾數據庫
-bash-4.1$ pg_ctl stop
waiting for server to shut down.... done
server stopped
-bash-4.1$ cd
-bash-4.1$ . recovery.sh 2017-12-22 14:00:00
pg_ctl: another server might be running; trying to start server anyway
server starting
-bash-4.1$ 2017-12-22 14:02:09 HKT:undefined:[13583]: LOG: redirecting log output to logging collector process
2017-12-22 14:02:09 HKT:undefined:[13583]: HINT: Future log output will appear in directory "/paic/pg6666/data/pg_log".
-bash-4.1$
-bash-4.1$ psql
psql (9.4.0)
Type "help" for help.
postgres=# \c mydb alex
You are now connected to database "mydb" as user "alex".
mydb=# \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+-------
public | aaa | table | alex
public | bbb | table | alex
public | test | table | alex
(3 rows)
可知目前數據庫已回滾至2017-12-22 13:14:00時,表test未被刪除的狀態

本實驗僅限在測試環境模擬,有助于理解postgres的備份恢復機制,禁止用于生產!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

徐州市| 都安| 克什克腾旗| 柳林县| 杭锦旗| 榆树市| 德江县| 丰台区| 凉城县| 吴忠市| 织金县| 乌拉特中旗| 宁蒗| 镇雄县| 天台县| 芒康县| 从化市| 石景山区| 海安县| 北辰区| 伊川县| 宜君县| 芜湖县| 聂荣县| 东安县| 大厂| 海兴县| 大港区| 广元市| 南川市| 普陀区| 辉南县| 拉萨市| 盐边县| 南平市| 海阳市| 乌拉特后旗| 荥经县| 石门县| 汉阴县| 北碚区|