1. 主要功能

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
1. SQL 查询
查询工单
导出
自动补全,智能提示
查询语句审计
查询结果脱敏

2. SQL 审核
流程化工单
SQL语句语法检测
根据规则检测SQL语句合规性
自动生成DDL/DML回滚语句
历史审核记录
3. 推送
E-mail 工单推送
钉钉 webhook 机器人工单推送
4. 用户权限及管理
角色划分
基于用户的细粒度权限
注册
5. 其他
todoList
LDAP 登录
动态审核规则配置
自定义审核层级
6. AutoTask 自动执行

2. 安装

2.1 注意事项

1
2
3
# 仅依赖 Mysql 数据库。

# mysql 版本必须为5.7及以上版本(8.0及以上请将sql_mode 设置为空)并已事先自行安装完毕且创建 Yearning 库,字符集应为 UTF8mb4 (仅 Yearning 所需 mysql 版本)

2.2 yearning 下载

1
2
3
4
5
# Yearning-go 提供二进制下载包
# 下载地址: https://github.com/cookieY/Yearning/releases

# 请选择最新版本 在 Assets 中选择 Yearning-x.x.x.linux-amd64.zip 包进行下载
# 如需进行代码修改或自己编译请移步至二次开发页面

2.3 yearning 目录结构

1

2.4 填写配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
cat conf.toml
[Mysql]
Db = "Yearning"
Host = "127.0.0.1"
Port = "3306"
Password = "xxxx"
User = "root"

[General] #数据库加解密key,只可更改一次。
SecretKey = "dbcjqheupqjsuwsm"

关于 SecretKey
SecretKey 是 token/数据库密码加密/解密的 salt。
建议所有用户在初次安装 Yearning 之前将 SecretKey 更改(不更改将存在安全风险)
格式: 大小写字母均可, 长度必须为 16 位 如长度不是16位将会导致无法新建数据源
特别注意: 此 key 仅可在初次安装时更改!之后不可再次更改!如再次更改会导致之前已存放的数据源密码无法解密,最终导致无法获取相关数据源信息

# 使用帮助:
./Yearning --help

2.5 初始化及安装

1
2
3
./Yearning install

# 如要再次安装,请先把 yearning 库下所有表删除,否则重复执行无效

2.6 启动服务

1
2
3
4
5
6
7
8
# 默认启动
./Yearning run

# 参数启动
./Yearning run --push "172.27.80.35" -port "8000"

打开浏览器 http://127.0.0.1:8000
默认账号/密码:admin/Yearning_admin

2.7 服务更新

1
2
3
4
./Yearning migrate

# Yearning采用自动表结构同步 无需手动更新表结构。只需停止原服务并替换安装包后重新启动即可
# 在一些特殊的升级情况中(破坏性变更)需要手动进行数据同步操作.如在版本更新公告中并无提示破坏性升级则无视以下命令!

2.8 容器化

1
2
3
4
5
docker run -d -it -p8000:8000 -e MYSQL_USER=root -e MYSQL_ADDR=10.0.0.3:3306 -e MYSQL_PASSWORD=123123 -e MYSQL_DB=Yearning test/yearning

# Yearning安装包内已含有Dockerfile文件,可直接进行build打包成镜像
# Yearning 从v2.0.4版本开始支持环境变量传参
# 容器启动时可通过环境变量的方式传入数据库地址。

3. K8s安装

1
https://next.yearning.io/guide/cloud.html

3.1 Secret

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
apiVersion: v1
kind: Secret
metadata:
name: db-conf
namespace: yearning
type: Opaque # 使用的是generic类型
data: # 这里配置的是数据库的相关信息,使用base64加密输入: # echo -n 'xxxx' | base64
addr: MTkyLjE2OC4xMjkuMzM6NjAwMgd==
user: eWVhcm5pbmc==
pass: WWVhcm5pbmdAdGVzdDIwMjQh=
data: eWVhcm5pbmca=
sk: WWVhcm5pbmdAdDI0MDMxOA==

# 测试环境
data: # 这里配置的是数据库的相关信息,使用base64加密输入: # echo -n 'xxxx' | base64
addr: 192.168.64.xx:6002
user: yearning
pass: Yearning@test2024!
data: yearning
sk: Yearning@t240318 # 必须是16位

