真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

效率篇-SQL自助查詢平臺(tái)

使用時(shí)間:2014-05 - 至今。

創(chuàng)新互聯(lián)公司自2013年起,先為??诘确?wù)建站,??诘鹊仄髽I(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為海口企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

升級(jí)&變動(dòng):投入運(yùn)作后沒(méi)做任何修改變動(dòng),放養(yǎng)狀態(tài)。

運(yùn)行情況:內(nèi)部環(huán)境下使用,日均分擔(dān)DBA工作量500次+查詢。

誕生背景:DBA人數(shù)-3,DBA除了做常規(guī)維護(hù)和數(shù)據(jù)庫(kù)優(yōu)化外,還需要花大量時(shí)間幫開發(fā)查詢非敏感數(shù)據(jù)。

需求:1.查詢不能影響線上數(shù)據(jù)庫(kù)服務(wù);2.與現(xiàn)有運(yùn)維系統(tǒng)做Restful API對(duì)接;

3.不能接收數(shù)據(jù)超1000+查詢,以防很容易惡意導(dǎo)數(shù)據(jù);4.預(yù)防惡意操作(delete、update、create table等ddl)。

對(duì)比對(duì)象:PhpMyAdmin(1.發(fā)現(xiàn)功能太多安全不受限制;2.需要安裝web和對(duì)應(yīng)php服務(wù)和代碼,維護(hù)工作量多(例如:java web容器系,每加個(gè)數(shù)據(jù)源重啟一次服務(wù));

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

因?yàn)榍岸舜嬖谶\(yùn)維平臺(tái),數(shù)據(jù)庫(kù)查詢功能可以有兩個(gè)途徑實(shí)現(xiàn):

1.在原有運(yùn)維平臺(tái)開發(fā)多個(gè)功能模塊;但會(huì)引起運(yùn)維平臺(tái)臃腫;如果量大需要增加資源的時(shí)候,擴(kuò)展很麻煩。

2.使用nginx查詢數(shù)據(jù)庫(kù)的第三方工具擔(dān)當(dāng)起sql操作結(jié)果返回,同時(shí),可以達(dá)到類熱部署模式效果,只是在發(fā)現(xiàn)新的配置,需動(dòng)態(tài)添加nginx中,重配置nginx就能正式服務(wù)。

基于上述原因:使用的大概東西決定了。nginx、lua(做非法字符檢查+權(quán)限認(rèn)證)、nginx模塊ngx_postgres(用于查詢pgsql)、nginx模塊drizzle-nginx(用于查詢MySQL)、form-input-nginx-module(直接獲取post的內(nèi)容,偷懶,其實(shí)可以lua代碼中獲?。?。

現(xiàn)在的使用圖

1.工作區(qū)

效率篇-SQL自助查詢平臺(tái)

2.歷史記錄區(qū)

效率篇-SQL自助查詢平臺(tái)

實(shí)現(xiàn)架構(gòu)

運(yùn)維平臺(tái)Web界面 - > nginx+lua(數(shù)據(jù)庫(kù)路由功能) -> nginx + lua + drizzle-nginx + ngx_postgres + form-input-nginx-module (如果性能不足能,需要復(fù)制、克隆加資源,只要在數(shù)據(jù)庫(kù)路由端注冊(cè)就行了)公共組成的API查詢接口

實(shí)現(xiàn):

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(主要讓輸出結(jié)果自動(dòng)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查找數(shù)據(jù)庫(kù)的中配置:

MySQL

upstream name {

            drizzle_server db ip:db port dbname=xx

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

    }

show table功能

            location ~ (數(shù)據(jù)庫(kù)路由標(biāo)識(shí)) {

                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 ~ (數(shù)據(jù)庫(kù)路由信息) {

                default_type 'text/plain';

                set_form_input $qsql;

               access_by_lua $sql '

                     權(quán)限和非法字符驗(yàn)證功能模塊,驗(yàn)證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 ~ (數(shù)據(jù)庫(kù)路由信息) {

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

            set_form_input $qsql;

               access_by_lua $sql '

                     權(quán)限和非法字符驗(yàn)證功能模塊,驗(yàn)證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';

        }

頁(yè)面實(shí)現(xiàn)和測(cè)試上線時(shí)間:3days;nginx 路由 + nginx查詢 : 實(shí)現(xiàn)+測(cè)試 1day。

更多文章請(qǐng)關(guān)注微信訂閱號(hào) 輕度運(yùn)維

效率篇-SQL自助查詢平臺(tái)


分享標(biāo)題:效率篇-SQL自助查詢平臺(tái)
當(dāng)前URL:http://weahome.cn/article/jscidi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部