背景
最近开发需要写一些复杂的Sql脚本,但是依赖Explain工具分析SQl还是有很麻烦,于是乎就找到了这个小米开源的SQL分析工具,东西挺好的,可惜的是到2019年就没有维护了。
工具分为两个组件:Soar 和 Soar-web 顾名思义,前者才是核心,后者是后来方便使用开源的一个网页操作版,就类似于 ES 和 kibana 一样,可以直接用Soar上的命令来分析语句,只是看起来没那么直观而已。
前置条件
soar-weban的安装相对比较麻烦,需要依赖一些Python3,pip。等组件。废话不多说直接上命令!
操作过程
Soar的安装
1.下载安装包
# 新建两个文件夹
mkdir -p /opt/soft/soar && mkdir -p /opt/install/soar/{log,conf}
# 下载包资源,会比较慢
wget -O /opt/soft/soar/soar -c https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.linux-amd64
2.复制和安装文件
# 修改文件地址
mv /opt/soft/soar/soar /opt/install/soar
# 目录介绍:
# 配置文件为yaml格式。一般情况下只需要配置online-dsn, test-dsn, log-output等少数几个参数。即使不创建配置文件SOAR仍然会给出基本的启发式建议。
# 默认文件会按照/etc/soar.yaml, ./etc/soar.yaml, ./soar.yaml顺序加载,
# 找到第一个后不再继续加载后面的配置文件。如需指定其他配置文件可以通过-config参数指定。
# 关于数据库权限online-dsn需要相应库表的SELECT权限,test-dsn需要root最高权限。
# 修改默认配置参数,如下
# 参考
# # 1. 修改soar.conf的基本参数
root >> cat > /opt/install/soar/conf/soar.yaml << EOF
# 线上环境配置
online-dsn:
addr: CNT7XMYSQLD01:13306
schema: sakila
user: root
password: 1t'sB1g3rt
disable: false
# 测试环境配置
test-dsn:
addr: CNT7XMYSQLD01:13307
schema: test
user: root
password: 1t'sB1g3rt
disable: false
# 是否允许测试环境与线上环境配置相同
allow-online-as-test: true
# 是否清理测试时产生的临时文件
drop-test-temporary: true
# 语法检查小工具
only-syntax-check: false
sampling-statistic-target: 100
sampling: false
# 日志级别,[0:Emergency, 1:Alert, 2:Critical, 3:Error, 4:Warning, 5:Notice, 6:Informational, 7:Debug]
log-level: 7
log-output: ${SOAR_LOG_DIR}/soar.log
# 优化建议输出格式
report-type: markdown
ignore-rules:
- ""
# 黑名单中的 SQL 将不会给评审意见。一行一条 SQL,可以是正则也可以是指纹,填写指纹时注意问号需要加反斜线转义。
blacklist: ${SOAR_CONF_DIR}/soar.blacklist
# 启发式算法相关配置
max-join-table-count: 5
max-group-by-cols-count: 5
max-distinct-count: 5
max-index-cols-count: 5
max-total-rows: 9999999
spaghetti-query-length: 2048
allow-drop-index: false
# EXPLAIN相关配置
explain-sql-report-type: pretty
explain-type: extended
explain-format: traditional
explain-warn-select-type:
- ""
explain-warn-access-type:
- ALL
explain-max-keys: 3
explain-min-keys: 0
explain-max-rows: 10000
explain-warn-extra:
- ""
explain-max-filtered: 100
explain-warn-scalability:
- O(n)
query: ""
list-heuristic-rules: false
list-test-sqls: false
verbose: true
root >> EOF
3.准备环境变量
# env parameter and path
echo '' >> /etc/profile && \
echo 'SOAR_HOME=/opt/install/soar' >> /etc/profile && \
echo 'SOAR_CONF_DIR=$SOAR_HOME/conf' >> /etc/profile && \
echo 'SOAR_LOG_DIR=$SOAR_HOME/log' >> /etc/profile && \
echo 'PATH=$PATH:$SOAR_HOME' >> /etc/profile && \
source /etc/profile
4.文件赋予权限
chmod -R 777 $SOAR_HOME/soar
5.检查soar全局配置是否生效
# 查看版本
soar -version
# 打印所有的启发式规则
soar -list-heuristic-rules
# 打印支持的报告格式
soar -list-report-types
此时 : Soar 已经安装好,在命令里使用 query "select * from tb where 1=1;" 就可以分析SQL了
soar-web的安装
1.安装soar-web的依赖包,请一定要保证环境在Python3上,如果是Python2.7,请卸载重新安装
step 1: 安装soar-web的依赖包
# 1.1 安装python3 和 python3-pip 和 gcc (gcc在源代码安装pycryptodome等python组件时候需要)
yum install -y python36 python36-pip gcc
# 检查python3安装结果
python -V
# 检查pip已经安装的python组件
python3 -m pip list
# 卸载pip组件
# python3 -m pip uninstall "packagename"
# 1.2 flask (必须先安装python3)
# 安装教程:https://www.cnblogs.com/wobeinianqing/p/7650498.html
# yum install -y flask
python3 -m pip install flask
# 1.3 安装 pymysql (必须先安装python3)
# 安装教程:https://blog.csdn.net/qq_37788558/article/details/73716002
# 安装教程:https://github.com/PyMySQL/PyMySQL
python3 -m pip install PyMySQL
# 1.4 安装 pycryptodome (必须先安装python3)
python3 -m pip install pycryptodome
# 如果pip下载速度慢,可以用如下命令
#### 或 安装方式2,如下
python3 -m pip install /opt/soft/soar/pycryptodome-3.9.6.tar.gz
#### 或 安装方式3,如下
# 格式 = python3 -m pip install https://pypi.tuna.tsinghua.edu.cn/simple/simple/{包名}
# 格式 = python3 -m pip install https://pypi.doubanio.com/simple/{包名}
python3 -m pip install https://pypi.tuna.tsinghua.edu.cn/simple/pycryptodome-3.9.6.tar.gz
2.安装soar-web,注意请一定要保证文件下载完整,如果不完整可以直接去git上下载文件解压在往服务器上丢,我在解压的时候就把data/static下的文件丢失了,导致后面使用的时候404报错
# 2.1 下载soar-web的源代码
wget -O /opt/soft/soar/soar-web-master.zip -c https://codeload.github.com/xiyangxixian/soar-web/zip/master
yum install -y unzip
unzip /opt/soft/soar/soar-web-master.zip -d /opt/soft/soar/
# 2.2 安装soar-web
mkdir -p /opt/install/soar-web && \
mv /opt/soft/soar/soar-web-master/* /opt/install/soar-web
# 运行soar-web
chmod -R 777 /opt/install/soar-web/run.sh
bash /opt/install/soar-web/run.sh
# 2.3 或者如下方法启动soar-web
cd /opt/install/soar-web/
python3 ./soar-web.py install
3.检查端口,如下,发现进程正常启动,则万事大吉
netstat -nltp | grep 5077
4.客户端访问:如下
地址 = http://{server-ip}:5077
此时已经大公告成,如果需要你的服务人家可以在外网上访问,可以把你的ip+端口用内网穿透工具(pierced)暴露到公网上。
内网穿透的安装: 请看 https://blog.csdn.net/qq_35152037/article/details/113099236
Soar的简单使用请看: https://blog.csdn.net/qq_35152037/article/details/113100019