欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker環(huán)境實現(xiàn)PostgreSQL自動備份的流程步驟

 更新時間:2024年11月03日 11:19:06   作者:^cola^  
本文詳細介紹了如何在Ubuntu系統(tǒng)中安裝Docker,然后在Docker容器內(nèi)安裝和配置PostgreSQL數(shù)據(jù)庫,接著,重點講解了如何在PostgreSQL中安裝和配置pg_rman工具,用于數(shù)據(jù)庫的備份和恢復操作,文章還涵蓋了創(chuàng)建定時備份任務以及刪除備份的步驟,需要的朋友可以參考下

安裝

Ubuntu安裝Docker環(huán)境

如果您尚未在 Ubuntu 系統(tǒng)中安裝 Docker,可以按照以下步驟進行安裝:

更新系統(tǒng)的包列表:

sudo apt-get update

安裝 Docker 相關(guān)的依賴包:

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

添加 Docker 的官方 GPG 密鑰:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg

添加 Docker 的官方軟件源:

sudo add-apt-repository "deb [arch=$(dpkg --print-architecture signed-by=/etc/apt/trusted.gpg.d/docker.gpg)] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

更新包列表并安裝 Docker:

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

啟動 Docker 服務并設置開機自啟:

sudo systemctl start docker
sudo systemctl enable docker

安裝PostgreSQL

在 Docker 中安裝 pg_rman,首先需要拉取 PostgreSQL 的 Docker 鏡像。可以使用以下命令從 Docker Hub 上拉取官方的 PostgreSQL 鏡像:

docker pull postgres

創(chuàng)建 PostgreSQL 容器 接下來,創(chuàng)建一個名為 "my-postgres" 的 PostgreSQL 容器,并設置一個用戶名和密碼供連接使用。可以使用以下命令:

docker run -d --name my-postgres -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword postgres

其中,myuser 和 mypassword 分別是要設置的用戶名和密碼,您可以根據(jù)需要進行修改。

進入 PostgreSQL 容器 運行以下命令以進入 PostgreSQL 容器的 shell:

docker exec -it my-postgres bash

安裝和配置pg_rman

容器內(nèi)安裝git

如果在容器內(nèi)沒有git命令,您可以通過以下步驟安裝它:

1.在容器內(nèi)執(zhí)行以下命令更新包管理工具:

apt-get update

2.使用以下命令安裝git

apt-get install -y git

這將安裝git工具,使您能夠下載pg_rman源代碼并進行后續(xù)編譯和安裝步驟。完成安裝后,您可以按照之前的步驟繼續(xù)進行pg_rman的安裝。

容器內(nèi)安裝pg_rman

在 PostgreSQL 容器的 shell 中,可以使用以下命令安裝 pg_rman 的依賴項,并編譯安裝 pg_rman:

1.安裝編譯工具和依賴項:

apt-get update
apt-get install -y git build-essential libpq-dev libssl-dev

2.克隆 pg_rman 倉庫:

git clone https://github.com/ossc-db/pg_rman.git 

3.進入 pg_rman 目錄:

cd pg_rman 

4.編譯并安裝 pg_rman:

make
make install

配置PostgreSQL

安裝完 pg_rman 后,需要在 PostgreSQL 中配置 pg_rman 進行備份和恢復操作??梢栽?PostgreSQL 容器的 shell 中使用以下命令編輯 PostgreSQL 的配置文件:

1.編輯 PostgreSQL 的配置文件 postgresql.conf:

vi /var/lib/postgresql/data/postgresql.conf

2.在容器內(nèi)創(chuàng)建用于存儲備份文件的目錄

mkdir -p /var/lib/postgresql/pg_rman_backup

3.在配置文件中添加以下內(nèi)容,啟用 pg_rman:

# 啟用 pg_rman 插件
shared_preload_libraries = 'pg_rman'
# 指定 pg_rman 的備份目錄
pg_rman.backup_path = '/var/lib/postgresql/pg_rman_backup'

4.保存并退出配置文件。

5.在容器內(nèi)重啟 PostgreSQL 服務,使配置生效:

service postgresql restart

