MOGDB/openGauss資料庫gs_dump備份指令碼及清理

T1YSL發表於2022-01-07

有客戶需要對MOGDB/openGauss進行每天邏輯備份。如下指令碼分享給大家。當然專業的備份工具也可以瞭解一下雲和恩墨的BRM備份工具。

一、備份指令碼

1.指令碼

c.sh (可以改名字)

# database dump shell
# you should change the GAUSSHOME GAUSSPORT GAUSSDATA DUMP_USER DUMP_PASSWORD
#!/bin/bash
source /etc/profile
source /home/omm/.bash_profile
export GAUSSHOME=/opt/gaussdb/app
export GAUSSPORT=26000
export GAUSSDATA=/gaussdb/data/dn1
export PATH=$PGHOME/bin:$PATH
DUMP_USER=ysla
DUMP_PASSWORD='1qaz@WSX'
CUR_DATE=`date "+%Y-%m-%d-%H%M"`
dbnamelist=`cat oo.txt`
#Loading DBLIST
gsql -p ${GAUSSPORT} postgres -c "select datname from pg_database where datname not in ('template1','template0','postgres')" -t | grep -v '^$' >oo.txt
#save directory
SAVE_BASE_DIR="/gaussdb/dump_dir"
DAT_FILE_DIR="${SAVE_BASE_DIR}/${CUR_DATE}"
if [ -d ${DAT_FILE_DIR} ]
 then :
 else
 mkdir -p ${DAT_FILE_DIR}
fi
# The real backup step!
echo "`date "+%Y-%m-%d-%H%M"` begin backup db "
for dbname in ${dbnamelist}
do
gs_dump -E UTF8 ${dbname} -U ${DUMP_USER} -W ${DUMP_PASSWORD} -p ${GAUSSPORT} -F p -f ${DAT_FILE_DIR}/${dbname}_${CUR_DATE}.sql
gs_dumpall -l ${dbname} -U ${DUMP_USER} -W ${DUMP_PASSWORD} -p ${GAUSSPORT} -g -f ${DAT_FILE_DIR}/global_data_${dbname}_${CUR_DATE}.sql
done
tar -cjvf ${DAT_FILE_DIR}.tar.gz /${DAT_FILE_DIR} --remove-files
echo "`date "+%Y-%m-%d-%H%M"` end backup db "

這個指令碼需要修改GAUSSHOME GAUSSPORT GAUSSDATA DUMP_USER DUMP_PASSWORD這幾個(資料庫家目錄,埠,資料目錄,做dump的使用者,以及密碼),之後直接執行就可以。指令碼會自動查詢資料庫,並把’template1’,'template0’和’postgres’資料庫排除掉,然後把其他資料庫的資料和全域性物件各自備份一份,最後把備份的.sql檔案進行壓縮。

2,指令碼執行

執行結果如下:
image.png
去備份儲存的目錄下
image.png
解壓一個檔案
image.png
如下資料庫的資料儲存的檔名格式為(資料庫名_日期時間.sql)
全域性物件儲存的檔名格式為(global_data_資料庫名_日期時間.sql)
image.png image.png

檢視資料庫對應的資料備份

[omm@node1 2022-01-07-1634]$ vim ysla_2022-01-07-1634.sql

image.png
檢視資料庫對應的全域性物件備份

[omm@node1 2022-01-07-1634]$ vim global_data_ysla_2022-01-07-1634.sql

image.png

二、備份指令碼加到crontab

將如下一行加入crontab,讓指令碼每天凌晨12:30執行,這裡的flock是為了防止一個指令碼沒執行完就到了這個指令碼下一次執行的週期,可能會導致併發問題,嚴重時會導致出現髒資料效能瓶頸等惡性迴圈,所以使用flock建立排它鎖

-x 獨佔鎖 -n 直接失敗 如發現被鎖如就失敗不等待,除非解鎖

30 00 * * * /usr/bin/flock -xn /tmp/test.lock -c 'sh /home/omm/c.sh >> c.log'

三、備份保留,清理

每天都進行備份,如果備份天數過多不清理,可能使目錄打滿,因此需要新增備份清理策略,我這裡用的是crontab的方式,每天凌晨3:30清理過期資料。
如下一行加入到crontab裡邊,也是用了flock,這一行命令會找備份目錄下的檔案,排除掉隱藏檔案,並把30天之前的.tar.gz檔案刪除。

30 03 * * * /usr/bin/flock -xn /tmp/test1.lock -c "find /gaussdb/dump_dir  -not -path '*/\.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2851213/,如需轉載,請註明出處,否則將追究法律責任。

相關文章