一台 2C2G 伺服器上的 KingbaseES 安裝記錄

先把環境落到一台機器上

接觸一套新資料庫,不能只盯著 SQL 語法。真正開始用的時候,最先碰到的往往是另一批問題:安裝包怎麼選,目錄放哪裡,資料庫執行個體怎麼初始化,服務怎麼啟停,客戶端怎麼連,授權檔放哪,日誌出了問題去哪看。

這些問題不複雜,但必須先跑一遍。否則後面寫 SQL、備份還原、工具使用時,環境本身一直不踏實。尤其是從 MySQL 過來,很多習慣會下意識套過去,比如預設連接埠、客戶端連線方式、服務管理命令、資料目錄位置。KingbaseES 底層和 PostgreSQL 有關係,但工具名、目錄結構、相容模式、授權機制都有自己的處理方式,不能只按 PostgreSQL 或 MySQL 的經驗猜。

所以第一步先搭一個能反覆折騰的單機環境。壞了可以重來,參數改錯了可以回滾,授權換錯了也能知道該還原哪個檔案。這個環境不承擔生產職責,只負責把安裝、初始化、啟動、連線這幾件事跑順。

伺服器是一台阿里雲輕量伺服器,Alibaba Cloud Linux 3,x86_64 架構,記憶體接近 2G,根分割區 40G。

伺服器基本資訊

這個配置很普通,甚至有點緊。單機安裝、啟動服務、連庫驗證、小表測試沒有問題;拿它做效能結論就不合適。比如初始化時預設 shared_buffers 是 128MB,這類結果和機器規格有關,不能直接拿來評價資料庫效能。

這台機器上已經有 Docker 和 docker-compose。

Docker 資訊

不過安裝這裡沒有走容器。官網的 Docker 映像頁面寫得很清楚:這個映像是 Docker 環境裡的 tar 類型精簡包,只包含資料庫主體功能,不包含介面驅動和工具等相關內容。

沒有選擇 Docker 映像的原因

如果只是快速起一個庫,Docker 映像當然省事。但這裡不只是看資料庫程序能不能跑,還要確認安裝目錄、工具目錄、初始化方式、服務啟停、授權檔位置。精簡映像會把很多安裝細節藏掉,反而不方便摸清楚完整結構。所以這裡直接用 ISO 在伺服器上裝。

目錄規劃

預設安裝路徑是 /opt/Kingbase/ES/V9,這裡沒有用預設值,統一放到 /acowbo/kingbase

text 体验AI代码助手 代码解读复制代码/acowbo/kingbase/
  install/    # 軟體安裝目錄
  data/       # 資料目錄
  backup/     # 備份和授權備份
  scripts/    # SQL 或 shell 腳本
  logs/       # 啟動日誌
  packages/   # 安裝包、授權檔、校驗檔

這個目錄不複雜,關鍵是分開。軟體檔案放 install,執行個體資料放 data,啟動日誌放 logs,安裝包和授權檔放 packages,替換授權前的舊檔案放 backup。路徑一開始定清楚,後面少很多「這個檔案到底在哪」的時間。

目錄結構和權限

安裝和執行盡量使用一般使用者,不要讓資料庫執行個體直接跑在 root 下。目錄權限已經給到 kingbase 使用者,後面執行 setup.shinitdbsys_ctl,都圍繞這個使用者來做。

安裝包下載和校驗

伺服器是 x86_64,下載時選 X64_Linux。下載頁上的包很多,Windows、Docker、海光、飛騰、鯤鵬、龍芯、申威都在一起,選錯了也能下載成功,但裝的時候就會浪費時間。

安裝包下載頁面

安裝包放到:

text 体验AI代码助手 代码解读复制代码/acowbo/kingbase/packages

下載完成後做一次 MD5 校驗。這個動作很小,但排查問題時很有用。至少能確認本地 ISO 沒有下載壞,也能把「安裝包是否和官網頁面一致」這個問題先排掉。

安裝包 MD5 校驗

掛載 ISO:

