国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Postgresql備份詳解

IT那活兒 / 2857人閱讀
Postgresql備份詳解
點擊上方藍字關注我們


前言


PostgreSQL冷備份,需要在數據庫關閉狀態下,對數據文件進行備份操作。盡管在一情況下并不適用,但并不妨礙我們去了解它的特性。

PostgreSQL熱備份,standby數據庫在應用WAL日志的同時,也可以提供只讀服務,在oracle中叫activedataguard,在PostgreSQL中稱為hotstandby。在postgresql9.0以后的版本中,用戶可以在備用數據庫上進行查詢、報表等操作,也可用做讀寫分離。在生產環境中,熱備一直備受追捧

今天,我們就來聊一聊PostgreSQL的冷備與熱備。


一、PostgreSQLCold standby


備份對象為數據庫集群主目錄$PGDATA,表空間目錄,事務日志(pg_log)目錄。當然如果參數文件指定了其他目錄或文件,根據需要,也需要備份下來。

數據庫主目錄及所在位置

[telepg@test-telepg-01 ~]$ cd $PGDATA

[telepg@test-telepg-01 data]$ pwd

/app/pg/data_50_18802/data


主目錄中的文件和文件夾

[telepg@test-telepg-01 data]$ ls -lrt

-rwx------.  1 telepg telepg      3 Sep 27 08:39 PG_VERSION

-rwx------.  1 telepg telepg   1636 Sep 27 08:39 pg_ident.conf

drwx------. 10 telepg telepg    150 Nov 30 09:02 base

drwx------.  3 telepg telepg     37 Nov 30 09:06 tbs_lh

-rwx------.  1 telepg telepg  26809 Dec  1 11:08 postgresql.conf

-rw-------.  1 telepg telepg    310 Dec  3 10:28 postgresql.auto.conf

-rw-------.  1 telepg telepg     78 Dec  3 16:10 postmaster.opts

-rw-------.  1 telepg telepg  13947 Dec  3 16:10 console.log

-rw-------.  1 telepg telepg     86 Dec  3 16:10 postmaster.pid

drwx------.  2 telepg telepg     10 Dec  3 16:10 pg_stat

-rwx------.  1 telepg telepg    696 Dec  3 16:17 pg_hba.conf

drwx------.  2 telepg telepg   4096 Dec 28 10:35 global

drwx------.  2 telepg telepg   4096 Dec 28 10:36 pg_xact

drwx------.  2 telepg telepg   8192 Dec 28 11:30 pg_subtrans

drwx------.  2 telepg telepg 135168 Jan  1 17:36 pg_commit_ts

drwx------.  3 telepg telepg 249856 Jan 27 11:53 pg_wal

drwx------.  2 telepg telepg   8192 Feb  1 00:00 log

-rw-------.  1 telepg telepg     44 Feb  1 00:00 current_logfiles

drwx------.  4 telepg telepg     84 Feb  1 07:37 pg_logical

drwx------. 2 telepg telepg    262 Feb  1 08:25 pg_stat_tmp


近期事務日志目錄

[telepg@test-telepg-01 data]$ cd log

[telepg@test-telepg-01 log]$ ls -lrt

-rw-------. 1 telepg telepg 14978379 Jan 29 00:00 postgresql-2021-01-28_000000.log

-rw-------. 1 telepg telepg 14979822 Jan 30 00:00 postgresql-2021-01-29_000000.log

-rw-------. 1 telepg telepg 14975700 Jan 31 00:00 postgresql-2021-01-30_000000.log

-rw-------. 1 telepg telepg 14984205 Feb  1 00:00 postgresql-2021-01-31_000000.log

-rw-------. 1 telepg telepg  5268099 Feb  1 08:26 postgresql-2021-02-01_000000.log


表空間目錄

[telepg@test-telepg-01 data]$ cd tbs_lh

[telepg@test-telepg-01 tbs_lh]$ ls -lrt

drwx------. 2 telepg telepg 10 Nov 30 09:06 PG_12_201909212


備份需要提前準備好所需要的空間,可以是本地的,也可以是異地的存儲。

查看數據庫的大?。?/span>

lh=# select round(sum(pg_database_size(oid))/1024/1024/1024.0,2)||GB from pg_database;

column

----------

329.86GB


準備好可以放下整個備份的目錄

[telepg@test-telepg-01 data]$ df -h

/dev/sdb                 55T  1.1T   54T   2% /app


停庫

[telepg@test-telepg-01 ~]$ pg_ctl stop -m fast

waiting for server to shut down.... done

server stopped


備份$PGDATA,排除pg_xlog,pg_log以及不需要備份的目錄pgbak.

rsync -acvz -L --exclude "pg_xlog" --exclude "pgbak" --exclude "pg_log" $PGDATA /app/pg/data_50_18802/data/pgbackup/


備份pg_xlog

