
一研发目的1.业务、运营不懂 SQL天天找开发写统计查询2.慢 SQL 逐个手动 EXPLAIN 分析、手动设计索引优化。为此我基于openEuler MySQL8.0.45 Python3.11 腾讯云 TokenHub 大模型单人 3 天开发一套轻量化智能 SQL 运维工具InnoAI SQL 助手。 无需掌握 SQL业务人员输入自然语言即可自动生成、执行只读 SQL支持上传任意 SELECT 语句自动解析执行计划输出索引优化方案同时提供命令行 Streamlit Web 双端交互适配中小企业数据查询、数据库性能调优场景。二项目整体介绍2.1核心功能功能 1自然语言转 MySQL 只读查询NL2SQL输入中文业务描述大模型自动生成合规SELECT语句强制拦截 INSERT/UPDATE/DELETE/ALTER等危险操作自动执行 SQL表格化展示查询结果调用大模型生成通俗易懂的业务数据分析总结替代人工报表解读。功能 2SQL 自动性能调优接收任意 SELECT 语句自动执行EXPLAIN获取完整执行计划AI 识别全表扫描、文件排序、无索引、临时表等性能瓶颈直接输出可落地的建索引 SQL 优化后改写 SQL。双端使用入口命令行终端openEuler 服务器交互式菜单适合运维本地快速排查Web 可视化面板Streamlit 搭建网页浏览器直接访问图形化输入、一键复制 SQL、表格展示数据非技术人员友好。2.2技术架构分层整体四层解耦架构职责清晰易于二次开发接入交互层命令行 main.py Streamlit Web 页面 web_main.pyPython 核心业务层main.py总调度封装 NL2SQL、SQL 调优核心逻辑双端共用mysql_client.pyMySQL 统一封装连接管理、SQL 安全拦截、EXPLAIN 获取prompts.py统一管理大模型提示词内置 SQL 提取清洗工具.env独立配置文件存储数据库、大模型密钥600 权限加固防泄露底层数据持久层openEuler 虚拟机 MySQL8.0.45内置电商订单测试表order_infoAI 大模型服务层腾讯云 TokenHub 聚合平台兼容 DeepSeek V4 Pro、Qwen3.5-Plus一套代码无缝切换模型。2.3软硬件环境清单分类环境版本参数硬件虚拟机 / 云 ECSCPU≥2 核内存≥4GB磁盘≥20GB系统LinuxopenEuler 2203_SP4 / RHEL9数据库MySQL8.0.45开发语言Python3.11.9源码编译安装大模型平台TokenHub兼容 OpenAI 接口标准Python 依赖pymysql、python-dotenv、langchain-openai、streamlit、tabulate数据连接、AI 调用、网页可视化2.4环境全套部署流程openEuler2.4.1 OpenEuler虚拟机的下载与安装前面作者已经发过该怎么安装OpenEuler虚拟机在这里就不演示了2.4.2 系统初始化配置# 关闭SELinux [rootserver]vi /etc/selinux/config enforcing -- disabled [rootserver]systemctl disable --now firewalld # 修改主机名 [rootserver]hostnamectl set-hostname server [rootserver]bash # 配置阿里云时间同步 [rootserver]vim /etc/chrony.conf server ntp.aliyun.com iburst #在配置文件里面找一个空白地方写下这句话 [rootserver]systemctl restart chronyd [rootserver]chronyc sources # 安装编译依赖 [rootserver]dnf install -y gcc gcc-c make cmake zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel libffi-devel tk-devel wget tar vim tree net-tools openssh-server2.4.3源码编译安装 Python3.11.91使用Xftp8上传python压缩包注意在/usr/local/scr底下上传[rootserver]cd /usr/local/src # 上传Python-3.11.9.tgz源码包 [rootserver]tar -zxvf Python-3.11.9.tgz [rootserver]cd Python-3.11.9 # 编译配置 [rootserver Python-3.11.9]./configure --prefix/usr/local/python3.11 --enable-shared [rootserver Python-3.11.9]make -j$(nproc) make install # 动态链接库配置 [rootserver Python-3.11.9]echo /usr/local/python3.11/lib /etc/ld.so.conf.d/python311.conf ldconfig # 全局软链接 [rootserver Python-3.11.9]ln -s /usr/local/python3.11/bin/python3.11 /usr/local/bin/python3 [rootserver Python-3.11.9]ln -s /usr/local/python3.11/bin/pip3.11 /usr/local/bin/pip3 [rootserver Python-3.11.9]bash # 验证 [rootserver Python-3.11.9]python3 -V [rootserver Python-3.11.9]pip3 -V [rootserver Python-3.11.9]python3 -c import ssl; print(ssl.OPENSSL_VERSION) # 配置阿里pip源 [rootserver]mkdir ~/.pip [rootserver]vim ~/.pip/pip.conf #配置文件里面应该写的东西 [global] index-url http://mirrors.aliyun.com/pypi/simple/ [install] trusted-hostmirrors.aliyun.com # 安装项目依赖 [rootserver]pip3 install --upgrade pip [rootserver]pip3 install pymysql python-dotenv tabulate langchain langchain-openai streamlit2.4.4MySQL8.0.45 部署与业务表初始化下载https://downloads.mysql.com/archives/community/使用xftp将软件包上传到根目录1解压 MySQL 二进制包创建 mysql 用户、初始化数据库2配置 systemd 开机自启3创建测试库testdb、订单业务表order_info导入 20 条测试订单数据# 解压部署MySQL [rootserver~]tar -xvf mysql-8.0.45-linux-glibc2.28-x86_64.tar.xz [rootserver~]mv mysql-8.0.45-linux-glibc2.28-x86_64 /usr/local/mysql [rootserver~]cd /usr/local/mysql [rootserver mysql]groupadd mysql #创建名为mysql的用户组 # 创建mysql的系统用户将其添加到mysql组中并设置其不可登录以限制该用户的登录权限 [rootserver mysql]useradd -r -g mysql -s /sbin/nologin mysql [rootserver mysql]mkdir data #创建用于存放MySQL数据文件目录 [rootserver mysql]chmod -R 750 data # 设置mysql目录的账户及工作组生产环境中不要使用root [rootserver mysql]chown -R mysql:mysql /usr/local/mysql # 初始化记录初始密码 [rootserver mysql]bin/mysqld --initialize --usermysql --basedir/usr/local/mysql --datadir/usr/local/mysql/data #注意需要复制最后的密码 # 后台启动 [rootserver mysql]bin/mysqld_safe --usermysql #重新开启一个终端 [rootserver ~]# ps -ef | grep mysql # 查看进程运行状态 [rootserver ~]# cd /usr/local/mysql # 返回第一个终端修改root密码 [rootserver mysql]bin/mysql -u root -p mysap alter user rootlocalhost identified with mysql_native_password by 123456; #刷新 mysapflush privileges; mysql use mysql; # 查看账户信息 mysql select user, host, plugin from mysql.user; ---------------------------------------------------- | user | host | plugin | ---------------------------------------------------- | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | mysql_native_password | ---------------------------------------------------- mysqlexit #退出数据库的程序 [rootserver mysql]# ps -ef | grep mysql [rootserver mysql]# kill -9 pid号 # 在当前终端关闭运行的mysql #设置MySQL的配置文件 [rootserver mysql]# vim /etc/my.cnf # 新建配置文件输入以下内容 [client] port 3306 socket /tmp/mysql.sock [mysqld] port 3306 basedir /usr/local/mysql datadir /usr/local/mysql/data tmpdir /tmp socket /tmp/mysql.sock character-set-server utf8mb4 collation-server utf8mb4_general_ci default-storage-engineINNODB log_error error.log # 配置启动脚本 [rootmaster mysql]# vim /usr/lib/systemd/system/mysqld.service [Unit] DescriptionMySQL Server Afternetwork.target remote-fs.target nss-lookup.target [Service] Typenotify Usermysql Groupmysql ExecStart/usr/local/mysql/bin/mysqld --defaults-file/etc/my.cnf LimitNOFILE65535 LimitNPROC65535 Restarton-failure RestartPreventExitStatus1 TimeoutSec0 [Install] WantedBymulti-user.target [rootmaster mysql]# systemctl daemon-reload [rootmaster mysql]# systemctl enable --now mysqld.service #设置MySQL的命令识别 [rootserver mysql]# vim ~/.bash_profile # 设置环境变量需添加如下语句 export PATH$PATH:/usr/local/mysql/bin [rootserver mysql]# source ~/.bash_profile1测试2创建测试库#创建测试库testdb、订单业务表order_info导入 20 条测试订单数据 mysql create database testdb; mysql use testdb; -- 创建订单业务表 mysql create table order_info( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 订单ID, user_id INT COMMENT 用户ID, order_name VARCHAR(200) COMMENT 商品名称, pay_amount DECIMAL(10,2) COMMENT 支付金额, create_time DATETIME COMMENT 下单时间 ) ENGINEInnoDB COMMENT电商订单业务表; -- 导入20条标准测试数据 mysql INSERT INTO order_info(user_id,order_name,pay_amount,create_time) VALUES (1001,智能手机,2999.00,2026-05-01 10:20:00), (1001,有线入耳耳机,199.00,2026-05-02 14:10:00), (1002,14英寸轻薄笔记本电脑,5499.00,2026-05-03 09:30:00), (1002,无线蓝牙鼠标,89.00,2026-05-03 09:35:00), (1003,平板学习机,1799.00,2026-05-04 11:05:00), (1003,平板专用保护壳,49.00,2026-05-04 11:08:00), (1004,机械游戏键盘,349.00,2026-05-05 16:42:00), (1004,电竞头戴耳机,459.00,2026-05-05 16:48:00), (1005,大屏智能电视,3299.00,2026-05-06 08:15:00), (1005,电视壁挂支架,129.00,2026-05-06 08:20:00), (1006,无线快充充电器,129.00,2026-05-03 13:22:00), (1006,降噪蓝牙耳机,399.00,2026-05-03 13:25:00), (1007,电竞显示器,1899.00,2026-05-07 10:10:00), (1007,显示器增高支架,79.00,2026-05-07 10:15:00), (1008,折叠平板支架,39.00,2026-05-04 15:30:00), (1008,便携充电宝,159.00,2026-05-04 15:33:00), (1009,台式游戏主机,6999.00,2026-05-08 09:05:00), (1009,电竞防滑鼠标垫,59.00,2026-05-08 09:08:00), (1010,手机钢化膜,29.00,2026-05-05 17:12:00), (1010,桌面收纳支架,45.00,2026-05-05 17:16:00); -- 验证数据 mysql select * from order_info; ----------------------------------------------------------------------------- | id | user_id | order_name | pay_amount | create_time | ----------------------------------------------------------------------------- | 1 | 1001 | 智能手机 | 2999.00 | 2026-05-01 10:20:00 | | 2 | 1001 | 有线入耳耳机 | 199.00 | 2026-05-02 14:10:00 | | 3 | 1002 | 14英寸轻薄笔记本电脑 | 5499.00 | 2026-05-03 09:30:00 | | 4 | 1002 | 无线蓝牙鼠标 | 89.00 | 2026-05-03 09:35:00 | | 5 | 1003 | 平板学习机 | 1799.00 | 2026-05-04 11:05:00 | | 6 | 1003 | 平板专用保护壳 | 49.00 | 2026-05-04 11:08:00 | | 7 | 1004 | 机械游戏键盘 | 349.00 | 2026-05-05 16:42:00 | | 8 | 1004 | 电竞头戴耳机 | 459.00 | 2026-05-05 16:48:00 | | 9 | 1005 | 大屏智能电视 | 3299.00 | 2026-05-06 08:15:00 | | 10 | 1005 | 电视壁挂支架 | 129.00 | 2026-05-06 08:20:00 | | 11 | 1006 | 无线快充充电器 | 129.00 | 2026-05-03 13:22:00 | | 12 | 1006 | 降噪蓝牙耳机 | 399.00 | 2026-05-03 13:25:00 | | 13 | 1007 | 电竞显示器 | 1899.00 | 2026-05-07 10:10:00 | | 14 | 1007 | 显示器增高支架 | 79.00 | 2026-05-07 10:15:00 | | 15 | 1008 | 折叠平板支架 | 39.00 | 2026-05-04 15:30:00 | | 16 | 1008 | 便携充电宝 | 159.00 |2026-05-04 15:33:00 | | 17 | 1009 | 台式游戏主机 | 6999.00 | 2026-05-08 09:05:00 | | 18 | 1009 | 电竞防滑鼠标垫 | 59.00 | 2026-05-08 09:08:00 | | 19 | 1010 | 手机钢化膜 | 29.00 | 2026-05-05 7:12:00 | | 20 | 1010 | 桌面收纳支架 | 45.00 | 2026-05-05 17:16:00 | ----------------------------------------------------------------------------- 20 rows in set (0.00 sec) mysql exit;2.3.5腾讯云 TokenHub 大模型密钥申请腾讯云官网注册、实名认证进入 TokenHub 大模型平台API Key 管理创建密钥推荐模型deepseek-v4-pro、Qwen3.5-Plus无多余思考链避免 SQL 解析报错记录API Key、统一接口地址https://tokenhub.tencentmaas.com/v1写入项目.env配置文件。2.5项目完整源码解析2.5.1 项目目录结构[rootserver mysql]# cd [rootserver ~]# mkdir -p /opt/mysql_ai_tools [rootserver ~]# cd /opt/mysql_ai_tools [rootserver mysql_ai_tools]# touch main.py mysql_client.py prompts.py web_main.py .env [rootserver mysql_ai_tools]# tree -La 1 ├── backup ├── .env #敏感配置文件数据库大模型密钥权限600 ├── main.py # 项目核心调度、命令行交互入口 ├── mysql_client.py # MySQL数据库封装、SQL安全拦截 ├── prompts.py # 大模型提示词统一管理、SQL提取工具 └── web_main.py # Streamlit Web可视化页面2.5.2 编写环境变量脚本 权限加固[rootserver ~]# vim /opt/mysql_ai_tools/.env # MySQL数据库配置 # 数据库服务IP本地运行填127.0.0.1远程服务器替换对应公网/内网地址 MYSQL_HOST127.0.0.1 # MySQL默认通信端口未手动修改固定3306 MYSQL_PORT3306 # 数据库登录用户名测试环境默认root MYSQL_USERroot # 数据库登录密码根据自己本地MySQL密码修改 MYSQL_PASSWORD123456 # 项目专用数据库名SQL查询仅操作该库下order_info表 MYSQL_DBtestdb # 腾讯云TokenHub大模型配置 # TokenHub平台分配的API密钥用于鉴权调用大模型切勿泄露 LLM_API_KEYsk-xxxx你的密钥 #这里主播没有放自己的密钥写的时候放自己的密钥 # TokenHub统一接口地址固定/v1后缀兼容OpenAI标准SDK LLM_BASE_URLhttps://tokenhub.tencentmaas.com/v1 # 当前调用模型标识切换DeepSeek v4 Pro只需改为deepseek-v4-pro LLM_MODEL_NAMEdeepseek-v4-pro # 模型温度参数0代表输出最严谨稳定适合生成标准SQL不产生随机偏差 LLM_TEMPERATURE0 #配置文件权限加固防止密钥泄露 [rootserver ~]# chmod 600 /opt/mysql_ai_tools/.env2.5.3编写数据库连接脚本[rootserver ~]# vim /opt/mysql_ai_tools/mysql_client.py2.5.4编写sql转换脚本[rootserver ~]# vim /opt/mysql_ai_tools/prompts.py2.5.5.编写程序入口脚本[rootserver ~]# vim /opt/mysql_ai_tools/main.py三项目测试3.1功能实测演示[rootserver ~]# python3 /opt/mysql_ai_tools/main.py InnoAI SQL 助手 1. 自然语言生成SQL自动查询并AI总结数据 2. 输入SQL语句AI分析执行计划并给出调优方案 0. 退出程序 请输入功能序号13.2 SQL性能调优实测待优化 SQL用户分组统计消费金额语句自动获取 EXPLAIN 执行计划识别type:ALL全表扫描、Using temporary、Using filesort性能问题AI 输出覆盖索引创建语句idx_user_id_pay_amount提供优化后改写 SQL消除临时表与文件排序大数据量下大幅提升查询速度。四.Web可视化4.1安装python依赖[rootserver ~]# /usr/local/python3.11/bin/pip3 install langchain-openai streamlit pymysql python-dotenv sqlparse tabulate # 检查 [rootserver ~]# /usr/local/python3.11/bin/python3 -c import langchain_openai;print(3.11依赖全部正常) 3.11依赖全部正4.2创建Streamlit可视化入口web_main.py[rootserver ~]# vim /opt/mysql_ai_tools/web_main.py4.3Web 后台常驻 systemd 服务配置[rootserver ~]# vim /etc/systemd/system/mysql-ai-web.service [Unit] DescriptionInnoAI SQL Streamlit Web Tool Afternetwork.target mysqld.service [Service] Typesimple Userroot WorkingDirectory/opt/mysql_ai_tools ExecStart/usr/local/python3.11/bin/python3 -m streamlit run web_main.py --server.address 0.0.0.0 --server.port 8501 --server.headless true Restartalways RestartSec3 StandardOutputjournal StandardErrorjournal [Install] WantedBymulti-user.target #启动服务 [rootserver ~]# systemctl daemon-reload [rootserver ~]# systemctl enable --now mysql-ai-web4.4Windows网页访问测试查看自己的ip [rootserver ~]# hostname -I 192.168.72.130浏览器访问IP192.168.72.1308501五总结本项目打通Linux 运维 MySQL 性能调优 Python 开发 大模型 NL2SQL四大技术栈完整实现 AI 赋能数据库运维的轻量化解决方案。全部部署脚本、源码可直接复制运行适合开发、DBA 学习 NL2SQL 落地思路也可直接改造用于企业内部自助数据查询平台。项目无复杂依赖3 个工作日即可完成全套搭建命令行 Web 双交互模式兼顾运维效率与业务易用性同时完善的 SQL 安全机制保障生产环境数据安全。