有意思,這個(gè)工具可以讓你像 GitLab 一樣管理數(shù)據(jù)庫
Bytebase 是一個(gè)開源數(shù)據(jù)庫 DevOps 工具,它相當(dāng)于在整個(gè)應(yīng)用程序開發(fā)生命周期中管理數(shù)據(jù)庫的 GitLab,它為 DBA 和開發(fā)人員提供了一個(gè)基于 Web 的工作空間,以安全有效地協(xié)作和管理數(shù)據(jù)庫變更。
隨著 DevOps 進(jìn)入主流,大部分團(tuán)隊(duì)采用 GitLab/GitHub 等工具來管理代碼,并開始采用 Terraform 來管理基礎(chǔ)設(shè)施,同樣的,Bytebase 就是在應(yīng)用程序開發(fā)期間管理數(shù)據(jù)庫的這樣的一個(gè)工具。Bytebase 是對現(xiàn)有云提供商的數(shù)據(jù)庫平臺(tái)或公司內(nèi)部數(shù)據(jù)庫運(yùn)維平臺(tái)的補(bǔ)充,雖然這些平臺(tái)負(fù)責(zé)數(shù)據(jù)庫實(shí)例級別的操作(例如配置數(shù)據(jù)庫實(shí)例),但 Bytebase 會(huì)幫助團(tuán)隊(duì)使用配置的數(shù)據(jù)庫來構(gòu)建他們的應(yīng)用程序。
特性
- 架構(gòu) (DDL) 和數(shù)據(jù) (DML) 變更審核工作流程:與代碼審查一樣,Bytebase 簡化了數(shù)據(jù)庫變更過程,在單個(gè)工作流中,可以從開發(fā)環(huán)境一直到生產(chǎn)環(huán)境審查和部署數(shù)據(jù)庫更改。
- SQL 質(zhì)量檢查:Bytebase 分析 SQL 變更以執(zhí)行符合您組織策略的規(guī)則。強(qiáng)制執(zhí)行包括命名約定、反 SQL 模式檢測等。生產(chǎn)環(huán)境和非生產(chǎn)環(huán)境也可以分別強(qiáng)制執(zhí)行不同的規(guī)則。
- SQL 編輯器:基于 Web 的用于查詢和導(dǎo)出數(shù)據(jù)的 SQL 編輯器,當(dāng)開發(fā)人員需要訪問數(shù)據(jù)時(shí),DBA 不再需要提供敏感的數(shù)據(jù)庫憑據(jù)。
- 與 VCS 集成的版本控制:Bytebase 可以保留完整的 Schema 變更歷史記錄,它還與 VCS 系統(tǒng)(例如 GitLab)集成。團(tuán)隊(duì)可以在 VCS 中管理 SQL 遷移腳本,并在代碼提交時(shí)觸發(fā) Schema 部署。
- 備份還原:Bytebase 支持?jǐn)?shù)據(jù)庫級別的手動(dòng)和定期備份。
- 多租戶支持:多租戶服務(wù)可以為其每個(gè)租戶創(chuàng)建單獨(dú)的數(shù)據(jù)庫,Bytebase 可以在單個(gè)工作流中為所有租戶管理特定的數(shù)據(jù)庫更改部署。
部署
Bytebase 提供了多種部署方式,最簡單就是使用 Docker 進(jìn)行一鍵啟動(dòng)。
docker run --init \
--name bytebase \
--restart always \
--add-host host.docker.internal:host-gateway \
--publish 8080:8080 \
--volume ~/.bytebase/data:/var/opt/bytebase \
bytebase/bytebase:1.2.2 \
--data /var/opt/bytebase \
--host http://localhost \
--port 8080
上面的命令啟動(dòng)后我們可以通過 http://localhost:8080 直接訪問 Bytebase,就是這么簡單。
如果你想要在生產(chǎn)環(huán)境中使用,我們建議將其部署到 Kubernetes 集群中去。
我們可以使用下面的最基礎(chǔ)的資源清單來部署 Bytebase,最好使用一個(gè) Volume 來持久化數(shù)據(jù),這里我們定義的是一個(gè) LoadBalancer 類型的 Service,當(dāng)然我們也可以創(chuàng)建一個(gè) Ingress 對象來進(jìn)行暴露,具體使用哪種方式需要結(jié)合你 Kubernetes 集群來決定,可以在下面資源清單基礎(chǔ)上進(jìn)行修改。
apiVersion: apps/v1
kind: Deployment
metadata:
name: bytebase
namespace: default
spec:
selector:
matchLabels:
app: bytebase
template:
metadata:
labels:
app: bytebase
spec:
containers:
- name: bytebase
image: bytebase/bytebase:1.2.2
args: ["--data", "/var/opt/bytebase", "--host", "http://localhost", "--port", "8080"]
ports:
- containerPort: 8080
volumeMounts:
- name: data
mountPath: /var/opt/bytebase
volumes:
- name: data
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: bytebase-entrypoint
namespace: default
spec:
type: LoadBalancer
selector:
app: bytebase
ports:
- protocol: TCP
port: 8080
targetPort: 8080
直接在 Kubernetes 集群中部署上面的對象即可。
此外我們還可以使用 Bytebase 官方提供的安裝腳本進(jìn)行安裝,腳本托管在 https://github.com/bytebase/install 倉庫。
使用
Bytebase 部署成功后,我們需要為團(tuán)隊(duì)成員注冊賬號,第一次注冊的賬號會(huì)被授予 Workspace Owner 角色。
admin 賬號創(chuàng)建后,我們可以注冊一個(gè)普通的賬號會(huì)被授予 Workspace Developer 角色。
登錄后進(jìn)入到 Bytebase 的主頁我們就可以根據(jù)需要?jiǎng)?chuàng)建項(xiàng)目、添加數(shù)據(jù)實(shí)例或者環(huán)境了,下面的一些圖展示了 Bytebase 的一些示例。
圖 1 - Dashboard
圖 2 - SQL review issue 流水線
圖 3 - 基于 GitLab 的 schema 遷移(Database as code)圖 4 - 內(nèi)置的 SQL 編輯器
此外 Bytebase 還可以了一些在線 Demo 可以體驗(yàn),地址:https://demo.bytebase.com,我們可以前往進(jìn)行體驗(yàn)。關(guān)于 Bytebase 的更多使用可以參考官方文檔 https://www.bytebase.com/docs 了解更多相關(guān)信息。
Git 倉庫:https://github.com/bytebase/bytebase。