【雲原生】Docker部署資料庫的持久化
目錄
資料庫持久化啟動
資料持久化驗證
在上一篇基於docker的安裝中,我們使用enmotech的最新映象完成了安裝和啟動。容器部署非常方便,解除安裝更是簡單。但是這個特點如同一柄雙刃劍,帶來便利的同時,也會有一些缺點。容器一旦刪除,容器內的所有資料和配置都會丟失。即使重新執行一個新的容器,得到的不過是一個嶄新的初始狀態的資料庫。
所以,對於資料庫這種需要持久化的資料來說,還需要看下如何才能防止因為容器的刪除或損壞導致資料的丟失。在openGauss資料庫中,通過指定相關引數來實現此功能。
資料庫持久化啟動
我們本次持久化測試的環境基於上一篇在docker部署openGauss。我們先把上次啟動的容器例項刪掉。
[[email protected] docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
573ea1edffb8 enmotech/opengauss:3.0.0 "entrypoint.sh gauss…" 3 days ago Up 3 days 5432/tcp opengauss
[[email protected] docker]# docker stop 573ea1edffb8
573ea1edffb8
[[email protected] docker]# docker rm 573ea1edffb8
573ea1edffb8
以下命令使用原opengauss映象啟動一個容器:
docker run --name opengauss --privileged=true -d -e [email protected] -v /enmotech/opengauss:/var/lib/opengauss -p 15432:5432 enmotech/opengauss:3.0.0
其餘引數的解釋可以參考上一篇安裝。這裡我們主要關注下 -p -v兩個引數。
- -p引數:openGauss的預設偵聽啟動在容器內的5432埠上,如果想要從容器外部訪問資料庫,則需要在docker run的時候指定-p引數。比如以上命令將允許使用15432埠在容器外訪問資料庫。上述命令正常啟動容器資料庫之後,可以通過外部的gsql進行資料庫訪問。
- -v 引數:指定Docker中openGauss的所有資料檔案,容器內是/var/lib/opengauss目錄 ,宿主機是/enmotech/opengauss目錄。如果宿主機的/enmotech/opengauss如果不存在,docker會自動建立,但是必須是絕對路徑。Docker對其擁有讀寫許可權。
在容器內部檢視資料庫目錄。如下圖,已在容器內/var/lib/opengauss建立了data目錄。
[[email protected] docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89747134cd4d enmotech/opengauss:3.0.0 "entrypoint.sh gauss…" About a minute ago Up About a minute 0.0.0.0:15432->5432/tcp, :::15432->5432/tcp opengauss
[[email protected] docker]# docker exec -it 89747134cd4d /bin/bash
[email protected]:/# cd /var/lib/opengauss/data/
[email protected]:/var/lib/opengauss/data# ls
asp_data gs_gazelle.conf pg_audit pg_errorinfo pg_location pg_notify pg_snapshots PG_VERSION postmaster.opts undo
base gs_profile pg_clog pg_hba.conf pg_log pg_perf pg_stat_tmp pg_xlog postmaster.pid
gaussdb.state gswlm_userinfo.cfg pg_csnlog pg_ident.conf pg_logical pg_replslot pg_tblspc postgresql.conf postmaster.pid.lock
global mot.conf pg_ctl.lock pg_llog pg_multixact pg_serial pg_twophase postgresql.conf.lock sql_monitor
我們在宿主機上檢視下資料庫目錄。如下圖,已在宿主機上/enmotech/opengauss建立了data目錄。可以看到容器中的資料已儲存到作業系統中。
資料持久化驗證
下面我們通過建表、插入資料檢視是否可以完成資料的持久化儲存。
1.進入容器,登入資料庫。
[[email protected] docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89747134cd4d enmotech/opengauss:3.0.0 "entrypoint.sh gauss…" About a minute ago Up About a minute 0.0.0.0:15432->5432/tcp, :::15432->5432/tcp opengauss
[[email protected] docker]# docker exec -it 89747134cd4d /bin/bash
[email protected]:/var/lib/opengauss/data# su - omm
[email protected]:~$ gsql
omm=#
是個新的資料庫例項,看下我之前安裝時測試建立的使用者wxx在不。不出所料,就是不存在的。因為之前操作的時候並沒有進行持久化的啟動。
2.建立表test1,然後插入資料。
create table test1(id int,name varchar(20));
INSERT INTO test1 VALUES (1, 'oligei');
3.關閉資料庫。
[email protected]:~$ gs_ctl stop -D /var/lib/opengauss/data/
[2022-07-19 02:46:25.253][423][][gs_ctl]: gs_ctl stopped ,datadir is /var/lib/opengauss/data
waiting for server to shut down....[[email protected] docker]#
4.啟動資料庫
[[email protected] docker]# docker start 89747134cd4d
89747134cd4d
[[email protected] docker]# docker exec -it 89747134cd4d /bin/bash
[email protected]:/# su - omm
[email protected]:~$ gsql
5.驗證一下容器重啟後,原來的資料還在。
6.只是重啟的話,那資料沒丟一點都不意外。我們更多關注的是容器刪除這種情況。
[[email protected] docker]# docker stop 89747134cd4d
89747134cd4d
[[email protected] docker]# docker rm 89747134cd4d
89747134cd4d
[[email protected] docker]# docker exec -it 89747134cd4d /bin/bash
Error: No such container: 89747134cd4d
可以看到原容器已刪除成功。
7.現在重新啟動,看下是否持久化成功。這裡還是需要使用之前指定的儲存路徑的。
[[email protected] docker]# docker run --name opengauss --privileged=true -d -e [email protected] -v /enmotech/opengauss:/var/lib/opengauss -p 15432:5432 enmotech/opengauss:3.0.0
[[email protected] docker]# docker ps
[[email protected] docker]# docker exec -it 74b94a7bda80 /bin/bash
[email protected]:/# su - omm
[email protected]:~$ gsql
omm=# select * from test1;
結果上個圖。
由上圖也可以看出,原來的表記錄依然存在,資料庫持久化成功。
openGauss: 一款高效能、高安全、高可靠的企業級開源關係型資料庫。
🍒如果您覺得博主的文章還不錯或者有幫助的話,請關注一下博主,如果三連收藏支援就更好啦!謝謝各位大佬給予的鼓勵!
- 資料遷移工具chameleon的使用限制
- 【openGauss資料遷移系列】使用pgloader將資料從MySQL遷移到openGauss的最佳實踐
- openGauss常用的客戶端連線工具
- SQL介紹
- 【雲原生】Kubernetes(K8S)與資料庫
- 資料庫核心分析 - SQL by pass & 經典執行器
- 【雲原生 】Kubernetes(k8s)標籤詳解
- 【雲原生】使用Dockerfile製作openGauss映象
- 【雲原生】Kubernetes(k8s)的核心設計介紹
- Docker映象使用詳解
- 【雲原生】如何快速部署Kubernetes
- 【雲原生】使用Docker快速部署openGauss主備環境
- 【雲原生】快速瞭解Kubernetes
- 【雲原生】Docker部署資料庫的持久化
- 【雲原生】使用Docker部署openGauss
- 遇到慢SQL該怎麼辦?(下)
- 遇到慢SQL該怎麼辦?(上)
- openGauss核心分析-統計資訊與行數估計
- openGauss資料庫原始碼解析系列文章—— 密態等值查詢技術詳解(下)
- openGauss資料庫原始碼解析系列文章—— 密態等值查詢技術詳解(上)