備份與恢復:Polardb資料庫資料基於時間點恢復
一、前言
任何系統都有崩潰的可能,任何資料庫產品的備份工作的重要性毋庸置疑。透過備份和恢復來保護資料,避免資料丟失,在發生災難或人為誤操作的情況下,能夠進行恢復日常最重要的工作。不僅要保證能夠成功備份,還要保證備份資料能夠恢復,如果能在更短的時間進行恢復更是錦上添花。此方案是
Polardb-O
資料庫採用全量備份和
PG_WAL
日誌來實現基於時間線的恢復工作。
二、環境資訊
2.1 主機資訊
IP地址 |
用途 |
說明 |
192.168.58.134 |
備份庫 |
|
192.168.58.131 |
業務庫 |
三、恢復過程
業務資料庫人為誤操作導致庫表資料丟失問題,因此需要藉助備份庫中的基準備份和增量PG_WAL歸檔日誌來實現基於時間線資料恢復。
3.1 資料庫備份
3.1.1 歸檔配置
1 、建立歸檔目錄
# su - polardb $ mkdir -p /home/{backups,archive_wals} |
2 、開啟歸檔引數
alter system set wal_level = archive; alter system set wal_keep_segments=10; alter system set archive_mode = on; alter system set archive_command ='test ! -f /home/archive_wals/%f && pfs cp -S disk /vda/data/pg_wal/%f /home/archive_wals/%f '; select pg_reload_conf(); |
3
、啟動資料庫
# su - polardb $ pg_ctl restart -m fast |
說明:如果當前資料庫已經開啟歸檔,就可以忽略此部分操作。直接進入下面操作。
3.1.2 基礎備份
1、 使用polar_basebackup 工具建立基礎備份
# su – polardb # 按日期建立備份路徑 $mkdir -p /home/backups/0917 $ polar_basebackup -D /home/backups/0917/base -X stream --progress -v 如下結果說明基礎備份完成 154279/154279 kB (100%), 2/2 tablespaces polar_basebackup: write-ahead log end point: 2/C00081C0 polar_basebackup: waiting for background process to finish streaming ... polar_basebackup: base backup completed |
2、 檢視基礎備份
$ cat /home/backups/0917/base/backup_label START WAL LOCATION: 2/C00080B8 (file 000000010000000200000003) CHECKPOINT LOCATION: 2/C00080F0 BACKUP METHOD: streamed BACKUP FROM: master START TIME: 2020-09-17 14:34:55 UTC LABEL: pg_basebackup base backup START TIMELINE: 1 |
3.1.3 增量備份
開啟了歸檔後,PG_WAL日誌檔案寫滿後,會自動將日誌歸檔到本地目錄/home/archive_wals。
# ls -lrt /home/archive_wals total 6291456 -rw------- 1 polardb polardb 1073741824 Sep 16 14:28 000000010000000100000002 -rw------- 1 polardb polardb 1073741824 Sep 16 14:44 000000010000000100000003 -rw------- 1 polardb polardb 1073741824 Sep 16 14:47 000000010000000200000000 -rw------- 1 polardb polardb 1073741824 Sep 16 21:25 000000010000000200000001 -rw------- 1 polardb polardb 1073741824 Sep 17 14:33 000000010000000200000002 -rw------- 1 polardb polardb 1073741824 Sep 17 14:53 000000010000000200000003 |
3.2 資料庫恢復
3.2.1 前置準備
準備好一套需要恢復資料庫的新主機,並安裝相應的polardb-o資料庫軟體與PFS磁碟管理軟體。
1、安裝好polardb和PFS軟體
# rpm -qa|grep alio PolarDB-O-0200-2.0.0-20200914083756.alios7.x86_64 t-polarstore-pfsd-san-1.1.41-20200909132342.alios7.x86_64 |
2、使用者環境變數配置
新增polardb使用者環境變數.bash_profoke,然後執行soure ~/.bash_profile生效當前使用者變數配置。
export PGPORT=5432 export PGDATA=/home/polardb_data export.utf8 export PGHOME=/usr/local/polardb_o_20200914 export PFSHOME=/usr/local/polarstore/pfsd export PFSDISK=vda export PFSDIR=/vda/data/ export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH export PATH=$PGHOME/bin:$PFSHOME/bin/:$PATH export PGHOST=$PGDATA export PGUSER=polardb export PGDATABASE=polardb |
3、啟動PFS程式
# ps -ef |grep pfsd|grep -v grep root 2426 1 99 16:31 ? 02:00:02 /usr/local/polarstore/pfsd/bin/../bin/pfsdaemon -p vda -c /usr/local/polarstore/pfsd/bin/../conf/pfsd_logger.conf
如果沒有啟動需要手工拉起 pfsd進行 sudo /usr/local/polarstore/pfsd/bin/start_pfsd.sh -p vda |
4、檢查PFS檔案系統是否具備條件
$ sudo /usr/local/bin/ pfs -C disk ls /vda/ File 1 4194304 Wed Aug 19 20:25:25 2020 .pfs-paxos File 1 1073741824 Wed Aug 19 20:25:26 2020 .pfs-journal Dir 1 0 Wed Sep 16 19:43:29 2020 polar_data 這裡的儲存目錄是 /vda/polar_data/ |
5、將全量基線備份與增量pg_wal日誌上傳到需要恢復的伺服器
s cp -r /home/backups/0917/base/ 192.168.58.131:/home/recover_dir scp -r /home/archive_wals/ 192.168.58.131:/home/recover_dir |
說明:確認以上準備工作完成後,就可以進行下面的資料庫恢復工作。
3.2.2 庫恢復
1. 將pfs檔案上面的資料檔案複製到PFS
# su – polardb $sudo /usr/local/bin/pfs cp -r -S disk /home/recover_dir /base/shared/ /vda/polar_data/ 如下日誌說明複製成功 pfs tool cmd record:cp -r -S disk /home/recover_dir/base/shared/ /vda/polar_data/ [PFS_LOG] Sep 17 15:06:12.101890 INF [40734] pfs build version:libpfs_version_("polarstore-build-desc-3213c11-Wed Sep 9 13:24:13 CST 2020") [PFS_LOG] Sep 17 15:06:12.102101 INF [40734] pid: 39652, caller: -bash [PFS_LOG] Sep 17 15:06:12.102145 INF [40734] pid: 39650, caller: sshd: root@pts/1 [PFS_LOG] Sep 17 15:06:12.102184 INF [40734] pid: 1003, caller: /usr/sbin/sshd -D ...... copy file from /home/recover_dir/base/shared//pg_xact/0000 to /vda/polar_data///pg_xact/0000 succeeded copy file from /home/recover_dir/base/shared//pg_multixact/members/0000 to /vda/polar_data///pg_multixact/members/0000 succeeded copy file from /home/recover_dir/base/shared//pg_multixact/offsets/0000 to /vda/polar_data///pg_multixact/offsets/0000 succeeded copy file from /home/recover_dir/base/shared//polar_non_exclusive_backup_label to /vda/polar_data///polar_non_exclusive_backup_label succeeded |
2. 檢查pfs檔案目錄內容
$ sudo /usr/local/bin/pfs -C disk ls /vda/polar_data Dir 1 256 Thu Sep 17 15:06:13 2020 pg_wal Dir 1 768 Thu Sep 17 15:06:32 2020 base Dir 1 9344 Thu Sep 17 15:06:36 2020 global Dir 1 0 Thu Sep 17 15:06:36 2020 pg_tblspc Dir 1 0 Thu Sep 17 15:06:36 2020 pg_logindex Dir 1 0 Thu Sep 17 15:06:36 2020 pg_twophase Dir 1 128 Thu Sep 17 15:06:36 2020 pg_xact Dir 1 0 Thu Sep 17 15:06:36 2020 pg_commit_ts Dir 1 256 Thu Sep 17 15:06:36 2020 pg_multixact Dir 1 0 Thu Sep 17 15:06:36 2020 pg_csnlog Dir 1 0 Thu Sep 17 15:06:36 2020 pg_replslot File 1 226 Thu Sep 17 15:06:36 2020 polar_non_exclusive_backup_labe |
3. 恢復本地資料目錄
$ cp -r /home/recover_dir/base /home/polardb_data $chmod 0700 /home/polardb_data |
4. 將歸檔檔案手工複製到PFS
1 )、如下是增量日誌檔案,需要複製到PFS中,用於增量資料恢復 $ ls -lrt /home/recover_dir/archive_wals/ total 6291456 -rw------- 1 polardb polardb 1073741824 Sep 17 15:00 000000010000000100000002 -rw------- 1 polardb polardb 1073741824 Sep 17 15:00 000000010000000100000003 -rw------- 1 polardb polardb 1073741824 Sep 17 15:01 000000010000000200000000 -rw------- 1 polardb polardb 1073741824 Sep 17 15:01 000000010000000200000001 -rw------- 1 polardb polardb 1073741824 Sep 17 15:01 000000010000000200000002 -rw------- 1 polardb polardb 1073741824 Sep 17 15:02 000000010000000200000003
2 )、複製檔案到PFS /usr/local/bin/pfs cp -D disk /home/recover_dir/archive_wals//000000010000000100000002 /vda/polar_data/pg_wal/ /usr/local/bin/pfs cp -D disk /home/recover_dir/archive_wals//000000010000000100000003 /vda/polar_data/pg_wal/ /usr/local/bin/pfs cp -D disk /home/recover_dir/archive_wals//000000010000000200000000 /vda/polar_data/pg_wal/ /usr/local/bin/pfs cp -D disk /home/recover_dir/archive_wals//000000010000000200000001 /vda/polar_data/pg_wal/ /usr/local/bin/pfs cp -D disk /home/recover_dir/archive_wals//000000010000000200000002 /vda/polar_data/pg_wal/ /usr/local/bin/pfs cp -D disk /home/recover_dir/archive_wals//000000010000000200000003 /vda/polar_data/pg_wal/
3 )、檢查日誌是否同步到PFS $ sudo /usr/local/bin/pfs -C disk ls /vda/polar_data/pg_wal/ Dir 1 0 Thu Sep 17 18:10:41 2020 archive_status File 1 1073741824 Thu Sep 17 18:55:07 2020 000000010000000200000003 File 1 1073741824 Thu Sep 17 18:54:20 2020 000000010000000100000002 File 1 1073741824 Thu Sep 17 18:54:32 2020 000000010000000100000003 File 1 1073741824 Thu Sep 17 18:54:43 2020 000000010000000200000000 File 1 1073741824 Thu Sep 17 18:54:49 2020 000000010000000200000001 F ile 1 1073741824 Thu Sep 17 18:54:57 2020 000000010000000200000002 |
5. 配置檔案修改postgresql.conf
修改如下兩處配置引數檔案
修改磁碟路徑修改成 /vda/polar_data polar_datadir='/vda/polar_data' archive_command='test ! -f /home/archive_wals/%f && pfs cp -S disk /vda/polar_data/pg_wal/%f /home/archive_wals /%f'
說明:/home/polardb/archive_wals 此目錄需要提前建立好。 |
6. 基於時間點增量恢復配置
需要在$PGDATA目錄下新增恢復配置檔案recovery.conf,並指定恢復時間點,修改引數recovery_target_time填寫恢復到某個時間點。
$ vi / home/polardb_data/recovery.conf restore_command = '' recovery_target_time = '17-SEP-20 14:48:11.0533 +08:00' |
7、庫恢復
1 、啟動資料庫,開始恢復 $ pg_ctl start 資料庫啟動開始進行恢復,一半恢復一半資料庫會停止恢復,看到如下日誌。
2 、登入資料庫psql,執行 resume操作 polardb=# select pg_wal_replay_resume() ; 直接完語句後,需要等一段時間才能完成恢復。
3 、確認資料庫是否恢復完成 polardb=# select pg_is_in_recovery(); pg_is_in_recovery ------------------- f 查詢recovery函式狀態為f說明已經恢復成功。f代表主庫,t代表備庫。 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2733771/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 備份與恢復:polardb資料庫備份與恢復資料庫
- 資料庫備份恢復資料庫
- postgresql備份與恢復資料庫SQL資料庫
- 資料庫備份與恢復技術資料庫
- Mysql資料備份與恢復MySql
- mongodb資料庫備份與恢復(資料庫資料遷移)MongoDB資料庫
- MySQL-19.資料庫備份與恢復MySql資料庫
- Mysql資料庫備份及恢復MySql資料庫
- 達夢資料庫備份恢復資料庫
- ORACLE資料庫基於時間點的不完全恢復Oracle資料庫
- MySQL備份與恢復——基於Xtrabackup物理備份恢復MySql
- RabbitMQ如何備份與恢復資料MQ
- SqlServer資料庫恢復備份資料的方法SQLServer資料庫
- 資料庫資料恢復—無備份,binlog未開啟的Mysql資料庫資料恢復案例資料庫資料恢復MySql
- 基於percona xtrabackup之innobackupex實現基於時間點資料庫恢復資料庫
- Linux下MySQL資料庫的備份與恢復LinuxMySql資料庫
- pg_dump 備份,恢復資料庫資料庫
- Mongo 資料庫備份和恢復命令Go資料庫
- PostgreSql資料庫的備份和恢復SQL資料庫
- Polardb資料庫掛庫後,如何恢復主備關係資料庫
- MySQL備份與恢復——基於MyDumper/MyLoader 邏輯備份恢復MySql
- 時序資料庫 InfluxDB 之備份和恢復策略資料庫UX
- 時序資料庫InfluxDB之備份和恢復策略資料庫UX
- 【資料庫資料恢復】SAP資料庫資料恢復案例資料庫資料恢復
- Dedecms資料庫恢復與備份的兩種方法資料庫
- 淺談達夢資料庫的備份與恢復資料庫
- MySQL備份與恢復——基於OUTFILE /LOAD DATA 邏輯備份恢復MySql
- PG-pg_dump備份/恢復資料庫資料庫
- vivo 資料庫備份恢復系統演化資料庫
- 使用Mysqldump備份和恢復MySQL資料庫MySql資料庫
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer
- 寶塔資料庫恢復 mysql資料庫丟失恢復 mysql資料庫刪除庫恢復 寶塔mysql資料庫恢復資料庫MySql
- NoSQL 資料庫案例實戰 -- MongoDB資料備份、恢復SQL資料庫MongoDB
- 【資料庫資料恢復】SQL Server資料庫磁碟空間不足的資料恢復案例資料庫資料恢復SQLServer
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- 資料庫修復資料恢復資料庫資料恢復
- gitlab的資料備份和恢復Gitlab
- 磁碟資料恢復及備份工具資料恢復