效率篇-SQL自助查询平台
admin
2023-05-27 09:41:38
0

使用时间:2014-05 - 至今。


升级&变动:投入运作后没做任何修改变动,放养状态。


运行情况:内部环境下使用,日均分担DBA工作量500次+查询。


诞生背景:DBA人数-3,DBA除了做常规维护和数据库优化外,还需要花大量时间帮开发查询非敏感数据。


需求:1.查询不能影响线上数据库服务;2.与现有运维系统做Restful API对接;

3.不能接收数据超1000+查询,以防很容易恶意导数据;4.预防恶意操作(delete、update、create table等ddl)。

对比对象:PhpMyAdmin(1.发现功能太多安全不受限制;2.需要安装web和对应php服务和代码,维护工作量多(例如:java web容器系,每加个数据源重启一次服务);

3.不能满足所有需要立刻使用)

因为前端存在运维平台,数据库查询功能可以有两个途径实现:

1.在原有运维平台开发多个功能模块;但会引起运维平台臃肿;如果量大需要增加资源的时候,扩展很麻烦。

2.使用nginx查询数据库的第三方工具担当起sql操作结果返回,同时,可以达到类热部署模式效果,只是在发现新的配置,需动态添加nginx中,重配置nginx就能正式服务。

基于上述原因:使用的大概东西决定了。nginx、lua(做非法字符检查+权限认证)、nginx模块ngx_postgres(用于查询pgsql)、nginx模块drizzle-nginx(用于查询mysql)、form-input-nginx-module(直接获取post的内容,偷懒,其实可以lua代码中获取)。


现在的使用图

1.工作区

效率篇-SQL自助查询平台

2.历史记录区

效率篇-SQL自助查询平台


实现架构

运维平台Web界面 - > nginx+lua(数据库路由功能) -> nginx + lua + drizzle-nginx + ngx_postgres + form-input-nginx-module (如果性能不足能,需要复制、克隆加资源,只要在数据库路由端注册就行了)公共组成的API查询接口

实现:

1.编译。

nginx中加入 --add-module=PATH/ngx_devel_kit-0.2.19 --add-module=PATH/lua-nginx-module-0.9.7 --add-module=PATH/rds-json-nginx-module-master(主要让输出结果自动json化) --add-module=PATH/form-input-nginx-module --add-module=PATH/ngx_postgres-master --add-module=PATH/drizzle-nginx-module-0.1.7

drizzle-nginx-modul = https://github.com/calio/form-input-nginx-module

ngx_postgres = https://github.com/FRiCKLE/ngx_postgres

form-input-nginx-module = https://github.com/calio/form-input-nginx-module

2.nginx查找数据库的中配置:

MySQL

upstream name {

            drizzle_server db ip:db port dbname=xx

                           password=xx user=xx protocol=mysql charset=utf8;

    }

show table功能

            location ~ (数据库路由标识) {

                set $upname $1;

                set $my_sql 'show tables';

                drizzle_query $my_sql;

                drizzle_pass $upname;

                drizzle_connect_timeout    10s; # default 60s

                drizzle_send_query_timeout 60s;    # default 60s

                drizzle_recv_cols_timeout  30s;    # default 60s

                drizzle_recv_rows_timeout  30s;    # default 60s

                rds_json on;

            }

查表操作

   location ~ (数据库路由信息) {

                default_type 'text/plain';

                set_form_input $qsql;

               access_by_lua $sql '

                     权限和非法字符验证功能模块,验证qsql

                ';

                set $upname $1;

                lua_need_request_body on;

                client_max_body_size 50k;

                client_body_buffer_size 50k;

                drizzle_query $sql;

                drizzle_pass $upname;

                drizzle_connect_timeout    10s; # default 60s

                drizzle_send_query_timeout 30s;    # default 60s

                drizzle_recv_cols_timeout  30s;    # default 60s

                drizzle_recv_rows_timeout  30s;    # default 60s

                rds_json on;

            }

PG

   upstream 192.168.236.1725432huayouhui_app {

        postgres_server  db ip:db port dbname=xx

        user=xx password=xx;

        postgres_keepalive off;

    }

查表

location ~ (路由信息)  {

add_header  Content-Type 'text/html; charset=utf-8';

set $dbname $2;

set $upname $1$2;

set_by_lua $quoted_name '

local name = ngx.var.dbname

local mysql = "select tablename from pg_tables where schemaname=\'"..name.."\';"

return mysql

';

postgres_pass   $upname;

rds_json on;

postgres_query  '$quoted_name';

}

查询

        location ~ (数据库路由信息) {

            add_header  Content-Type 'text/html; charset=utf-8';

            set_form_input $qsql;

               access_by_lua $sql '

                     权限和非法字符验证功能模块,验证qsql

                ';

                set $upname $1;

                lua_need_request_body on;

                client_max_body_size 50k;

                client_body_buffer_size 50k;

            postgres_pass   $upname;

            rds_json on;

            postgres_query  '$sql';

        }

页面实现和测试上线时间:3days;nginx 路由 + nginx查询 : 实现+测试 1day。



更多文章请关注微信订阅号 轻度运维

效率篇-SQL自助查询平台

相关内容

热门资讯

伊朗与阿曼会谈最新细节曝光 美国有线电视新闻网(CNN)8月5日报道,伊朗和阿曼将敲定一项关于通过霍尔木兹海峡进行商业航运的框架...
大科学装置建设全面提速 创新成... 央视网消息(新闻联播):重大科技基础设施是建设科技强国的利器。今年以来,我国大科学装置建设全面提速,...
贝塔创新科技观察算力公有化趋势... 从公有云到公有算力网络:AI基础设施进入弹性调度时代 过去几年,市场更关注大模型参数、算法能力和应...
活力中国调研行丨激活创新源 合... 新华社合肥8月5日电 题:激活创新源 合肥大健康科研成果加速产业化 新华社记者高亢、张紫赟 近日,“...
凤凰连线:为何伊朗称“即使与阿... 据凤凰卫视报道,伊朗知情人士当地时间周三透露称,伊朗与阿曼就霍尔木兹海峡船舶通行安排,可能达成协议,...
伊朗称与阿曼就霍尔木兹海峡航运... 据凤凰卫视报道,伊朗外交部发言人巴加埃5日表示,伊朗与阿曼已就霍尔木兹海峡拟定航道的地理坐标达成一致...
予非知识图谱大模型完成生成式人... 近日,山东省网信办正式公布生成式人工智能服务备案名录,潍坊华创信息技术有限公司自主研发的“予非知识图...
学习语丨人工智能应该是造福全人... 近日,习近平总书记向2025世界智能产业博览会致贺信,指出:“人工智能应该是造福全人类的国际公共产品...
2026年交易全链路可追溯的智... 2026-08-05 12:10:48 作者:狼叫兽 2026年被视作智能体支付规模化落地的关键之年...
百余名中外专家齐聚海西 共话人... 8月4日,人工智能赋能的天文学开放科学会议(第二届)在青海省海西州盛大启幕。来自中国、美国、英国、法...