[telepg@test-telepg-01 ~]$ pg_controldata |grep checkpoint

Latest checkpoint location:           125/32D4DF90

Latest checkpoints REDO location:    125/32D4DF58

Latest checkpoints REDO WAL file:    000000010000012500000032

Latest checkpoints TimeLineID:       1

Latest checkpoints PrevTimeLineID:   1

Latest checkpoints full_page_writes: on

Latest checkpoints NextXID:          0:830624231

Latest checkpoints NextOID:          2120456

Latest checkpoints NextMultiXactId:  1

Latest checkpoints NextMultiOffset:  0

Latest checkpoints oldestXID:        632099619

Latest checkpoints oldestXIDs DB:   1449363

Latest checkpoints oldestActiveXID:  830624231

Latest checkpoints oldestMultiXid:   1

Latest checkpoints oldestMultis DB: 17823

Latest checkpoints oldestCommitTsXid:632099619

Latest checkpoints newestCommitTsXid:830624230

Time of latest checkpoint:            Mon 01 Feb 2021 08:37:49 AM CST


在備份目錄中創建pg_xlog目錄并修改權限

[telepg@test-telepg-01 ~]$rsync -acvz -L --exclude "pg_xlog" --exclude "pgbak" --exclude "pg_log" $PGDATA /app/pg/data_50_18802/data/pgbackup/

[telepg@test-telepg-01 ~]$chmod 777 /app/pg/data_50_18802/data/pgbackup/pg_xlog


查找需要的pg_xlog文件

[telepg@test-telepg-01 ~]$ cd $PGDATA  

[telepg@test-telepg-01~]$ls -lrt $PGDATA/pgbackup/pg_xlog/000000030000000E000000E*

-rw------- 1 pg93 pg93 16M Feb 1 12:24 /pgdata1999/pg_xlog/000000030000000E000000EA  

-rw------- 1 pg93 pg93 16M Feb 1 12:24 /pgdata1999/pg_xlog/000000030000000E000000EB



拷貝需要的pg_xlog文件

[telepg@test-telepg-01~]$cp`$PGDATA/pg_xlog/000000030000000E000000EB/pgdata/digoal/1921/data04/pg93backup/pgdata1999/pg_xlog/


檢查備份目錄,是否備份正常

[telepg@test-telepg-01 data]$ ll

-rwx------.  1 telepg telepg      3 Sep 27 08:39 PG_VERSION

-rwx------.  1 telepg telepg   1636 Sep 27 08:39 pg_ident.conf

drwx------. 10 telepg telepg    150 Nov 30 09:02 base

drwx------.  3 telepg telepg     37 Nov 30 09:06 tbs_lh

-rwx------.  1 telepg telepg  26809 Dec  1 11:08 postgresql.conf

-rw-------.  1 telepg telepg    310 Dec  3 10:28 postgresql.auto.conf

-rw-------.  1 telepg telepg     78 Dec  3 16:10 postmaster.opts

-rw-------.  1 telepg telepg  13947 Dec  3 16:10 console.log

-rw-------.  1 telepg telepg     86 Dec  3 16:10 postmaster.pid

drwx------.  2 telepg telepg     10 Dec  3 16:10 pg_stat

-rwx------.  1 telepg telepg    696 Dec  3 16:17 pg_hba.conf

drwx------.  2 telepg telepg   4096 Dec 28 10:35 global

drwx------.  2 telepg telepg   4096 Dec 28 10:36 pg_xact

drwx------.  2 telepg telepg   8192 Dec 28 11:30 pg_subtrans

drwx------.  2 telepg telepg 135168 Jan  1 17:36 pg_commit_ts

drwx------.  3 telepg telepg 249856 Jan 27 11:53 pg_wal

drwx------.  2 telepg telepg   8192 Feb  1 00:00 log

-rw-------.  1 telepg telepg     44 Feb  1 00:00 current_logfiles

drwx------.  4 telepg telepg     84 Feb  1 07:37 pg_logical

drwx------. 2 telepg telepg    262 Feb  1 08:25 pg_stat_tmp



二、PostgreSQL Hot standby


PostgreSQL9.0之后的版本中,日志傳送的方法有以下兩種:

基于文件(base_file)的傳送方式:服務器寫完一個WAL日志文件后,再把WAL日志文件拷貝到standby數據庫上去應用。

流復制(streamingreplication)的方式:這是PostgreSQL9.0才提供的新方法,在事務提交后,就會把生成的日志異步的傳送到standby數據庫上應用,這比基本文件的日志傳送方法有更低的數據延遲。

今天主要聊一聊流復制熱備方式。


PostgreSQL9.0之后的版本中引入了主從的流復制機制,,從服務器通過tcp流從主服務器中同步相應的數據。流復制允許備庫更新,同時也能提供只讀服務,流復制默認是異步的。

流復制架構圖


實例準備

role

ip

port

version

Main

192.168.122.1

18802

12.3

Slave

192.168.122.2

18802

12.3


首先我們需要對主庫進行配置,創建復制用戶repuser,并賦予復制和登錄的權限。

lh=# create user repuser replication login connection limit 2 encrypted password repuser;

CREATE ROLE



  更新認證方式,編輯配置文件編輯配置文件pg_hba.conf,新增以下IP

host   all          all             0.0.0.0/0               scram-sha-256

host   all          all             ::/0                   scram-sha-256


 編輯配置文件postgresql.conf

listen_addresses = *

wal_log_hints = on

archive_mode = on

archive_command = cp %p /var/lib/pgsql/12/pg_archive/%f

wal_keep_segments = 64


新增歸檔目錄pg_archive

[telepg@test-telepg-01 data]$mkdir /var/lib/pgsql/12/pg_archive


重啟主庫

[telepg@test-telepg-01 data]$systemctl restart postgresql-12.3


配置從庫

在postgres用戶根目錄下創建.pgpass文件,并追加認證信息

[telepg@test-telepg-01 data]touch .pgpass

[telepg@test-telepg-01 data]chmod 777 .pgpass

[telepg@test-telepg-01 data]cat .pgpass

192.168.122.1:18802:lh:repuser:repuser


從主節點拷貝數據到從節點

$ su - telepg

Last login: Mon Feb 1 14:27:20 CST 2021 on pts/0

$ pg_basebackup -h 192.168.122.1 -U repuser -D /var/lib/pgsql/12/data/ -X stream -P

Password:

24308/24308 kB (100%), 1/1 tablespace


拷貝配置文件recovery.conf.sample為recovery.conf

[telepg@test-telepg-01data]$cp`/usr/pgsql-12/share/recovery.conf.sample/var/lib/pgsql/12/data/recovery.conf


