本文的寫作原因:對實(shí)際客戶需求的一次小總結(jié),順帶做一次筆記
數(shù)據(jù)庫備份方案起因
任何數(shù)據(jù)庫都需要備份,備份數(shù)據(jù)是維護(hù)數(shù)據(jù)庫必不可少的操作。
數(shù)據(jù)庫備份常見的應(yīng)用場景:
- 硬件故障造成數(shù)據(jù)庫部分?jǐn)?shù)據(jù)或全部數(shù)據(jù)丟失
- 人為操作失誤造成某些數(shù)據(jù)被誤操作
- 軟件 BUG 造成部分?jǐn)?shù)據(jù)或全部數(shù)據(jù)丟失
- ……
對于上述場景還有很多,公司里面讓我做數(shù)據(jù)庫備份就以上三個原因(只針對我們公司的業(yè)務(wù)來說)
數(shù)據(jù)庫備份的實(shí)際操作
測試環(huán)境:
centos 7
docker 20.10.12
postgis/postgis:13-master
老板要求數(shù)據(jù)庫備份的這個方案最好能跟著數(shù)據(jù)庫啟動自動配置,不需要人工配置,且能夠清除歷史備份(這個算基本需求)
注意:下面所提到的腳本文件都放在同一個目錄下
一、選擇數(shù)據(jù)庫備份時(shí)間
在業(yè)務(wù)閑時(shí),設(shè)置定時(shí)任務(wù)crontab定時(shí)任務(wù)(每日凌晨),全量備份,這里查看過pgsql的官方文檔最后決定使用pg_basebackup的命令來實(shí)現(xiàn),其他方式看了一下不太適合我這個菜雞。
二、編寫數(shù)據(jù)庫備份腳本
數(shù)據(jù)庫備份及刪除歷史備份,腳本如下(backup.sh)
#!/bin/bash
#利用docker命令向容器打入命令
docker exec --user postgres postgis pg_basebackup -F t -z -R -D /data/backup
#做個異常識別,不然長時(shí)間備份不成功會把以前的備份刪掉
if [ $? -ne 0 ]; then
echo "failed to backup"
exit 1
else
echo "succeed to backup"
fi
#移動備份文件(從docker映射路徑移到其他地方)
mv /data/db/postgis/data/backup /data/postgresql/backup/data/$(date +%Y%m%d%H%M%S)
#sevendays_time=$(date -d -7days '+%Y%m%d')
#刪除超過七天的文件
cd /data/postgresql/backup/data
rm -rf $(date -d -7days '+%Y%m%d')*
三、將定時(shí)任務(wù)配置到服務(wù)器的定時(shí)任務(wù)上
將backup.sh的操作任務(wù)配置到crontab上,腳本如下(confBackup.sh)
#!/bin/bash
myShell=backup.sh
filePath=$(cd "$(dirname "$0")";pwd)
echo $filePath
echo $myShell
crontab -l > cron
number=`grep -n "$myShell" cron | cut -d ":" -f 1`
aa=$number
echo $aa
if [ -z $aa ];
then
echo "該任務(wù)不存在,將添加"
echo '* 0 * * * '$filePath'/'$myShell'' >> cron
crontab cron
rm -f cron
else
echo "該任務(wù)已經(jīng)存在,將會先刪除再添加"
sed -i '/'$myShell'/d' cron
echo '* 0 * * * '$filePath'/'$myShell'' >> cron
crontab cron
rm -f cron
fi
四、docker啟動數(shù)據(jù)庫腳本
其余docker的yml配置文件省略,編寫pgsql的啟動命令,腳本如下(start.sh)文章來源:http://www.zghlxwxcb.cn/news/detail-479130.html
#!/bin/bash
docker-compose -f postgis.yml up -d
./confBackup.sh
結(jié)束
這個自動備份腳本花了我半天時(shí)間研究,其中一個最坑的就是我在腳本上加了-it
,這個-it
命令是為了開啟容器終端,你必須指定參數(shù),但是我是在腳本執(zhí)行,所以導(dǎo)致我的腳本只能手動運(yùn)行(backup.sh),不能在定時(shí)任務(wù)執(zhí)行,坑的命令:docker exec -it --user postgres postgis pg_basebackup -F t -z -R -D /data/backup
文章來源地址http://www.zghlxwxcb.cn/news/detail-479130.html
參考資料:
定時(shí)任務(wù):https://www.runoob.com/w3cnote/linux-crontab-tasks.html
數(shù)據(jù)庫備份:http://www.postgres.cn/docs/9.4/app-pgbasebackup.html
封面圖片來自:深圳衛(wèi)健委
到了這里,關(guān)于pgsql數(shù)據(jù)庫自動備份的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!