关于数据库:如何使用-Bytebase-快速实现-SQL-自动化

本文作者乔克,原文链接。


数据库在每个企业都占据的十分重要的地位,它存储着一个公司的命根子。对于数据库的治理也十分的复杂多变,很多公司都有业余的DBA团队在治理。

然而,不管有无DBA,对数据库的操作都不会变少,而且都面临着雷同的问题:

  1. 不是在提数就是在修数的路上
  2. 不是在审核SQL就是在审核SQL的路上
  3. 不是在找历史记录就是在找历史记录的路上
  4. 不是在备份就是在备份的路上

还有十分多相似的工作,这就让DBA的工作变得枯燥乏味。

我不是DBA,仅仅是一个懂一点 SELECT * 的运维工程师,心愿能有一个工具可能帮忙开发、DBA甚至运维升高数据库的操作门槛,心愿它具备:

  1. 流程审批性能
  2. 主动纠错能力
  3. 主动备份能力
  4. 主动公布能力
  5. 历史操作记录
  6. 一键回滚能力
  7. 版本记录能力

领有这些能力,能够让日常的操作变的简略,高效。数据库管理者也有工夫去做更有意义的事件。

在过程的过程中,应用过不同的数据库管理工具,比方 Yearning、SQLE,它们实质上只是一个数据库治理平台,能够记录日常的操作记录,也能实现流程审批等能力。然而它们仍旧是一个一个的孤岛,无奈间接买通开发、DBA 之间的部门墙。

那有什么工具能够比它们更好?

也是偶尔的机会,发现 Bytebase 这个我的项目,它的有点在于能够买通 Gitlab -> 数据库,这样开发能够在 Gitlab 中治理 SQL 语句,其余的主动交给 Bytebase 去实现。

什么是Bytebase

Bytebase团队把它定位成面向开发者牢靠的数据库CICD,它不仅仅是数据库管理工具,更是连贯开发和DBA的桥梁。

它到底具备什么样的能力呢?

  1. SQL审核
  2. SQL纠错
  3. SQL编辑器
  4. GitOps
  5. 备份复原
  6. 多租户治理

装置部署

说一千,道一万,不如手中过一遍。

这里,我抉择在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。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理