bash 体验AI代码助手 代码解读复制代码mkdir -p /mnt/kingbase
mount -o loop /acowbo/kingbase/packages/*.iso /mnt/kingbase
ls -lah /mnt/kingbase

掛載時出現下面這種提示是正常的:

text 体验AI代码助手 代码解读复制代码WARNING: device write-protected, mounted read-only.

ISO 本來就是唯讀媒介。只要掛載後能看到 setup.shsetup 目錄,安裝入口就沒有問題。

掛載 ISO 安裝包

console 模式安裝

伺服器沒有圖形桌面,SSH 裡直接用 console 模式:

bash 体验AI代码助手 代码解读复制代码cd /mnt/kingbase
sh setup.sh -i console

不帶 -i console 時,安裝器可能會嘗試圖形安裝。遠端伺服器上沒有 X11 環境,這條路通常走不通。加上 -i console 後,安裝流程就在終端裡一步一步互動。

console 模式啟動安裝器

啟動後能看到安裝器偵測到 Java 1.8,然後進入歡迎頁。提示 Press [ENTER] to next 時,直接按 Enter 繼續。

授權協議需要翻到結尾。到選擇項時,輸入 1 接受:

text 体验AI代码助手 代码解读复制代码Press [1] Accept, [2] Refuse, [3] Redisplay:

接受授權協議

授權檔那一步可以先按 Enter。安裝器會提示:如果沒有選擇 license 檔案,會使用內建試用授權,並提醒在有效期內及時更新授權檔案。這裡先跳過,安裝可以繼續走。安裝完成後再替換開發版授權。

安裝路徑填規劃好的目錄:

text 体验AI代码助手 代码解读复制代码/acowbo/kingbase/install

安裝器不會直接把所有檔案散在這個目錄下,而是繼續建立版本目錄。本次安裝完成後的實際路徑是:

text 体验AI代码助手 代码解读复制代码/acowbo/kingbase/install/KESRealPro/V009R001C010

選擇自訂安裝目錄

安裝元件選擇 Full

選擇安裝元件

這裡也可以選 Server,只安裝資料庫服務。但完整安裝會保留更多客戶端工具和輔助工具,適合把目錄結構先看全。尤其後面要用 ksqlsys_ctlsys_dumpsys_restore 這些工具時,完整安裝更省心。

安裝完成後,螢幕上會列出關鍵目錄:

text 体验AI代码助手 代码解读复制代码Boot: /acowbo/kingbase/install/KESRealPro/V009R001C010/install
Product Manual: /acowbo/kingbase/install/KESRealPro/V009R001C010/doc
Database Operations Tool: /acowbo/kingbase/install/KESRealPro/V009R001C010/SupTools
Server: /acowbo/kingbase/install/KESRealPro/V009R001C010/Server
High Availability: /acowbo/kingbase/install/KESRealPro/V009R001C010/KingbaseHA
Interface: /acowbo/kingbase/install/KESRealPro/V009R001C010/Interface
DeployTool: /acowbo/kingbase/install/KESRealPro/V009R001C010/ClientTools/guitools/DeployTools
KDTS: /acowbo/kingbase/install/KESRealPro/V009R001C010/ClientTools/guitools/KDts
KStudio(CS): /acowbo/kingbase/install/KESRealPro/V009R001C010/ClientTools/guitools/KStudio

這一步只是把軟體裝到磁碟上,還沒有建立資料庫執行個體。換句話說,Server/bin 裡的工具已經有了,但資料目錄還沒初始化,資料庫服務也還沒啟動。

安裝完成後的目錄資訊

不走 Kconsole

安裝結束時,程式提示可以啟動 Kconsole 初始化資料庫:

bash 体验AI代码助手 代码解读复制代码/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/kconsole.sh

實際在 SSH 裡執行會報錯:

text 体验AI代码助手 代码解读复制代码No X11 DISPLAY variable was set
java.awt.HeadlessException

Kconsole 在無圖形介面伺服器上報錯

這個報錯不是資料庫安裝失敗,而是工具需要圖形介面。伺服器沒有 X11 DISPLAY,Swing 視窗起不來。命令列伺服器上沒必要卡在這裡,直接用 initdb 初始化執行個體更直接。

先確認幾個工具確實在安裝目錄下:

bash 体验AI代码助手 代码解读复制代码find /acowbo/kingbase/install -name kconsole.sh -o -name initdb -o -name sys_ctl -o -name ksql

能看到這些路徑:

text 体验AI代码助手 代码解读复制代码/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/ksql
/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/kconsole.sh
/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/initdb
/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/sys_ctl
/acowbo/kingbase/install/KESRealPro/V009R001C010/ClientTools/bin/ksql

Server/bin 裡的這套工具就是後面主要使用的入口。

initdb 初始化執行個體

初始化命令如下:

bash 体验AI代码助手 代码解读复制代码/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/initdb \
  -D /acowbo/kingbase/data \
  -U system \
  -W \
  -E UTF8 \
  -m oracle \
  --enable-ci

幾個參數含義如下:

text 体验AI代码助手 代码解读复制代码-D /acowbo/kingbase/data   指定資料目錄
-U system                  指定超級使用者
-W                         互動輸入超級使用者密碼
-E UTF8                    指定編碼
-m oracle                  使用 oracle 相容模式
--enable-ci                開啟大小寫不敏感

密碼不要直接寫到命令裡,-W 會讓終端互動輸入兩次。初始化過程中會建立設定檔、系統資料庫、稽核相關內容,並把資料寫入磁碟。

initdb 初始化成功

初始化輸出裡有幾個資訊可以記下來:

text 体验AI代码助手 代码解读复制代码locale: en_US.UTF-8
default max_connections: 100
default shared_buffers: 128MB
default time zone: Asia/Shanghai
local authentication: trust

trust 驗證要注意。測試機上先跑通流程可以接受,但正式環境不能直接照搬。後面涉及連線驗證時,要單獨改 sys_hba.conf,不能讓本地連線長期無密碼放開。

初始化成功後,安裝器給出的啟動命令是:

bash 体验AI代码助手 代码解读复制代码/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/sys_ctl \
  -D /acowbo/kingbase/data \
  -l logfile start

這裡的 logfile 最好換成明確路徑,方便後面查啟動日誌。

固定常用命令路徑

執行個體初始化完成後,再把環境變數寫到 kingbase 使用者的 .bashrc

bash 体验AI代码助手 代码解读复制代码export KES_HOME=/acowbo/kingbase/install/KESRealPro/V009R001C010/Server
export KINGBASE_DATA=/acowbo/kingbase/data
export PATH=$KES_HOME/bin:$PATH

先初始化,再寫環境變數,順序更清楚。因為安裝路徑和資料目錄都已經確認,寫進去以後不容易改來改去。

載入設定:

bash 体验AI代码助手 代码解读复制代码source ~/.bashrc

確認工具路徑:

bash 体验AI代码助手 代码解读复制代码which ksql
which sys_ctl
which initdb

加入環境變數

這一步完成後,命令就不用再寫完整路徑了。比如啟動服務時可以直接使用 sys_ctl,連線資料庫時可以直接使用 ksql

啟動服務

先建日誌目錄:

bash 体验AI代码助手 代码解读复制代码mkdir -p /acowbo/kingbase/logs

啟動資料庫:

bash 体验AI代码助手 代码解读复制代码sys_ctl -D $KINGBASE_DATA -l /acowbo/kingbase/logs/kingbase.log start

啟動成功後會看到:

text 体验AI代码助手 代码解读复制代码waiting for server to start.... done
server started

檢查狀態:

bash 体验AI代码助手 代码解读复制代码sys_ctl -D $KINGBASE_DATA status

再看連接埠監聽:

bash 体验AI代码助手 代码解读复制代码ss -lntp | grep 54321

本次執行個體監聽在 54321,程序屬於 kingbase 使用者。

ksql 第一次連線

第一次連線直接寫:

bash 体验AI代码助手 代码解读复制代码ksql -h 127.0.0.1 -p 54321 -U system

結果報錯:

text 体验AI代码助手 代码解读复制代码FATAL: database "system" does not exist

這個錯誤很容易誤判成密碼問題,其實不是。沒有指定 -d 時,ksql 會嘗試連線和使用者同名的資料庫。這裡使用者是 system,但資料庫裡沒有叫 system 的庫。

補上資料庫名即可:

bash 体验AI代码助手 代码解读复制代码ksql -h 127.0.0.1 -p 54321 -U system -d test

服務狀態、連接埠和第一次連線驗證

進庫後查版本和目前連線:

sql 体验AI代码助手 代码解读复制代码select version();
select current_database(), current_user;

回傳版本是 KingbaseES V009R001C010,目前資料庫是 test,目前使用者是 system

連線驗證時還做了一個大小寫不敏感測試:插入 Hello,用 hello 查詢,可以查到結果。這和初始化時加的 --enable-ci 對得上。第一次 create table 少打了一個 c,修正後繼續執行即可,這種小手誤不影響結論。

查看授權

安裝時沒有指定授權檔案,所以資料庫使用內建試用授權。連上 test 庫後執行:

sql 体验AI代码助手 代码解读复制代码select get_license_validdays();

返回 90,說明目前授權剩餘 90 天。

試用授權剩餘 90 天

官網授權頁面裡有不同類型的授權。實驗環境只做功能驗證,選開發版授權即可。授權檔案內容、機器碼、授權編號這些資訊不適合放到公開內容裡,只記錄類型和驗證結果。

建議選擇開發版授權

替換授權

新授權下載到 /acowbo/kingbase/packages 後,先備份安裝目錄裡的舊授權檔案。這裡要先建立備份目錄,否則 cp 會報 No such file or directory

bash 体验AI代码助手 代码解读复制代码BACKUP_DIR=/acowbo/kingbase/backup/license-$(date +%F-%H%M%S)
mkdir -p "$BACKUP_DIR"
cp /acowbo/kingbase/install/KESRealPro/V009R001C010/license.dat \
   "$BACKUP_DIR/license.dat.bak"

再覆蓋新授權:

bash 体验AI代码助手 代码解读复制代码cp /acowbo/kingbase/packages/license_4_V009R001C-開發版-365天.dat \
   /acowbo/kingbase/install/KESRealPro/V009R001C010/license.dat

授權檔案替換後重新啟動資料庫:

bash 体验AI代码助手 代码解读复制代码sys_ctl -D $KINGBASE_DATA stop
sys_ctl -D $KINGBASE_DATA -l /acowbo/kingbase/logs/kingbase.log start

重新連線,再查一次:

sql 体验AI代码助手 代码解读复制代码select get_license_validdays();

返回 365,說明新的開發版授權已經生效。

替換授權並驗證 365 天

總結

到這裡,資料庫已經不只是「檔案裝上去了」。ISO 能正常掛載,console 安裝能走完,initdb 能把執行個體初始化出來,sys_ctl 能把服務拉起來,ksql 也能連進 test 庫。授權這塊也順手驗證了一下:預設試用授權是 90 天,換成開發版授權後,get_license_validdays() 返回 365。

目錄按自己的環境調整即可,不用照搬這裡的路徑。只要把軟體、資料、日誌、安裝包、授權檔案分開,後面刪除執行個體、查日誌、換授權、做備份都會省事很多。

這次還留下了幾個小坑:kconsole.sh 在沒有圖形介面的伺服器上起不來,直接用 initdb 更省事;ksql -U system 不指定資料庫名時會去連 system 庫,所以需要補 -d test;替換 license.dat 前要先建備份目錄,不然 cp 也會報錯。

現在這個執行個體還談不上生產配置。驗證方式、自動啟動、日誌輪替、備份策略都沒處理。用它試工具、試 SQL、試備份還原,已經夠用了。


原文出處:https://juejin.cn/post/7646618302571642926


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝10   💬4   ❤️1
369
🥈
alicec
📝1   ❤️2
89
#4
我愛JS
💬1  
3
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登