如何使用 Bytebase 快速实现 SQL 自动化

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

c0d6788aee37838d9921d6297a8216f3.jpeg

数据库在每个企业都占据的非常重要的位置,它存储着一个公司的命脉。对于数据库的管理也非常的复杂多变,很多公司都有专业的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去完成。

77c2993e3df1b55525117727a899dcd9.png
image.png

什么是Bytebase

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

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

  1. SQL审核

  2. SQL纠错

  3. SQL编辑器

  4. GitOps

  5. 备份恢复

  6. 多租户管理

安装部署

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

这里,我选择在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: TCP

需要给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: /

(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

使用示例

第一次登录,会要求你创建管理员用户,按着步骤创建即可。

然后就可以进入如下界面。831756a6a3a9c5e8d819d7dd6e5650a2.png

用户管理

用户支持手动管理,也支持集成SSO,这里带大家集成SSO。

点击设置->SSO->创建SSO,这里需要非常多的信息,

631f15fe87e64f0471396b6b74e26ce2.png
image.png

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

将生成的ID和Secret填入Bytebase中,修改对应的Gitlab地址即完成配置。

最后,在登录的时候选择Gitlab登录即可。25500181779ac19ffeca6bd53e61fa81.png

实例管理

在实例中添加数据库实例即可。8997d1ae7a2bf1aab9c49a62485b689d.png

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

然后,会自动将目标库中的数据库同步到bytebase中。e185f8c0883d6531baa109cf11566e80.png

数据库管理

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

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

我们可以对数据库中的数据进行操作。比如添加一张user表。

点击数据库->变更Scheme->选择刚才创建的joker-test库。8202855c0540cc8c4baf1ce18055080f.png

预览工单即可进入创建页面。2fb4e229aa81ddbd9edf0b47e23686c4.png

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

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

修改字段如下:87a4d34a1e371d60d59a6b171db194c4.png

现在在SQL审核处虽然还是警告,但是不影响创建。

当然,还可以进行DML操作,比如我们向刚才创建的user表中插入一条name为jackma的数据。

a76da7fb71ef0cb4ccdce58cd86a9820.png
image.png

项目管理

上面的操作比较分散,在实际中可能会以项目为中心进行管理。

我这里就以环境为中心,首先创建一个TEST项目。6aa895b71b1209bf304a8cae2ff5bc8d.png

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

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

然后就可以进行一些变更操作了。

我们还可以为项目添加一些消息通知,可以方便通知到用户。7a2e595c1fc35d0c03cf551c1ed26722.png

环境管理

环境表示不同实例所属的环境,比如开发环境的数据库,测试环境的数据库。

这里创建环境除了标识数据库的归属,还可以设置审批策略以及备份策略。2bcbef45e8429acf1e1bcd0170f3c8a5.png

最后

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

复制 搜一搜 划线 划线并转发

本文转载自:「运维开发故事」,原文:https://tinyurl.com/yuk37brh,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

e89ded229fe839d5fd2ade55d4e0b20c.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

f89766355d4f78193afba79362c1b6a2.png

你可能还喜欢

点击下方图片即可阅读

fe29e30837daf553b6d06eb608d3c260.png

如何使用可观测性神器 Robusta 收集 Kubernetes Pod 崩溃时的 OOM 日志


91d2da7bbe2a93ed4fd19fafc232c194.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

b4e075ad4a5172dd177b50e7126fd7b9.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值