程序员真是惹不起啊!看不下去就动手!没有道理可讲。
为什么会有这样的感慨呢,让小编复述一下事情的原委。
小编的公司在2023年1月份发布了一款面向个人免费的SQL开发工具,可以面向多数据库管理的一款纯Web版工具SQL Studio,跨平台支持Windows、MacOS和Linux三种平台。
一位热心网友私信问小编:能不能支持容器部署?因为这款产品的研发正忙于解决大家反馈的各种问题,公司暂时并没有提供容器部署,需要再等等。
等待,可能是一位程序员最不能容忍的事情。 于是,我们这位可爱的网友,自发动手把我司这款SQL工具制作成了容器,并总结了一段图文。
在此,小编非常感谢这位热心网友,同时也分享给各位程序员同行参考。特别申明,这篇文章的代码并未麦聪软件官方确认,仅供大家参考学习!
以下内容转自B站up主“嘿嘿嘿?!!”,转载正文如下:
摘要
SQL Studio 是由 麦聪软件 开发的一款全 web 的数据库管理和开发工具。可以便捷、高效、简单的管理多种数据库如: Oracle 、 PostgreSQL 、 MySQL 、 SQLite 、 SQL Server 、 DM(武汉达梦) 、 KingBase(人大金仓) 等。
目前 SQL Studio 官方并没有提供容器化的部署方案,本文尝试性的将 SQL Studio 制作成容器并通过 docker 和 kubernetes 将其部署。
环境信息
软件版本信息
制作镜像
访问麦聪软件 SQL Studio 下载页,注册账号,下载 SQL Studio Linux 版
准备 SQL Studio 资源
[root@vlnx207 sqlstudio]# ls
dockerfile sqlstudio_linux_1.0.2.zip
准备简化启动脚本
vim sqlstudio-start.sh
文件内如如下
#!/bin/bash
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
APP_JAR=$(cd $SHELL_FOLDER;ls Maicong-SQLStudio-*.jar)
LOG_PATH=$SHELL_FOLDER/log
JAVA_OPTS="
-server
-Xms2g
-Xmx4g
-XX:+UseG1GC
-XX:+UseStringDeduplication
-XX:+AlwaysPreTouch
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCCause
-Xloggc:$LOG_PATH/maicong-sqlstudio-gc.log
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=$LOG_PATH/maicong-sqlstudio-heapdump
-Dfile.encoding=utf-8"
java $JAVA_OPTS -jar $SHELL_FOLDER/$APP_JAR --spring.config.location=config/maicong.yaml
为简化启动脚本添加执行权限
chmod a+x sqlstudio-start.sh
创建 dockerfile 文件
vim dockerfile
文件内如如下
FROM centos:centos7.9.2009
#容器内用户
USER root
#暴露端口
EXPOSE 18888
#修改系统时区
ENV TZ Asia/Shanghai
#加中文支持
RUN set -x \
&& yum -y install kde-l10n-Chinese telnet \
&& yum -y reinstall glibc-common \
&& yum clean all \
&& localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ENV.UTF-8
ENV LANGUAGE=zh_CN:zh
ENV LC_ALL=zh_CN.UTF-8
#常用软件安装
RUN set -x \
&& yum update -y \
&& yum install -y telnet net-tools wget curl unzip \
&& yum clean all \
&& rm -rf /tmp/* \
&& rm -rf /var/cache/yum/*
#注入sqlstudio程序
WORKDIR /apps/usr/sqlstudio/
COPY ./sqlstudio_linux_1.0.2.zip /apps/usr/sqlstudio
RUN set -x \
&& unzip -q sqlstudio_linux_1.0.2.zip -d /apps/usr/sqlstudio \
&& rm -rf sqlstudio_linux_1.0.2.zip
#注入简化启动脚本
WORKDIR /apps/usr/sqlstudio/linux
COPY ./sqlstudio-start.sh /apps/usr/sqlstudio/linux/
#将sqlstudio自带的jdk变更为全局变量
ENV JAVA_HOME /apps/usr/sqlstudio/linux/jdk1.8.0_351
ENV JRE_HOME ${JAVA_HOME}/
ENV PATH {PATH}
ENV CLASSPATH .:{JAVA_HOME}/lib/tools.jar
#指定启动命令
CMD ["/bin/bash","sqlstudio-start.sh"]
注: 使用该 dockerfile 文件,构建出的镜像较大,该 dockerfile 文件是一个针对 SQL Studio 镜像制作的思路的体现。
优化 dockerfile 文件
使用多阶段构建方式,将构建镜像的过程拆分为两个阶段:build 阶段、 environment 阶段,在 build 阶段中将 SQL Studio 官方提供的的程序包 COPY 到构建容器中并安装 unzip 程序将其解压,在 environment 阶段将 build 阶段解压的程序包文件拷入并运行,通过这样的方式将镜像使用的空间减小,因本人习惯于使用 CentOS 作为基础镜像,也可以在构建中使用其他更小的基础镜像来完成 SQL Studio 的镜像制作。
FROM centos:centos7.9.2009 as build
USER root
EXPOSE 18888
WORKDIR /apps/usr/sqlstudio/
COPY ./sqlstudio_linux_1.0.2.zip /apps/usr/sqlstudio/
COPY ./sqlstudio-start.sh /apps/usr/sqlstudio/
RUN set -x \
&& yum -y install unzip \
&& yum clean all \
&& unzip -q sqlstudio_linux_1.0.2.zip -d /apps/usr/sqlstudio/ \
&& cp /apps/usr/sqlstudio/sqlstudio-start.sh /apps/usr/sqlstudio/linux/ \
&& rm -rf sqlstudio_linux_1.0.2.zip \
&& rm -rf /tmp/* \
&& rm -rf /var/cache/yum/*
FROM centos:centos7.9.2009 as environment
USER root
EXPOSE 18888
ENV TZ Asia/Shanghai
WORKDIR /apps/usr/sqlstudio/
COPY --from=build /apps/usr/sqlstudio/linux /apps/usr/sqlstudio/
RUN set -x \
&& yum update -y \
&& yum -y install kde-l10n-Chinese telnet net-tools wget curl \
&& yum -y reinstall glibc-common \
&& yum clean all \
&& localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 \
&& rm -rf /tmp/* \
&& rm -rf /var/cache/yum/*
ENV JAVA_HOME /apps/usr/sqlstudio/jdk1.8.0_351
ENV JRE_HOME ${JAVA_HOME}/
ENV PATH {PATH}
ENV CLASSPATH .:{JAVA_HOME}/lib/tools.jar
ENV.UTF-8
ENV LANGUAGE=zh_CN:zh
ENV LC_ALL=zh_CN.UTF-8
CMD ["/bin/bash","sqlstudio-start.sh"]
分别使用优化前后的 dockerfile 文件构建镜像
dockerfile.old 文件对应优化前的 dockerfile 文件
dockerfile.new 文件对应优化后的 dockerfile 文件
docker build -f dockerfile.old -t sqlstudioold:1.0.2 .
docker build -f dockerfile.new -t sqlstudionew:1.0.2 .
dockerfile 文件优化前后对比
使用如下命令分别打印优化前后镜像的编译信息,查看镜像的占用空间
docker history <镜像ID或镜像名>
优化前
图2-1 优化前容器分层大小
注:图片中的优化前的镜像名和文档中镜像名存在不对应的问题,但是都是使用优化前的 dockerfile 文件构建的镜像不影响实际结果。
优化后
图2-2 优化前容器分层大小
对比前后的镜像变化,减少了两个 COPY 层,分别是拷入的 SQL Studio 官方提供的的程序包 275MB 和我们自行编写的快速启动脚本 535B ,通过分阶段构建的方式我们将镜像的大小从 1.2GB 缩小到了 923MB ,如果使用更小的基础镜像和其他的优化方式可以将镜像进一步压缩。
删除进行优化测试的俩个镜像
docker rmi sqlstudioold:1.0.2
docker rmi sqlstudionew:1.0.2
使用优化的后 dockerfile 文件制作镜像
docker build -f dockerfile -t sqlstudio:1.0.2 .
上传公共云镜像仓库
修改镜像 Tag 标签
docker tag sqlstudio:1.0.2 registry.cn-hangzhou.aliyuncs.com/sql_studio/sql-studio:1.0.2
上传 阿里云 镜像仓库
[root@vlnx211 ~]# docker push registry.cn-hangzhou.aliyuncs.com/sql_studio/sql-studio:1.0.2
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/sql_studio/sql-studio]
4d13d7c57496: Pushed
6331bccae14c: Pushed
658f617325b7: Pushed
174f56854903: Pushed
1.0.2: digest: sha256:2095dff6a460ebb06b9e91e1deacbc06b5e9c8d8479c7dd7f71dae19034d3718 size: 1161
**部署镜像** docker环境下部署 docker 部署命令docker run -d --name=sqlstudio -p 18888:18888/tcp -v /apps/usr/sqlstudio/log/:/apps/usr/sqlstudio/linux/log/ -v /apps/usr/sqlstudio/data/:/apps/usr/sqlstudio/linux/data/ sqlstudio:1.0.2
命令解析
docker run
-d
#后台运行
--name=sqlstudio
#定义容器名称
-p 18888:18888/tcp
#定义容器端口
-v /apps/usr/sqlstudio/log/:/apps/usr/sqlstudio/linux/log/
#配置挂载卷,将sqlstudio产生的日志输出到本地磁盘
-v /apps/usr/sqlstudio/data/:/apps/usr/sqlstudio/linux/data/
#配置挂载卷,将sqlstudio产生的数据输出到本地磁盘
sqlstudio:1.0.2
#指定镜像
验证部署是否正常
查看 SQL Studio 的控制台日志是否启动成功
[root@vlnx207 linux]# docker logs sqlstudio
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)
14:06:09.164 [main] INFO com.mc.MainApplication - Maicong SQLStudio Start...
. ____ _ __ _ _
/\ / _' __ _ () __ __ _ \ \ \ \
( ( )___ | '_ | '| | ' / _` | \ \ \ \
\/ __)| |)| | | | | || (_| | ) ) ) )
' |__| .__|| ||| |__, | / / / /
=========||==============|__/=///_/
:: Spring Boot :: (v2.6.7)
2023-01-18 14:06:09.614 [main] INFO com.mc.MainApplication - Starting MainApplication v1.0.0-release using Java 1.8.0_351 on d440cb2cad54 with PID 12 (/apps/usr/sqlstudio/linux/Maicong-SQLStudio-1.0.0-release.jar started by root in /apps/usr/sqlstudio/linux)
2023-01-18 14:06:09.616 [main] INFO com.mc.MainApplication - No active profile set, falling back to 1 default profile: "default"
2023-01-18 14:06:10.268 [main] WARN org.mybatis.spring.mapper.ClassPathMapperScanner - No MyBatis mapper was found in '[org.spring.mc.dao.master]' package. Please check your configuration.
2023-01-18 14:06:10.633 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 18888 (http)
2023-01-18 14:06:10.645 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-18888"]
2023-01-18 14:06:10.645 [main] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat]
2023-01-18 14:06:10.646 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.62]
2023-01-18 14:06:10.737 [main] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
2023-01-18 14:06:10.737 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1086 ms
2023-01-18 14:06:11.424 [main] INFO s.d.s.w.PropertySourcedRequestMappingHandlerMapping - Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
2023-01-18 14:06:11.529 [main] INFO o.s.b.a.web.servlet.WelcomePageHandlerMapping - Adding welcome page: ServletContext resource [/index.html]
2023-01-18 14:06:11.670 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-18888"]
2023-01-18 14:06:11.726 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 18888 (http) with context path ''
2023-01-18 14:06:11.727 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Context refreshed
2023-01-18 14:06:11.738 [main] INFO s.d.s.web.plugins.DocumentationPluginsBootstrapper - Found 1 custom documentation plugin(s)
2023-01-18 14:06:11.760 [main] INFO s.d.spring.web.scanners.ApiListingReferenceScanner - Scanning for api listing references
2023-01-18 14:06:11.980 [main] INFO com.mc.MainApplication - Started MainApplication in 2.695 seconds (JVM running for 3.299)
2023-01-18 14:06:11.982 [main] INFO com.mc.spring.lifecycle.AppLifecycleListener - App Lifecycle -> start
2023-01-18 14:06:11.983 [main] INFO com.mc.MainApplication - Maicong SQLStudio started successfully.
2023-01-18 15:16:02.870 [http-nio-18888-exec-2] INFO o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-01-18 15:16:02.872 [http-nio-18888-exec-2] INFO org.springframework.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
2023-01-18 15:16:02.886 [http-nio-18888-exec-2] INFO org.springframework.web.servlet.DispatcherServlet - Completed initialization in 14 ms
2023-01-18 15:16:03.233 [http-nio-18888-exec-2] INFO com.alibaba.druid.pool.DruidDataSource - {dataSource-1} inited
2023-01-18 15:16:06.241 [http-nio-18888-exec-8] INFO com.mc.controller.PublicUserController - User IP address is:11.0.1.1
访问 SQL Studio 的 WEB 界面,查看是否可以正常访问
SQL Studio 的 WEB 界面如下图
图2-3 SQL Studio 的 WEB 界面
kubernetes环境下部署
前期准备
在镜像制作服务器上修改镜像 Tag 标签
docker tag sqlstudio:1.0.2 harbor.sharks.top/sqlstudio/sqlstudio:1.0.2
将镜像上传 harbor 镜像存储
docker push harbor.sharks.top/sqlstudio/sqlstudio:1.0.2
在 NFS 持久化存储服务器创建 SQL Studio 持久化文件目录
mkdir -m 755 -p /apps/usr/nfs_data/ruoyi-cloud-sql-studio/{data,logs}
在 kubernetes master 节点创建 SQL Studio 的 YAML 资源文件存储目录
mkdir -m 755 -p /root/RuoYi-Cloud/sql-studio/
进入目录
cd /root/RuoYi-Cloud/sql-studio/
创建资源定义文件
创建 SQL Studio 的存储资源定义 YAML 文件,该章节采用 NFS 存储挂载到 PV , PVC 挂载到容器的方式进行,也可以采用其他的存储资源。
vim ruoyi-cloud-sql-studio-storage.yaml
文件内如如下
#SQL Studio 的日志存储 PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: ruoyi-cloud-sql-studio-logs-pv
labels:
app: sql-studio
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
mountOptions:
hard
nfsvers=4.1
nfs:
server: 11.0.1.207
path: /apps/usr/nfs_data/ruoyi-cloud-sql-studio/logs/
persistentVolumeReclaimPolicy: Retain
#SQL Studio 的数据存储 PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: ruoyi-cloud-sql-studio-data-pv
labels:
app: sql-studio
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
mountOptions:
hard
nfsvers=4.1
nfs:
server: 11.0.1.207
path: /apps/usr/nfs_data/ruoyi-cloud-sql-studio/data/
persistentVolumeReclaimPolicy: Retain
#SQL Studio 的日志存储 PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: ruoyi-cloud-sql-studio-logs-pvc
namespace: ruoyi-cloud
spec:
resources:
requests:
storage: 5Gi
accessModes:
- ReadWriteOnce
selector:
matchLabels:
app: sql-studio
#SQL Studio 的数据存储 PVC
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: ruoyi-cloud-sql-studio-data-pvc
namespace: ruoyi-cloud
spec:
resources:
requests:
storage: 5Gi
accessModes:
- ReadWriteOnce
selector:
matchLabels:
app: sql-studio
创建 SQL Studio 的 ConfigMap (配置字典)资源定义 YAML 文件
vim ruoyi-cloud-sql-studio-ConfigMap.yaml
文件内容如下
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: sql-studio
namespace: ruoyi-cloud
name: sql-studio-maicong.yaml
namespace: ruoyi-cloud
data:
maicong.yaml: >
======================== MaiCongSoftWare Configuration =========================
NOTE: MAICONGSOFTWARE comes with reasonable defaults for most settings.
Before you set out to tweak and tune the configuration, make sure you
understand what are you trying to accomplish and the consequences.
The primary way of configuring a node is via this file. This template lists
the most important settings you may want to configure for a production cluster.
Please consult the documentation for further information on configuration options:
www.maicongs.com/#/listdocu
-------------------------------------- Network --------------------------------------
set the server run port for backend and frontend, this is backend port
must
server.port: 18888
----------------------------------------- DB configuration ----------------------------------------
master.datasource.initial-size: 10
master.datasource.max-active: 100
master.datasource.min-idle: 10
set the sqlite local path (have default if not set)
#master.datasource.url: jdbc:sqlite:xxx/sqlite.db
master.datasource.url:
---------------------------------------- LOG ----------------------------------------
log level, you can set info, error, warn, debug
logging.level.com.mc.dao: info
--------------------------------------- MYBATIS ------------------------------------
mybatis.check-config-location: true
mybatis.config-location: classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations: classpath:mybatis/mapper/*.xml
mybatis.type-aliases-package: com.mc.entity
-------------------------------------- Network --------------------------------------
server.tomcat.accept-count: 800
server.tomcat.max-connections: 20000
server.tomcat.max-max-threads: 1000
server.tomcat.uri-encoding: UTF-8
-------------------------------------- SPRING ---------------------------------------
spring.http.enncoding.charset: UTF-8
spring.http.enncoding.enabled: true
spring.http.enncoding.force: true
spring.messages.encoding: UTF-8
spring.mvc.async.request-timeout: 180000
spring.mvc.pathmatch.matching-strategy: ant_path_matcher
spring.messages.basename: i18n/messages
创建 SQL Studio 的部署资源定义 YAML 文件
vim ruoyi-cloud-sql-studio-Deployment-Service.yaml
文件内容如下
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
k8s.kuboard.cn/displayName: SQL Studio
labels:
k8s.kuboard.cn/layer: monitor
k8s.kuboard.cn/name: sql-studio
name: sql-studio
namespace: ruoyi-cloud
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s.kuboard.cn/layer: monitor
k8s.kuboard.cn/name: sql-studio
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
annotations:
kubectl.kubernetes.io/restartedAt: '2023-01-18T22:44:29+08:00'
creationTimestamp: null
labels:
k8s.kuboard.cn/layer: monitor
k8s.kuboard.cn/name: sql-studio
spec:
containers:
- image: 'harbor.sharks.top/sqlstudio/sqlstudio:1.0.2'
imagePullPolicy: Always
lifecycle:
preStop:
exec:
command:
/bin/bash
/apps/usr/sqlstudio/linux/
stop
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 18888
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
name: sql-studio
ports:
- containerPort: 18888
name: server
protocol: TCP
readinessProbe:
failureThreshold: 3
httpGet:
path: /
port: 18888
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources:
limits:
memory: 4000Mi
requests:
memory: 2000Mi
startupProbe:
failureThreshold: 3
httpGet:
path: /
port: 18888
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /apps/usr/sqlstudio/linux/data/
name: data
- mountPath: /apps/usr/sqlstudio/linux/log/
name: logs
- mountPath: /etc/localtime
name: timezone
readOnly: true
- mountPath: /apps/usr/sqlstudio/linux/config/maicong.yaml
name: maicong-yaml
readOnly: true
subPath: maicong.yaml
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: sharks-harbor
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: logs
persistentVolumeClaim:
claimName: ruoyi-cloud-sql-studio-logs-pvc
- name: data
persistentVolumeClaim:
claimName: ruoyi-cloud-sql-studio-data-pvc
- hostPath:
path: /etc/localtime
type: File
name: timezone
- configMap:
defaultMode: 420
items:
- key: maicong.yaml
path: maicong.yaml
name: sql-studio-maicong.yaml
name: maicong-yaml
apiVersion: v1
kind: Service
metadata:
annotations: {}
labels:
k8s.kuboard.cn/layer: monitor
k8s.kuboard.cn/name: sql-studio
name: sql-studio
namespace: ruoyi-cloud
spec:
clusterIP:
externalTrafficPolicy: Cluster
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: server
nodePort: 32888
port: 18888
protocol: TCP
targetPort: 18888
selector:
k8s.kuboard.cn/layer: monitor
k8s.kuboard.cn/name: sql-studio
sessionAffinity: None
type: NodePort
导入资源定义文件
导入存储资源定义 YAML 文件
kubectl apply -f ruoyi-cloud-sql-studio-storage.yaml
输出如下
[root@vlnx201 sql-studio]# kubectl create -f ruoyi-cloud-sql-studio-storage.yaml
persistentvolume/ruoyi-cloud-sql-studio-logs-pv created
persistentvolume/ruoyi-cloud-sql-studio-data-pv created
persistentvolumeclaim/ruoyi-cloud-sql-studio-logs-pvc created
persistentvolumeclaim/ruoyi-cloud-sql-studio-data-pvc created
导入配置字典资源定义 YAML 文件
kubectl apply -f ruoyi-cloud-sql-studio-ConfigMap.yaml
输出如下
[root@vlnx201 sql-studio]# kubectl apply -f ruoyi-cloud-sql-studio-ConfigMap.yaml
configmap/sql-studio-maicong.yaml created
导入部署资源定义 YAML 文件
kubectl apply -f ruoyi-cloud-sql-studio-Deployment-Service.yaml
输出如下
[root@vlnx201 sql-studio]# kubectl apply -f ruoyi-cloud-sql-studio-Deployment-Service.yaml
deployment.apps/sql-studio created
service/sql-studio created
功能验证
请参考通过 docker 部署 SQL Studio 章节,该部分不在赘述
SQL Studio平台的使用
使用如下地址访问 SQL Studio:http://11.0.1.207:18888/#/login
SQL Studio 的 WEB 登录界面如下图
图3-1 SQL Studio 的 WEB 登录界面
本次 SQL Studio 设置的账号密码如下
注:首次登陆时,填写的账号密码即为之后使用中的账号密码
SQL Studio 的 WEB 工作界面如下图
图3-3 SQL Studio 的 WEB 工作界面
SQL Studio 用户管理
图3-4 SQL Studio 用户管理
测试用户信息如下,请根据实际情况进行配置
图3-5 测试用户信息
SQL Studio 添加数据源
图3-6 SQL Studio 添加数据源
SQL Studio 配置数据源
图3-7 SQL Studio 配置数据源
测试数据源信息如下,请根据实际情况进行配置
图3-8 测试数据源信息
SQL Studio 简单操作
新建查询
图3-9 新建查询
导出数据
图3-10 导出数据
举报/反馈