先把環境落到一台機器上
接觸一套新資料庫,不能只盯著 SQL 語法。真正開始用的時候,最先碰到的往往是另一批問題:安裝包怎麼選,目錄放哪裡,資料庫執行個體怎麼初始化,服務怎麼啟停,客戶端怎麼連,授權檔放哪,日誌出了問題去哪看。
這些問題不複雜,但必須先跑一遍。否則後面寫 SQL、備份還原、工具使用時,環境本身一直不踏實。尤其是從 MySQL 過來,很多習慣會下意識套過去,比如預設連接埠、客戶端連線方式、服務管理命令、資料目錄位置。KingbaseES 底層和 PostgreSQL 有關係,但工具名、目錄結構、相容模式、授權機制都有自己的處理方式,不能只按 PostgreSQL 或 MySQL 的經驗猜。
所以第一步先搭一個能反覆折騰的單機環境。壞了可以重來,參數改錯了可以回滾,授權換錯了也能知道該還原哪個檔案。這個環境不承擔生產職責,只負責把安裝、初始化、啟動、連線這幾件事跑順。
伺服器是一台阿里雲輕量伺服器,Alibaba Cloud Linux 3,x86_64 架構,記憶體接近 2G,根分割區 40G。

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

不過安裝這裡沒有走容器。官網的 Docker 映像頁面寫得很清楚:這個映像是 Docker 環境裡的 tar 類型精簡包,只包含資料庫主體功能,不包含介面驅動和工具等相關內容。
如果只是快速起一個庫,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.sh、initdb、sys_ctl,都圍繞這個使用者來做。
伺服器是 x86_64,下載時選 X64_Linux。下載頁上的包很多,Windows、Docker、海光、飛騰、鯤鵬、龍芯、申威都在一起,選錯了也能下載成功,但裝的時候就會浪費時間。
安裝包放到:
text 体验AI代码助手 代码解读复制代码/acowbo/kingbase/packages
下載完成後做一次 MD5 校驗。這個動作很小,但排查問題時很有用。至少能確認本地 ISO 沒有下載壞,也能把「安裝包是否和官網頁面一致」這個問題先排掉。
掛載 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.sh 和 setup 目錄,安裝入口就沒有問題。
伺服器沒有圖形桌面,SSH 裡直接用 console 模式:
bash 体验AI代码助手 代码解读复制代码cd /mnt/kingbase
sh setup.sh -i console
不帶 -i console 時,安裝器可能會嘗試圖形安裝。遠端伺服器上沒有 X11 環境,這條路通常走不通。加上 -i 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,只安裝資料庫服務。但完整安裝會保留更多客戶端工具和輔助工具,適合把目錄結構先看全。尤其後面要用 ksql、sys_ctl、sys_dump、sys_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 初始化資料庫:
bash 体验AI代码助手 代码解读复制代码/acowbo/kingbase/install/KESRealPro/V009R001C010/Server/bin/kconsole.sh
實際在 SSH 裡執行會報錯:
text 体验AI代码助手 代码解读复制代码No X11 DISPLAY variable was set
java.awt.HeadlessException
這個報錯不是資料庫安裝失敗,而是工具需要圖形介面。伺服器沒有 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 裡的這套工具就是後面主要使用的入口。
初始化命令如下:
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 會讓終端互動輸入兩次。初始化過程中會建立設定檔、系統資料庫、稽核相關內容,並把資料寫入磁碟。
初始化輸出裡有幾個資訊可以記下來:
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 使用者。
第一次連線直接寫:
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 天。
官網授權頁面裡有不同類型的授權。實驗環境只做功能驗證,選開發版授權即可。授權檔案內容、機器碼、授權編號這些資訊不適合放到公開內容裡,只記錄類型和驗證結果。
新授權下載到 /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,說明新的開發版授權已經生效。
到這裡,資料庫已經不只是「檔案裝上去了」。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、試備份還原,已經夠用了。