
数据库在每个企业都占据的自动非常重要的位置,它存储着一个公司的化知命脉。对于数据库的自动管理也非常的复杂多变,很多公司都有专业的化知DBA团队在管理。
但是自动,不论有无DBA,化知对数据库的自动操作都不会变少,而且都面临着相同的化知问题:
不是在提数就是在修数的路上不是在审核SQL就是在审核SQL的路上不是在找历史记录就是在找历史记录的路上不是在备份就是在备份的路上还有非常多类似的工作,这就让DBA的自动工作变得枯燥乏味。
我不是化知DBA,免费源码下载仅仅是自动一个懂一点SELECT *的运维工程师,希望能有一个工具能够帮助开发、化知DBA甚至运维降低数据库的自动操作门槛,希望它具有:
流程审批功能自动纠错能力自动备份能力自动发布能力历史操作记录一键回滚能力版本记录能力拥有这些能力,化知可以让日常的自动操作变的简单,高效。数据库管理者也有时间去做更有意义的事情。
在过程的过程中,使用过不同的数据库管理工具,比如Yearning、SQLE,它们本质上只是一个数据库管理平台,可以记录日常的操作记录,也能实现流程审批等能力。但是它们依旧是一个一个的孤岛,无法直接打通开发、DBA之间的部门墙。
那有什么工具可以比它们更好?
也是偶然的免费信息发布网机会,发现Bytebase这个项目,它的有点在于可以打通Gitlab->数据库,这样开发可以在Gitlab中管理SQL语句,其他的自动交给Bytebase去完成。

Bytebase团队把它定位成面向开发者可靠的数据库CICD,它不仅仅是数据库管理工具,更是连接开发和DBA的桥梁。
它到底具有什么样的能力呢?
SQL审核SQL纠错SQL编辑器GitOps备份恢复多租户管理说一千,道一万,不如手中过一遍。
这里,我选择在Kubernetes中部署。
(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: TCP1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.需要给PG的数据做持久化,不然数据丢失就白忙活一场。
(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: /1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86. (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 5h20m1.2.3.4.第一次登录,会要求你创建管理员用户,按着步骤创建即可。
然后就可以进入如下界面。

用户支持手动管理,也支持集成SSO,这里带大家集成SSO。
点击设置->SSO->创建SSO,云南idc服务商这里需要非常多的信息。

然后我们在Gitlab上去创建应用,填入上面的回调地址,创建应用。


将生成的ID和Secret填入Bytebase中,修改对应的Gitlab地址即完成配置。
最后,在登录的时候选择Gitlab登录即可。

在实例中添加数据库实例即可。

这里需要填写超级管理员的用户账户,在添加实例的时候,会到该实例中创建一个bytebase数据库,在里面创建一个migration_history表用于记录所有的操作记录。
然后,会自动将目标库中的数据库同步到bytebase中。

上面已经介绍会自动同步目标数据库中已有的库,当然,也可以自己创建数据库。

然后就会自动创建数据库,过程如下:

我们可以对数据库中的数据进行操作。比如添加一张user表。
点击数据库->变更Scheme->选择刚才创建的joker-test库。

预览工单即可进入创建页面。

点击创建,发现SQL审核不通过,如下:

就是说我们不允许字段为空,但是又没有设置默认值。
修改字段如下:

现在在SQL审核处虽然还是警告,但是不影响创建。
当然,还可以进行DML操作,比如我们向刚才创建的user表中插入一条name为jackma的数据。

上面的操作比较分散,在实际中可能会以项目为中心进行管理。
我这里就以环境为中心,首先创建一个TEST项目。

进入项目过后,把joker-test数据库转移过来。

除此之外,还需要把当前项目对应的人添加进来。选择设置->添加成员即可。

然后就可以进行一些变更操作了。
我们还可以为项目添加一些消息通知,可以方便通知到用户。

环境表示不同实例所属的环境,比如开发环境的数据库,测试环境的数据库。
这里创建环境除了标识数据库的归属,还可以设置审批策略以及备份策略。

上面仅仅是简单的部署和使用,了解基本的功能。但是目前仅仅停留在数据库管理上,如何打通Gitlab和Bytebase,本篇文章还没有实践,下篇文章补上。