本文作者乔克,原文链接。
数据库在每个企业都占据的十分重要的地位,它存储着一个公司的命根子。对于数据库的治理也十分的复杂多变,很多公司都有业余的 DBA 团队在治理。
然而,不管有无 DBA,对数据库的操作都不会变少,而且都面临着雷同的问题:
- 不是在提数就是在修数的路上
- 不是在审核 SQL 就是在审核 SQL 的路上
- 不是在找历史记录就是在找历史记录的路上
- 不是在备份就是在备份的路上
还有十分多相似的工作,这就让 DBA 的工作变得枯燥乏味。
我不是 DBA,仅仅是一个懂一点 SELECT *
的运维工程师,心愿能有一个工具可能帮忙开发、DBA 甚至运维升高数据库的操作门槛,心愿它具备:
- 流程审批性能
- 主动纠错能力
- 主动备份能力
- 主动公布能力
- 历史操作记录
- 一键回滚能力
- 版本记录能力
领有这些能力,能够让日常的操作变的简略,高效。数据库管理者也有工夫去做更有意义的事件。
在过程的过程中,应用过不同的数据库管理工具,比方 Yearning、SQLE,它们实质上只是一个数据库治理平台,能够记录日常的操作记录,也能实现流程审批等能力。然而它们仍旧是一个一个的孤岛,无奈间接买通开发、DBA 之间的部门墙。
那有什么工具能够比它们更好?
也是偶尔的机会,发现 Bytebase 这个我的项目,它的有点在于能够买通 Gitlab -> 数据库,这样开发能够在 Gitlab 中治理 SQL 语句,其余的主动交给 Bytebase 去实现。
什么是 Bytebase
Bytebase 团队把它定位成面向开发者牢靠的数据库 CICD,它不仅仅是数据库管理工具,更是连贯开发和 DBA 的桥梁。
它到底具备什么样的能力呢?
- SQL 审核
- SQL 纠错
- SQL 编辑器
- GitOps
- 备份复原
- 多租户治理
装置部署
说一千,道一万,不如手中过一遍。
这里,我抉择在 Kubernetes 中部署。
Step 1- 首先,部署 PG 数据库
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-pv-claim
labels:
app: postgres
spec:
storageClassName: longhorn
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
labels:
app: postgres
spec:
selector:
matchLabels:
app: postgres
replicas: 1
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:15.2
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 4
memory: 8000Mi
env:
- name: POSTGRES_PASSWORD
value: '123456'
- name: POSTGRES_USER
value: 'bytebase'
- name: POSTGRES_DB
value: 'postgres'
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
ports:
- containerPort: 5432
name: postgresport
volumeMounts:
- name: localtime
mountPath: /etc/localtime
- name: data-disk
mountPath: /var/lib/postgresql/data
volumes:
- name: localtime
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
- name: data-disk
persistentVolumeClaim:
claimName: postgres-pv-claim
---
apiVersion: v1
kind: Service
metadata:
name: postgres
spec:
selector:
app: postgres
type: NodePort
ports:
- name: postgres
port: 5432
targetPort:
protocol: TCP
须要给 PG 的数据做长久化,不然数据失落就白忙活一场。
Step 2- 部署 Bytebase
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: bytebase-pvc
labels:
app: bytebase
spec:
storageClassName: longhorn
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bytebase
spec:
selector:
matchLabels:
app: bytebase
template:
metadata:
labels:
app: bytebase
spec:
containers:
- name: bytebase
image: bytebase/bytebase:1.13.0
imagePullPolicy: IfNotPresent
env:
- name: PG_URL
value: "postgresql://bytebase:123456@postgres:5432/postgres"
args:
[
"--data",
"/var/opt/bytebase",
"--external-url",
"http://bytebase.jokerbai.com",
"--port",
"8080",
]
ports:
- containerPort: 8080
volumeMounts:
- name: data
mountPath: /var/opt/bytebase
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 300
periodSeconds: 300
timeoutSeconds: 60
volumes:
- name: data
persistentVolumeClaim:
claimName: bytebase-pvc
---
apiVersion: v1
kind: Service
metadata:
name: bytebase-entrypoint
spec:
type: ClusterIP
selector:
app: bytebase
ports:
- protocol: TCP
port: 8080
targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: bytebase
spec:
rules:
- host: bytebase.jokerbai.com
http:
paths:
- backend:
serviceName: bytebase-entrypoint
servicePort: 8080
path: /
Step 3- 待利用都失常示意部署实现
# kubectl get po -n bytebase
NAME READY STATUS RESTARTS AGE
bytebase-5559b7ff97-bmwc6 1/1 Running 0 5h18m
postgres-6989656975-5glhh 1/1 Running 0 5h20m
应用示例
第一次登录,会要求你创立管理员用户,按着步骤创立即可。
而后就能够进入如下界面。
用户治理
用户反对手动治理,也反对集成 SSO,这里带大家集成 SSO。
点击 设置
->SSO
-> 创立 SSO
,这里须要十分多的信息,
而后咱们在 Gitlab 下来创立利用,填入下面的回调地址,创立利用。
将生成的 ID 和 Secret 填入 Bytebase 中,批改对应的 Gitlab 地址即实现配置。
最初,在登录的时候抉择 Gitlab 登录即可。
实例治理
在实例中增加数据库实例即可。
这里须要填写超级管理员的用户账户,在增加实例的时候,会到该实例中创立一个 bytebase 数据库,在外面创立一个 migration_history 表用于记录所有的操作记录。
而后,会主动将指标库中的数据库同步到 bytebase 中。
数据库治理
下面曾经介绍会主动同步指标数据库中已有的库,当然,也能够本人创立数据库。
而后就会主动创立数据库,过程如下:
咱们能够对数据库中的数据进行操作。比方增加一张 user 表。
点击 数据库
-> 变更 Schema
-> 抉择方才创立的 joker-test
库。
预览工单即可进入创立页面。
点击创立,发现 SQL 审核不通过,如下:
就是说咱们不容许字段为空,然而又没有设置默认值。
批改字段如下:
当初在 SQL 审核处尽管还是正告,然而不影响创立。
当然,还能够进行 DML 操作,比方咱们向方才创立的 user 表中插入一条 name 为 jackma 的数据。
项目管理
下面的操作比拟扩散,在理论中可能会以我的项目为核心进行治理。
我这里就以环境为核心,首先创立一个 TEST 我的项目。
进入我的项目过后,把 joker-test 数据库转移过去。
除此之外,还须要把以后我的项目对应的人增加进来。抉择 设置
-> 增加成员
即可。
而后就能够进行一些变更操作了。
咱们还能够为我的项目增加一些音讯告诉,能够不便告诉到用户。
环境治理
环境示意不同实例所属的环境,比方开发环境的数据库,测试环境的数据库。
这里创立环境除了标识数据库的归属,还能够设置审批策略以及备份策略。
最初
下面仅仅是简略的部署和应用,理解根本的性能。然而目前仅仅停留在数据库治理上,如何买通 Gitlab 和 Bytebase,本篇文章还没有实际,下篇文章补上。
💡 你能够拜访官网 https://bytebase.com,收费注册云账号,立刻体验 Bytebase。