更新配置文件recovery.conf

standby_mode = on

primary_conninfo = host=192.168.122.1 port=18802 user=repuser password=repuser

recovery_target_timeline = latest


重啟從庫

[telepg@test-telepg-01data]$systemctl restart postgresql-12.3


在主節點上命令驗證

lh=# select application_name, client_addr, sync_state from pg_stat_replication;

application_name |  client_addr  | sync_state

------------------+---------------+------------

walreceiver      | 192.168.122.2 | async

(1 row)


說明192.168.122.2是從服務器,在接收流,而且是異步流復制??梢苑直嬖谥?、從節點上查看進程來進行驗證

主服務器上有一個walsender 進程

[telepg@test-telepg-01data]$$ ps -ef | grep postgres

postgres 20645 19653  0 2021 ?        00:00:00 postgres: wal sender process repuser 192.168.122.2(59176) streaming 0/70029E0


從服務器上有一個walsender 進程

[telepg@test-telepg-01data]$$ $ ps -ef | grep postgres

postgres 18019 18012  0 2021 ?        00:00:00 postgres: wal receiver process   streaming 0/7002A18




END



文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/130006.html

相關文章

  • 新書推薦 |《PostgreSQL實戰》出版(提供樣章下載)

    摘要:作者譚峰張文升出版日期年月頁數頁定價元本書特色中國開源軟件推進聯盟分會特聘專家撰寫,國內多位開源數據庫專家鼎力推薦。張文升中國開源軟件推進聯盟分會核心成員之一。 很高興《PostgreSQL實戰》一書終于出版,本書大體上系統總結了筆者 PostgreSQL DBA 職業生涯的經驗總結,本書的另一位作者張文升擁有豐富的PostgreSQL運維經驗,目前就職于探探科技任首席PostgreS...

    Martin91 評論0 收藏0
  • 主要概念 云數據庫 PostgreSQL UDB

    摘要:硬盤硬盤硬盤云數據庫的硬盤大小。用戶可以根據對云數據庫的硬件需求進行選擇。云數據庫提供自動備份和手動備份兩種方式,防止數據丟失,避免誤操作帶來的風險。日志日志日志日志是用于記錄云數據庫操作事件的記錄文件。 主要概念本篇目錄實例類型版本數據庫機型內存硬盤付費方式數量節點配置文件管理員實例名稱資源IDIP和端口備份日志實例類型PostgreSQL實例目前支持普通版和高可用版實例。版本Postgr...

    ernest.wang 評論0 收藏334
  • Postgresql 備份與恢復

    摘要:指定要用于查找的口令文件的名稱。前四個字段可以是確定的字面值,也可以使用通配符匹配所有。利用環境變量引用的文件權限也要滿足這個要求,否則同樣會被忽略。在上,該文件被假定存儲在一個安全的目錄中,因此不會進行特別的權限檢查。 pg_dump pg_dump 把一個數據庫轉儲為純文本文件或者是其它格式. 用法: pg_dump [選項]... [數據庫名字] 一般選項: -f, --fi...

    阿羅 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<