乐趣区

关于数据库:如何使用-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。

退出移动版