3.2 Service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apiVersion: v1
kind: Service
metadata:
labels:
app: yearning
name: yearning
namespace: yearning
spec:
ports:
- port: 80 # svc内部端口,通过clusterIP访问
protocol: TCP
targetPort: 8000 # 镜像内服务的端口
nodePort: 31073
selector: # 标签选择器,与deployment中的标签保持一致
app: yearning
type: NodePort # Service类型

3.3 Ingress

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: yearning
namespace: yearning
spec:
rules:
- host: yearning.io
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: yearning
port:
number: 80

3.4 Deployment

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
apiVersion: apps/v1 # API版泵
kind: Deployment # 资源类型
metadata: # 元数据
labels: # 标签
app: yearning
name: yearning # deployment的名字
namespace: yearning # 所属命名空间
spec:
replicas: 1 # 副本数
selector: # 选择器,选择针对谁做
matchLabels:
app: yearning
template: # 镜像的模板
metadata: # 元数据
labels: # 标签
app: yearning
spec:
nodeSelector:
yearning: yearning
tolerations:
- key: "efkmonitoring"
operator: "Equal"
value: "efkmonitoring"
effect: "NoSchedule"
containers: # 容器信息
- image: yeelabs/yearning # 容器镜像
name: yearning # 容器的名字
imagePullPolicy: IfNotPresent # 镜像的下载策略
env: # 容器中的变量
- name: MYSQL_ADDR
valueFrom:
secretKeyRef: # 存储的变量信息
name: db-conf
key: addr
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: db-conf
key: user
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: db-conf
key: pass
- name: MYSQL_DB
valueFrom:
secretKeyRef:
name: db-conf
key: data
- name: SECRET_KEY
valueFrom:
secretKeyRef:
name: db-conf
key: sk
ports: # 定义容器中的端口信息
- containerPort: 8000
name: web
protocol: TCP
readinessProbe: # 就绪检查
httpGet:
path: /
port: web
scheme: HTTP
initialDelaySeconds: 25
periodSeconds: 2
livenessProbe: # 存活检查
httpGet:
path: /
port: web
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 2
resources: # 资源限制
requests:
cpu: 200m
memory: 1Gi
limits:
cpu: 250m
memory: 2Gi

3.5 账号密码

1
2
3
4
5
# 默认账号:admin,默认密码:Yearning_admin

# 登录不了
1. 删除所有表
2. 进入窗口执行./Yearning install #YES

4. 使用

4.1 添加用户

1
2
3
# 添加用户
jwgod1/Yearning_jwgod1
jwgod2/Yearning_jwgod2

4.2 添加环境

1
管理-->设置-->进阶设置-->自定义环境

4.3 审核流程

1
2
3
4
5
6
7
8
9
# Yearning着重于SQL语句审核及审批流程的实现。在一般场景中我们希望于实现以下的审批流程:
开发人员 -> DBA审核并执行

# 当业务不断扩大部门层级增多后我们希望拥有多层级的审批流程:
开发人员 -> 开发主管审批 -> 项目负责人审批-> DBA审核并执行 (多层级)

# 对于以上的需求及场景均可通过Yearning自定义流程功能实现

管理->流程 页面,点击新建流程按钮

image-20240320153400979

4.4 添加数据源

环境 db类型 名称 地址 端口 用户名 密码 流程 负责人 读写类型
test mysql8 xx系统测试环境 192.168.64.xx 3306 root xxxx@test2023! jwgod 读写

4.5 添加权限组

1
2
3
4
# 权限组内权限共分为DDL权限(表结构修改),DML权限(表数据变更),Query权限(查询)共三大类
DDL -- 表结构修改
DML -- 表数据变更
DQL -- 查询

image-20240320153309976

5 工单

5.1 查询工单

1
2
3
# 点击工单申请页面,选择Query类进行查询
1. 如未开启查询审核功能将直接进入查询界面
2. 如开启查询审核功能将进入申请界面,提交后按流程,审核人员审核后提交人员在直接查询

5.2 DML/DDL工单

1
2
1. 点击工单申请页面,根据实际提单需求选择DML/DDL中的某一类进行工单提交
2. 点击对应数据源卡片进入工单提交页面