首页 > 数据库 >SQL自动化???

SQL自动化???

时间:2023-03-14 12:32:11浏览次数:35  
标签:name 创建 数据库 SQL bytebase 自动化 app postgres


!! 大家好,我是乔克,一个爱折腾的运维工程,一个睡觉都被自己丑醒的云原生爱好者。

作者:乔克
公众号:运维开发故事
博客:www.jokerbai.com


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

SQL自动化???_数据库管理

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

使用示例

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

然后就可以进入如下界面。

SQL自动化???_SQL_02

用户管理

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

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

SQL自动化???_数据库_03

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

SQL自动化???_SQL_04

SQL自动化???_数据库_05

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

最后,在登录的时候选择Gitlab登录即可。

SQL自动化???_数据库_06

实例管理

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

SQL自动化???_数据库_07

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

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

SQL自动化???_数据库_08

数据库管理

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

SQL自动化???_SQL_09

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

SQL自动化???_数据库_10

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

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

SQL自动化???_SQL_11

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

SQL自动化???_数据库_12

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

SQL自动化???_数据库管理_13

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

修改字段如下:

SQL自动化???_数据库管理_14

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

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

SQL自动化???_数据库_15

image.png

项目管理

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

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

SQL自动化???_数据库_16

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

SQL自动化???_数据库_17

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

SQL自动化???_SQL_18

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

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

SQL自动化???_数据库管理_19

环境管理

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

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

SQL自动化???_数据库_20

最后

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



最后,求关注。如果你还想看更多优质原创文章,欢迎关注我们的公众号「运维开发故事」。




我是 乔克,《运维开发故事》公众号团队中的一员,一线运维农民工,云原生实践者,这里不仅有硬核的技术干货,还有我们对技术的思考和感悟,欢迎关注我们的公众号,期待和你一起成长!



标签:name,创建,数据库,SQL,bytebase,自动化,app,postgres
From: https://blog.51cto.com/u_12970189/6120330

相关文章

  • 在sqli-labs靶场-页面显示输入的sql语句
    在sqli-labs靶场-页面显示输入的sql语句在自己练习的sqli-labs靶场某关卡的目录下,找到index.php文件中找到//$sql="SELECT*FROMusersWHEREid=$idLIMIT0,1";在这条代......
  • docker安装mysql8
    拉取镜像dockerpullmysql:8.0.26 创建文件夹 mkdir-p/var/mysql/{data,conf}  配置cd/var/mysql/confvimmy.cnf  输入以下内容 ......
  • ef执行原生sql语句_EF Core中执行原生SQL语句
    一、课程介绍之所以今天录制这个系列文章的主要原因是,想在快速帮助到大家上手在ASP.NETCoreWebAPI中结合EFCore来操作我们的数据库。EFCore的基础文章和基础课程实在是......
  • 一文搞定 SQL Server 执行计划
    导读数据开发过程中,开发完成的SQL发布到生产环境,经常会发生SQL执行慢甚至根本无法执行,如何避免这种情况呢?这一篇我们分析一下SQLServer的执行计划是如何生成及如何......
  • mysql 遍历字段并根据不同值归类
    使用procedure,注意报表是否支持特定关键字(积木报表不支持注入关键字)dropprocedureifexistsshow_battery_info;delimiter&&CREATEPROCEDUREshow_battery_info()......
  • 使用EF Core 6执行原始SQL查询
    目录背景现有选项ExecuteSqlRaw插入更新删除FromSqlRawFromSqlInterpolated自定义数据库上下文扩展方法ExecuteScalarExecuteNonQueryFromSqlQueryFromSqlRaw......
  • sql中varchar和nvarchar的区别,汉字前面加N
    参考:https://www.cnblogs.com/net5x/articles/9592295.htmlhttps://blog.csdn.net/qq_42692386/article/details/108148694     ......
  • mysql基础知识&&常用命令
    了解什么是数据库?什么是数据管理系统?什么是SQL,他们之间的关系又是什么?数据库英文单词DataBase,简称DB,按照一定格式存储数据的一些文件的组合。顾名思义:存储数据的仓库,实......
  • Net6 EfCore 执行原生SQL
    十年河东,十年河西,莫欺少年穷学无止境,精益求精1、适用于: --insert update delete 1.1、内插值方式:FormattableString--该方式不存在注入攻击风险,放心用  ......
  • mysql
    腾讯云备案控制台开发者社区学习实践活动专区工具TVP文章/答案/技术大牛搜索写文章提问登录/注册 专栏首页技术知识分享Linux/UNIX上yum......