當前位置:首頁 » 編程語言 » MySQLSQL審計
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

MySQLSQL審計

發布時間: 2023-08-10 22:13:05

A. 如何自動化完成sql審核

sql審核主要完成兩方面的目的.
1、避免性能太差的sql進入生產系統,導致整體性能降低
2、檢查開發設計的索引是否合理,是否需要添加索引

第一點是SQL審核最核心的地方,避免亂七八糟的sql影響線上性能,甚至導致線上系統崩潰.
第二點是屬於建模的范疇,要解決建模的最好辦法是DBA參與項目前期審核,由DBA建模,如果DBA人力資源不足,那麼就定期由DBA對開發人員進行培訓.然後發現建模太爛的就扣KPI.

現在很多公司都是人肉來完成SQL審核的,人肉審核對dba的要求較高,需要懂一些代碼,另外是費時費力,畢竟一般公司幾十個開發,對應一個DBA,而且DBA還要干很多其他的事情.
如何將DBA從人肉SQL審核中解放出來呢?

思路其實很簡單:
1、獲取程序要執行的SQL
2、對要執行的SQL做分析,可以加各種分析條件來判斷這個SQL是否可以自動審核通過,未通過審核的需要人工處理.
3、配合後期的慢查詢日誌分析系統完成長期的監控.

開源的解決方案主要有淘寶丹臣sqlautoreview系統.可以在github上搜索到.
但是這個系統主要是基於java sqlmapfile.xml解決自動創建索引的問題,對源數據有要求,並且是通過解析SQL結構來假設SQL的執行計劃,不是特別准確,並且不能夠很好的區分新sql還是老sql.

所以產生了一個新的方案:
1、為所有的執行過的sql產生一個figerprint
2、基於慢查詢提供的數據,加上explain 提供的數據來判斷這個sql的性能是否可接受,或者可優化.
3、自動審核通過性能可接受的部分,給DBA展示性能較差的sql,然後進行優化.

方案的優點在於:
基於用戶真正執行的SQL,並且可以觀察SQL執行頻率.
基於MySQL真正的執行計劃和執行結果,分析更准確.
每個SQL都有一個fingerprint,只需要增量處理新加的SQL,效率和性能提高.
基於Box anemometer二次開發,讓慢查詢和sql審核同平台,增加工具集成性,提高用戶體驗(DBA和開發人員)。

方案實施:
既然咱是DBA,肯定會有更DBA的思維方式.基於現有軟體二次開發完成,減少開發成本,整合管理平台.
基於Box anemometer.安裝Box anemometer
Box anemometer是一款B/S架構,圖形化的MySQL慢查詢分析工具.功能強大易用,設計簡單直接.anemometer是基於pt-query-digest的二次封裝得來.

核心處理流程:
mysql node–>計劃任務通過pt-query-digest收集慢查詢信息–>結果寫入到資料庫中–>anemometer按條件去展示慢查詢的結果,並且提供了圖形化和趨勢分布圖等功能.
所以anemometer已經幫我們完成了數據收集,包括每個sql的fingerprint信息,以及相關的信息,我們在測試環境,基於anemometer,將long_query_time設置為0,就可以收集到所以的SQL及相關信息.

在我們收集到所有SQL以後,我們就要來分析這個SQL是否可以自動審核通過.這里開始我們就要定製了.

定製內容如下:
一、
設置一個單獨的datasources,可以命名為audit_sql.
這個datasources裡面只放置開發環境或者測試環境的慢查詢(你要做sql審核基於哪個環境),將此環境的long_query_time設置為0,接收所有的sql查詢.

二、修改anemometer
ALTER TABLE `global_query_review` ADD audit_status VARCHAR(255) NOT
NULL DEFAULT 『refuse』 comment 『sql審計的狀態 refuse未通過 pass審核通過』;

修改PHP代碼.
在report模塊的where條件中增加一個Ait Status的選項框,可以過濾audit_status的狀態
在show_query模塊中增加一個Audit Status的選項框,可以人工設置audit_status的狀態

三、增加兩個額外的腳本,准實時的分析audit_status為refuse的sql,如果sql的滿足自動審核通過的條件,那麼就設置audit_status為pass,表示自動審核通過.
自動審核未通過的sql,由DBA人工在anemometer上檢索和處理.
這里就涉及到一個自動審核通過的演算法:
演算法分兩種.
第一種是准實時,也就是可以幾分鍾或者一個小時運行一次,主要是根據每個sql的執行效率判斷是否pass.
對應的腳本名字叫做:audit_sql.py

第二種是一天一次,弱化執行效率判斷,增加一天執行的頻率判斷.
對應的腳本名字叫做:audit_sql_day.py

各家根據自己的實際情況調整或者優化這兩個腳本.
至此,你已經可以讓99%以上的代碼自動審核通過了,審核不通過的代碼你可以讓開發自己來tracking也可以主動推給開發.
對於才搭建的環境,可能會有一些亂七八糟的sql,不過使用一段時間穩定以後,異常的sql指紋都有了,那麼每天產生的sql指紋就比較少了,而這部分SQL指紋也就是程序員編寫新的代碼產生的.

