docker運(yùn)行PostgreSQL數(shù)據(jù)庫(kù)維護(hù)執(zhí)行腳本備份數(shù)據(jù)庫(kù)與更新表結(jié)構(gòu)的方法
PostgreSQL簡(jiǎn)介
- PostgreSQL是一種開(kāi)源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它是一個(gè)功能強(qiáng)大、高度可定制化和支持復(fù)雜應(yīng)用的數(shù)據(jù)庫(kù)。它支持廣泛的數(shù)據(jù)類型,包括數(shù)值、文字、二進(jìn)制、地理空間等多種類型,同時(shí)還擁有高級(jí)數(shù)據(jù)建模和表連接等功能。PostgreSQL是使用ANSI SQL標(biāo)準(zhǔn)的一種數(shù)據(jù)庫(kù),也支持JSON、XML等多種數(shù)據(jù)格式。
- PostgreSQL 是一個(gè)功能強(qiáng)大、可靠性高、豐富性強(qiáng)的數(shù)據(jù)庫(kù)管理系統(tǒng),廣泛應(yīng)用于大型企業(yè)和各類應(yīng)用程序。
- 在開(kāi)源界,PostgreSQL得到了廣泛的認(rèn)可和支持,并且在全球范圍內(nèi)有著龐大的社區(qū)和開(kāi)發(fā)者團(tuán)隊(duì)。它是一種成熟的數(shù)據(jù)庫(kù)技術(shù),也是當(dāng)今最具活力和發(fā)展?jié)摿Φ拈_(kāi)源數(shù)據(jù)庫(kù)之一。
業(yè)務(wù)場(chǎng)景
- 我們有一小部分客戶,項(xiàng)目涉及路口較少,本身對(duì)平臺(tái)的需求較少,對(duì)平臺(tái)并發(fā)量也沒(méi)啥要求
- 另一方面,也是比較重要的原因,他們沒(méi)有買新服務(wù)器的預(yù)算,只會(huì)提供給我們一臺(tái)比較老的windows server服務(wù)器,用來(lái)部署平臺(tái)
- 為了部署和運(yùn)維方便,我們會(huì)將所有微服務(wù)和中間件,使用docker部署,使用docker-compose統(tǒng)一管理配置文件
- 在windows機(jī)器上安裝virtualBox,在里面安裝CentOS7虛擬機(jī),在虛擬機(jī)里部署平臺(tái)(數(shù)據(jù)庫(kù)也使用了docker部署)
- 客戶是內(nèi)網(wǎng)環(huán)境,后續(xù)更新部署時(shí),主要是整理好部署包和更新腳本,當(dāng)?shù)鼐S保配合更新。這時(shí)出現(xiàn)了一個(gè)問(wèn)題,有時(shí)候需要修改表結(jié)構(gòu),當(dāng)?shù)鼐S保人員不會(huì)操作(其實(shí)他們主要是使用平臺(tái)幫客戶干活,不是專業(yè)運(yùn)維)
- 現(xiàn)在需要在原有的程序更新腳本里,把數(shù)據(jù)庫(kù)結(jié)構(gòu)更新過(guò)程放進(jìn)去,使維保人員只需要執(zhí)行一個(gè)腳本即可完成更新
- 對(duì)于一個(gè)生產(chǎn)環(huán)境,數(shù)據(jù)庫(kù)的備份策略是必要的,至少要做到每天備份一次。由于我們只有業(yè)務(wù)數(shù)據(jù)存儲(chǔ)在PostgreSQL,整體數(shù)據(jù)量不大,所以采用全量備份
數(shù)據(jù)庫(kù)維護(hù)
docker-compose配置
- 首先放一下我們的PostgreSQL的docker-compose配置
# 數(shù)據(jù)庫(kù)服務(wù) postgresql: image: postgres:14.2 container_name: postgres ports: - 5432:5432 volumes: - ./volumes/postgresql/:/var/lib/postgresql/data/ - /etc/localtime:/etc/localtime environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=xxxxxxxx - POSTGRES_HOST_AUTH_METHOD=md5 - TZ=Asia/Shanghai restart: always
- 主要是需要把PostgreSQL數(shù)據(jù)庫(kù)存放數(shù)據(jù)的data目錄映射出來(lái),其他都是通用配置,用戶名、密碼、密碼訪問(wèn)、時(shí)區(qū)等
- 數(shù)據(jù)目錄映射出來(lái),也方便做數(shù)據(jù)的全量備份與恢復(fù)。
備份腳本
- 可以使用定時(shí)任務(wù),在每天凌晨直接對(duì)映射出來(lái)的文件夾,進(jìn)行壓縮備份到其他目錄
- 下面是備份腳本pg-backup.sh,只保留10天的備份,循環(huán)刪除最早的一天
#!/bin/bash echo "======== start backup pg data ========" # pg 數(shù)據(jù)目錄 pgdata=/home/signal/instance/volumes target=/home/bak/pgbak if [ ! -d $target ];then mkdir -p $target else echo "文件夾已經(jīng)存在" fi # 當(dāng)前日期 curDay=$(date "+%Y-%m-%d") echo ${curDay} # 保留文件數(shù) ReservedNum=10 # 去pg 數(shù)據(jù)目錄,按日期壓縮到備份文件夾 cd $pgdata tar -zcvf $target/postgresql-$curDay.tgz postgresql # 刪除多余天數(shù)的壓縮文件 #*.tgz表示篩選文件類型,去掉則針對(duì)整個(gè)目錄的文件 cd $target FileNum=$(ls -l ./*.tgz |grep ^- |wc -l) while(( FileNum > $ReservedNum)) do OldFile=$(ls -rt ./*.tgz| head -1) rm -f $OldFile let "FileNum--" done echo "======== bakup pg data end ========"
- 然后將腳本加入服務(wù)器定時(shí)執(zhí)行即可,可以直接使用
crontab
更新表結(jié)構(gòu)腳本
- docker是可以執(zhí)行sh腳本的,使用
docker exec 容器name/id /bin/sh -c "命令"
即可 - 在原有的程序更新腳本里,加入數(shù)據(jù)庫(kù)更新命令即可,具體命令如下:
echo "更新postgresql表結(jié)構(gòu)" docker exec postgres /bin/sh -c "sh /var/lib/postgresql/data/db_update.sh"
- 其中
/var/lib/postgresql/data/db_update.sh
是數(shù)據(jù)庫(kù)更新腳本,使用psql
命令執(zhí)行SQL文件,具體如下:
#!/bin/bash # 以postgres用戶 執(zhí)行此腳本 更新數(shù)據(jù)庫(kù) echo 'update database' psql -d core -U postgres -f /var/lib/postgresql/data/core_update.sql sleep 1s echo 'create update end' exit
- 其中
/var/lib/postgresql/data/core_update.sql
為具體的SQL文件 - 由于
/var/lib/postgresql/data
文件夾已經(jīng)映射出來(lái)了,更新部署程序時(shí),順便更新core_update.sql
即可
到此這篇關(guān)于docker運(yùn)行PostgreSQL數(shù)據(jù)庫(kù)維護(hù)執(zhí)行腳本備份數(shù)據(jù)庫(kù)與更新表結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)docker運(yùn)行PostgreSQL數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker學(xué)習(xí)之常用的基礎(chǔ)命令總結(jié)
這篇文章給大家整理了一些Docker常用的基礎(chǔ)命令,對(duì)大家日常使用Docker還是很有幫助,通過(guò)這些命令可以有效的提高大家的工作效率,有需要的朋友們下面來(lái)一起看看吧。2016-10-10滾動(dòng) docker 中的 nginx 日志思路詳解
Nginx 自己沒(méi)有處理日志的滾動(dòng)問(wèn)題,本文筆者介紹如何滾動(dòng)運(yùn)行在 docker 中的 nginx 日志文件,感興趣的朋友一起看看吧2018-08-08詳解用Docker搭建Laravel和Vue項(xiàng)目的開(kāi)發(fā)環(huán)境
這篇文章主要介紹了詳解用Docker搭建Laravel和Vue項(xiàng)目的開(kāi)發(fā)環(huán)境,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03詳解docker compose搭建lnmpr環(huán)境實(shí)現(xiàn)
這篇文章主要為大家介紹了使用docker compose搭建lnmpr環(huán)境實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11docker修改容器的端口、容器名、映射地址以及注意事項(xiàng)
在日常的docker運(yùn)維中,經(jīng)常遇到修改容器的端口、容器名、映射地址等信息,這篇文章主要給大家介紹了關(guān)于docker修改容器的端口、容器名、映射地址以及注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2022-08-08安裝harbor作為docker鏡像倉(cāng)庫(kù)的問(wèn)題
這篇文章主要介紹了安裝harbor作為docker鏡像倉(cāng)庫(kù),主要包括docker和docker-compose離線部署,安裝harbor作為本地的倉(cāng)庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06Docker部署rabbitmq遇到的兩個(gè)問(wèn)題
當(dāng)使用docker部署rabbitmq時(shí)遇到兩個(gè)問(wèn)題,訪問(wèn)交換機(jī)時(shí)報(bào)錯(cuò),另一種是訪問(wèn)channel時(shí)報(bào)錯(cuò),本文給大家分享解決方案,感興趣的朋友跟隨小編一起看看吧2021-07-07