使用 pg_rman 進行備份和恢復, 現(xiàn)在,可以在 Docker 容器中使用 pg_rman 進行 PostgreSQL 數(shù)據(jù)庫的備份和恢復操作了。以下是一些常用的 pg_rman 命令示例:

測試

創(chuàng)建全量備份

pg_rman backup -B /var/lib/postgresql/pg_rman_backup -b my_backup

創(chuàng)建增量備份

pg_rman backup -B /var/lib/postgresql/pg_rman_backup -b my_backup --incremental

恢復備份

pg_rman restore -B /var/lib/postgresql/pg_rman_backup -i my_backup

參數(shù)的解釋:

  • pg_rman:這是運行 pg_rman 工具的命令。
  • backup:這是你要執(zhí)行的操作,本例中是備份操作。
  • -B /var/lib/postgresql/pg_rman_backup:這是 -B 選項后跟一個目錄路徑。它指定備份將存儲在的目錄,本例中備份將放在目錄 /var/lib/postgresql/pg_rman_backup 中。
  • -b my_backup:這是 -b 選項后跟一個標簽或標識備份的名稱。在這里,備份標簽設置為 "my_backup"。這個標簽可以幫助你標識和管理不同的備份。
  • 這些參數(shù)用于告訴 pg_rman 在哪里存儲備份,并為備份提供一個易于識別的標簽。通常,你會包括其他選項和參數(shù),以指定有關(guān) PostgreSQL 數(shù)據(jù)庫和備份配置的詳細信息。

配置 pg_rman

1.在PostgreSQL容器內(nèi)創(chuàng)建配置文件

touch /var/lib/pgsql/data/pg_rman.conf

2.編輯配置文件

使用文本編輯器(例如vinano)編輯配置文件,添加以下內(nèi)容,根據(jù)您的需求進行配置:

BACKUP_PATH = '/var/lib/postgresql/pg_rman_backup'
BACKUP_MODE = FULL
LOG_DIR = '/var/log/pg_rman'

在上述配置中,將/var/lib/postgresql/pg_rman_backup替換為您希望存儲備份的實際目錄路徑,/var/log/pg_rman是pg_rman備份日志的目錄。這些路徑指的是PostgreSQL容器內(nèi)的文件和目錄路徑,前提需提前創(chuàng)建對應文件夾

1. 映射備份路徑到主機路徑: 假設您希望將容器內(nèi)的備份路徑 /var/lib/postgresql/pg_rman_backup 映射到主機上的 /host/backup 目錄,可以在運行容器時使用 -v 參數(shù):

-v /host/backup:/var/lib/postgresql/pg_rman_backup

這樣,備份文件將在容器內(nèi)的 /var/lib/postgresql/pg_rman_backup目錄創(chuàng)建,但也將在主機上的 /host/backup 目錄中可見。

2. 映射日志路徑到主機路徑: 假設您希望將容器內(nèi)的日志路徑 /var/log/pg_rman 映射到主機上的 /host/log 目錄,可以在運行容器時使用 -v 參數(shù):

-v /host/log:/var/log/pg_rman

這樣,pg_rman備份日志將在容器內(nèi)的 /var/log/pg_rman 目錄創(chuàng)建,但也將在主機上的 /host/log 目錄中可見。

通過這種方式,您可以輕松在容器內(nèi)和主機之間共享備份文件和備份日志。確保在命令中替換路徑為您希望使用的實際路徑。

3.重啟 PostgreSQL 容器(可根據(jù)實際情況添加容器數(shù)據(jù)卷)

docker restart my_postgres

這將使 pg_rman 配置生效。

配置PostgreSQL步驟可忽略此步驟

對于在 PostgreSQL 容器內(nèi)啟用 pg_rman 擴展的步驟,這取決于您的 PostgreSQL 數(shù)據(jù)庫配置和需求。下面我將進一步解釋這個步驟的情況:

1.在 Docker 中啟動一個 PostgreSQL 容器??梢允褂靡韵旅顒?chuàng)建一個基于 PostgreSQL 的 Docker 容器:

docker run -d --name my_postgres -p 5432:5432 -e POSTGRES_USER=myuser -e POSTGRES_PASSWORD=mypassword postgres