B. 本級預算執行審計中的SQL語句有哪些

使用: myisamchk -of tablename.MYI 關於myisamchk詳細參數說明參見使用幫助 需要注意進行修改必須確保MySQL伺服器沒訪問數據表保險情況進行檢測MySQL伺服器Shutdown

C. 如何實時監控mysql中的SQL語句的執行情況

首先介紹下 pt-stalk,它是 Percona-Toolkit 工具包中的一個工具,說起 PT 工具包大家都不陌生,平時常用的 pt-query-digest、 pt-online-schema-change 等工具都是出自於這個工具包,這里就不多介紹了。

pt-stalk 的主要功能是在出現問題時收集 OS 及 MySQL 的診斷信息,這其中包括:

1. OS 層面的 CPU、IO、內存、磁碟、網路等信息;

2. MySQL 層面的行鎖等待、會話連接、主從復制,狀態參數等信息。

而且 pt-stalk 是一個 Shell腳本,對於我這種看不懂 perl 的人來說比較友好,腳本裡面的監控邏輯與監控命令也可以拿來參考,用於構建自己的監控體系。

三、使用

接著我們來看下如何使用這個工具。

pt-stalk 通常以後台服務形式監控 MySQL 並等待觸發條件,當觸發條件時收集相關診斷數據。

觸發條件相關的參數有以下幾個:

  • function:

    ∘默認為 status,代表監控 SHOW GLOBAL STATUS 的輸出;

    ∘也可以設置為 processlist,代表監控 show processlist 的輸出;

  • variable:

    ∘默認為 Threads_running,代表 監控參數,根據上述監控輸出指定具體的監控項;

  • threshold:

    ∘默認為 25,代表 監控閾值,監控參數超過閾值,則滿足觸發條件;

    ∘監控參數的值非數字時,需要配合 match 參數一起使用,如 processlist 的 state 列;

  • cycles:

    ∘默認為 5,表示連續觀察到五次滿足觸發條件時,才觸發收集;

  • 連接參數:host、password、port、socket。

  • 其他一些重要參數:

  • iterations:該參數指定 pt-stalk 在觸發收集幾次後退出,默認會一直運行。

  • run-time:觸發收集後,該參數指定收集多長時間的數據,默認 30 秒。

  • sleep:該參數指定在觸發收集後,sleep 多久後繼續監控,默認 300 秒。

  • interval:指定狀態參數的檢查頻率,判斷是否需要觸發收集,默認 1 秒。

  • dest:監控數據存放路徑,默認為 /var/lib/pt-stalk。

  • retention-time :監控數據保留時長,默認 30 天。

  • daemonize:以後台服務運行,默認不開啟。

  • log:後台運行日誌,默認為 /var/log/pt-stalk.log。

  • collect:觸發發生時收集診斷數據,默認開啟。

    ∘collect-gdb:收集 GDB 堆棧跟蹤,需要 gdb 工具。

    ∘collect-strace:收集跟蹤數據,需要 strace 工具。

    ∘collect-tcpmp:收集 tcpmp 數據,需要 tcpmp 工具。

D. 資料庫審計 支持審計資料庫包括哪些

安華金和資料庫審計產品支持市面上30多種資料庫類型,關系型資料庫類型包含Oracle、MySQL、SQLServer、DB2、Postgres、Sybase、DM、Gbase8A、Kingbase、Informix、Oscar神通、CacheDB、Gbase8T、MariaDB、Percona、Greenplum、Teradata、Hana、SG-RDB_MySQL、SG-RDB_PostgreSQL
等等,非關系型資料庫包含HBase、MongoDB、Hive、Impala、Sentry、Redis、HDFS、ElasticSearch、Spark SQL等等,去年做交流的時候聊過,還特意留了一張支持資料庫的表格,現在是不是又有新的資料庫也可以支持,你跟安華了解下,他們是業界支持資料庫類型最多的一家廠商,還不明白自己網路下。

E. mysql和sql一樣嗎

MySQL是在90年代中期開發的。是市場上第一個可用的開源資料庫之一,今天有很多MySQL的替代變種但是,變體之間的差異並不重要因為它們使用相同的語法,並且基本功能也保持不變。

mysql和sql一樣的區別

MySQL是一種RDBMS,它允許保持資料庫中存在的數據MySQL的發音為「我的SQL」,但它也被稱為「我的續集」它以聯合創始人Michael,Widenius的女兒的名字命名MySQL提供對資料庫的多用戶訪問,在Linux發行版之上,此RDBMS系統與PHP和Apache,Web、Server的組合一起使用MySQL使用SQL語言來查詢資料庫。

SQL是一種用於操作資料庫的語言MySQL是市場上第一個可用的開源資料庫之一SQL用於訪問,更新和操作資料庫中的數據MySQL是一種RDBMS,它允許保持資料庫中存在的數據SQL是結構化查詢語言MySQL是一個使用MYSQL存儲,檢索修改和管理資料庫的RDBMS、SQL是一種查詢語言,而MYSQL是資料庫軟體。