设为首页 收藏本站
查看: 931|回复: 0

[经验分享] 效率篇-SQL自助查询平台

[复制链接]

尚未签到

发表于 2018-10-20 12:50:49 | 显示全部楼层 |阅读模式
  使用时间: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.工作区
DSC0000.jpg

  2.历史记录区
DSC0001.jpg

  实现架构
  运维平台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
  }
  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。
  更多文章请关注微信订阅号 轻度运维
DSC0002.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624087-1-1.html 上篇帖子: SQL LIMIT和DESC 下篇帖子: zabbix server服务安装与配置详情
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表