其中,my_postgres 是容器名稱,myuser 和 mypassword 是 PostgreSQL 的用戶名和密碼。

2.進入 PostgreSQL 容器的 Shell:

docker exec -it my_postgres psql -U myuser

其中,myuser 是之前設置的 PostgreSQL 用戶名。

3.在 PostgreSQL 容器中安裝 pg_rman 擴展:

如果您希望在 PostgreSQL 容器內(nèi)使用 pg_rman 擴展來執(zhí)行備份和還原操作,并且您的 PostgreSQL 數(shù)據(jù)庫尚未啟用 pg_rman 擴展,那么您需要在 PostgreSQL 容器內(nèi)執(zhí)行以下 SQL 命令來啟用擴展:

CREATE EXTENSION pg_rman;

這將在 PostgreSQL 中安裝 pg_rman 擴展。

    • 這通常用于在數(shù)據(jù)庫級別啟用 pg_rman 擴展,以便您可以在 PostgreSQL 數(shù)據(jù)庫內(nèi)直接運行 pg_rman 命令。
  1. 在 PostgreSQL 容器內(nèi)不需要啟用 pg_rman 擴展(沒有此步驟):

    • 如果您的 PostgreSQL 容器已經(jīng)在創(chuàng)建時包含了 pg_rman 擴展,或者您的 PostgreSQL 數(shù)據(jù)庫中已經(jīng)啟用了 pg_rman 擴展,那么您不需要再次在容器內(nèi)啟用它。
    • 這可能是因為您使用的 PostgreSQL 容器映像已經(jīng)包含 pg_rman 擴展,或者您在容器外部的 PostgreSQL 數(shù)據(jù)庫中已經(jīng)進行了配置。

1.創(chuàng)建 pg_rman 的備份目錄

mkdir /pg_rman_backup

這將在容器外創(chuàng)建一個用于存儲備份的目錄。

2.在 PostgreSQL 容器中配置 pg_rman

ALTER SYSTEM SET pg_rman.config_file_directory = '/pg_rman_backup';

這將設置 pg_rman 的配置文件目錄為之前創(chuàng)建的備份目錄。

3.重啟 PostgreSQL 容器

docker restart my_postgres

這將使 pg_rman 配置生效。

設置定時備份

1.創(chuàng)建一個名為 pg_rman_backup.sh 的腳本文件,并將其放置在備份目錄中,例如 /pg_rman_backup。

2.編輯 pg_rman_backup.sh 腳本,設置備份的參數(shù)和選項。例如,以下是一個示例腳本:

#!/bin/bash
 
# 定義備份目錄和文件名
BACKUP_DIR="/pg_rman_backup"
BACKUP_FILE="backup_%Y%m%d_%H%M%S"
 
# 獲取當前日期和時間
CURRENT_DATE=$(date "+%Y-%m-%d")
CURRENT_TIME=$(date "+%H:%M:%S")
 
# 判斷當前日期是周日還是周一到周六
if [ "$(date +%u)" == "7" ]; then
  # 如果是周日,則執(zhí)行全量備份
  echo "[$CURRENT_DATE $CURRENT_TIME] Performing full backup..."
  pg_rman backup --backup-path=$BACKUP_DIR --backup-mode=full --backup-name-format=$BACKUP_FILE
else
  # 如果是周一到周六,則執(zhí)行增量備份
  echo "[$CURRENT_DATE $CURRENT_TIME] Performing incremental backup..."
  pg_rman backup --backup-path=$BACKUP_DIR --backup-mode=incremental --backup-name-format=$BACKUP_FILE
fi

3.設置定時任務,使用 cron 在容器內(nèi)設置每周日凌晨1點執(zhí)行全量備份,每周一到周六凌晨1點執(zhí)行增量備份。例如,以下是一個 cron 配置示例:

# 進入 PostgreSQL 容器
docker exec -it my_postgres bash
 
# 編輯 crontab 配置文件
crontab -e
 
# 在 crontab 配置文件中添加以下定時任務
0 1 * * 7 /pg_rman_backup/pg_rman_backup.sh   # 每周日凌晨1點執(zhí)行全量備份
0 1 * * 1-6 /pg_rman_backup/pg_rman_backup.sh # 每周一到周六凌晨1點執(zhí)行增量備份

這將在每周日凌晨1點執(zhí)行全量備份,每周一到周六凌晨1點執(zhí)行增量備份,根據(jù)您的需求進行定時備份。請注意,crontab 的時間設置根據(jù)您的系統(tǒng)時區(qū)而定,以上示例假設您的系統(tǒng)時區(qū)為 UTC。如果您的系統(tǒng)時區(qū)不同,需要根據(jù)實際情況進行調(diào)整。

停止定時任務

1.打開終端或 SSH 連接到你的服務器。

2.運行以下命令來編輯你的 crontab 配置文件:

crontab -e

在編輯模式下,找到你之前添加的定時任務行,將這些行刪除或注釋掉。你可以在行前面添加 # 符號,這樣它們將被視為注釋而不再執(zhí)行:

# 0 1 * * 7 /pg_rman_backup/pg_rman_backup.sh
 
# 0 1 * * 1-6 /pg_rman_backup/pg_rman_backup.sh

保存并退出編輯器。

這將停止之前設置的定時任務。 Crontab 將不再執(zhí)行這些任務。

請注意,你需要使用具有適當權(quán)限的用戶運行 crontab -e 來編輯 crontab 配置文件。如果你使用了 root 用戶來設置這些任務,你應該以 root 用戶身份運行上述命令。

刪除備份

在 Docker 環(huán)境下,要刪除 pg_rman 創(chuàng)建的備份文件,可以通過以下步驟進行:

進入運行 PostgreSQL 容器的主機。

在主機上定位到 pg_rman 備份文件的存儲路徑。這通常在容器內(nèi)的某個掛載目錄中,可以通過掛載選項 -v 或 --volume 在啟動容器時指定的。例如,如果在啟動容器時使用了以下命令:

docker run -v /my/backup/folder:/var/lib/postgresql/pg_rman_backup postgres

那么備份文件將會存儲在主機上的 /my/backup/folder 目錄中。

在主機上使用命令行或文件管理工具,刪除不再需要的備份文件。例如,可以使用 rm 命令刪除文件,例如:

rm /my/backup/folder/my_backup

注意,刪除備份文件時要謹慎,確保您只刪除不再需要的備份文件,并且不會影響到正在使用的數(shù)據(jù)庫的完整性和可用性。

此外,您也可以在運行 PostgreSQL 容器時通過 -e 或 --env 參數(shù)設置 pg_rman.backup_path 參數(shù),將備份文件存儲到容器內(nèi)的其他目錄,并在容器內(nèi)使用相應的權(quán)限刪除備份文件。例如,可以使用以下命令啟動容器,并將備份文件存儲到 /my/backup/folder 目錄:

docker run -e pg_rman.backup_path=/my/backup/folder postgres

然后在容器內(nèi)使用相應的權(quán)限刪除備份文件。請注意,這種方法需要在容器內(nèi)具有足夠的權(quán)限來刪除文件,并且需要小心以避免意外刪除重要數(shù)據(jù)。

pg_rman如何知道postgres的數(shù)據(jù)文件位置

pg_rman 通過連接到 PostgreSQL 數(shù)據(jù)庫來獲取數(shù)據(jù)文件的位置,因為 PostgreSQL 維護了有關(guān)數(shù)據(jù)文件的元數(shù)據(jù)信息。您無需手動指定數(shù)據(jù)文件位置,pg_rman 會自動檢測數(shù)據(jù)庫中的數(shù)據(jù)目錄。

通常,pg_rman 會查看 PostgreSQL 數(shù)據(jù)目錄,并從數(shù)據(jù)庫的元數(shù)據(jù)中了解數(shù)據(jù)文件的位置。這包括主要數(shù)據(jù)目錄、表空間、以及其他相關(guān)信息。然后,pg_rman 使用這些信息來備份和還原數(shù)據(jù)庫。

在 PostgreSQL 中,數(shù)據(jù)文件通常存儲在數(shù)據(jù)庫數(shù)據(jù)目錄下的 base 目錄中。pg_rman 會查找這些數(shù)據(jù)文件,以確保備份包含所有必要的數(shù)據(jù)。

雖然大多數(shù)情況下 pg_rman 可以自動識別數(shù)據(jù)文件的位置,但在某些特殊情況下,您可能需要手動指定數(shù)據(jù)文件的位置,特別是在您的數(shù)據(jù)庫配置與標準設置不同的情況下。要手動指定數(shù)據(jù)文件位置,您可以在 pg_rman 的配置文件中使用 DATABASE_PATH 參數(shù)來定義數(shù)據(jù)庫的數(shù)據(jù)目錄路徑。例如:

DATABASE_PATH = '/path/to/postgresql/data'

將 /path/to/postgresql/data 替換為您 PostgreSQL 數(shù)據(jù)目錄的實際路徑。

總之,pg_rman 通常能夠自動檢測 PostgreSQL 數(shù)據(jù)文件的位置,但您也可以在需要時手動指定它們。這樣,pg_rman 就能正確備份和還原數(shù)據(jù)庫。

以上就是Docker環(huán)境實現(xiàn)PostgreSQL自動備份的流程步驟的詳細內(nèi)容,更多關(guān)于Docker PostgreSQL自動備份的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PostgreSQL 字符串拆分與合并案例

    PostgreSQL 字符串拆分與合并案例

    這篇文章主要介紹了PostgreSQL 字符串拆分與合并案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 史上最全PostgreSQL?DBA最常用SQL

    史上最全PostgreSQL?DBA最常用SQL

    這篇文章主要介紹了PostgreSQL?DBA最常用SQL?,主要包括背景及常用查詢語句,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • PostgreSql 導入導出sql文件格式的表數(shù)據(jù)實例

    PostgreSql 導入導出sql文件格式的表數(shù)據(jù)實例

    這篇文章主要介紹了PostgreSql 導入導出sql文件格式的表數(shù)據(jù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 淺談Postgresql默認端口5432你所不知道的一點

    淺談Postgresql默認端口5432你所不知道的一點

    這篇文章主要介紹了淺談Postgresql默認端口5432你所不知道的一點,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • postgresql 替換空格 換行和回車的操作

    postgresql 替換空格 換行和回車的操作

    這篇文章主要介紹了postgresql 替換空格 換行和回車的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • postgresql數(shù)據(jù)庫導出和導入及常用的數(shù)據(jù)庫管理工具

    postgresql數(shù)據(jù)庫導出和導入及常用的數(shù)據(jù)庫管理工具

    數(shù)據(jù)庫的導入導出是最常用的功能之一,而PostgreSQL提供的對應工具為pg_dump和pg_restore。pg_dump是用于備份PostgreSQL數(shù)據(jù)庫的工具,下面這篇文章主要給大家介紹了關(guān)于postgresql數(shù)據(jù)庫導出和導入及常用的數(shù)據(jù)庫管理工具使用的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • PostgreSQL 實現(xiàn)定時job執(zhí)行(pgAgent)

    PostgreSQL 實現(xiàn)定時job執(zhí)行(pgAgent)

    這篇文章主要介紹了PostgreSQL 實現(xiàn)定時job執(zhí)行(pgAgent),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL12.5中分區(qū)表的一些操作實例

    PostgreSQL12.5中分區(qū)表的一些操作實例

    PostgreSQL支持通過表繼承進行分區(qū),下面這篇文章主要給大家介紹了關(guān)于PostgreSQL12.5中分區(qū)表的一些操作的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • PostgreSQL 慢查詢SQL跟蹤操作

    PostgreSQL 慢查詢SQL跟蹤操作

    這篇文章主要介紹了PostgreSQL 慢查詢SQL跟蹤操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • postgresql 實現(xiàn)字符串分割字段轉(zhuǎn)列表查詢

    postgresql 實現(xiàn)字符串分割字段轉(zhuǎn)列表查詢

    這篇文章主要介紹了postgresql 實現(xiàn)字符串分割字段轉(zhuǎn)列表查詢,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論