SQL洞察和審計
本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務(wù)造成影響,請務(wù)必仔細閱讀。
當您在安全合規(guī)審計、性能分析、故障排除等場景下需要監(jiān)控和管理RDS MySQL實例中執(zhí)行的SQL語句時,可以利用SQL洞察和審計功能對SQL語句的執(zhí)行情況進行記錄和聚合分析。開啟該功能后會自動記錄來自數(shù)據(jù)庫內(nèi)核的SQL語句,以及SQL語句的執(zhí)行賬號、IP地址、執(zhí)行詳情等信息,對實例性能沒有影響。
前提條件
RDS MySQL實例為高可用系列或集群系列。
如果是RAM用戶,使用搜索功能時,需要為RAM用戶授予AliyunRDSReadOnlyWithSQLLogArchiveAccess權(quán)限。如何為RAM用戶授權(quán),請參見通過RAM對RDS進行權(quán)限管理。
您也可以通過自定義權(quán)限策略授予RAM用戶使用搜索(包含導(dǎo)出)功能的權(quán)限,詳情請參見通過自定義權(quán)限策略授權(quán)RAM用戶使用SQL洞察和審計的搜索(包含導(dǎo)出)功能。
開啟SQL洞察和審計功能可以記錄所有DQL、DML和DDL操作信息,這些信息是通過數(shù)據(jù)庫內(nèi)核輸出,對系統(tǒng)CPU消耗極低。
計費詳情與功能概覽
實例地域 | 支持的功能 | 計費 |
華東1(杭州)、華東2(上海)、華北1(青島)、華北2(北京)、華北3(張家口)、華北5(呼和浩特)、華北6(烏蘭察布)、華南1(深圳)、華南2(河源)、華南3(廣州)、西南1(成都)、中國(香港)、新加坡、日本(東京)、馬來西亞(吉隆坡)、印度尼西亞(雅加達)、美國(硅谷)、英國(倫敦)、美國(弗吉尼亞)和德國(法蘭克福) | SQL洞察和審計
|
|
由RDS側(cè)計費時,按小時扣費,不同地域的實例有不同的計費。
0.0122元/(GB*小時):中國(香港)和新加坡地域。
0.008元/(GB*小時):除中國(香港)和新加坡外的其他所有地域。
RDS推出存儲包,支持抵扣由RDS側(cè)計費的審計日志使用量,幫助您節(jié)省支出,具體請參見存儲包。
使用場景
對數(shù)據(jù)安全有嚴格要求的行業(yè),如金融行業(yè)、安全行業(yè)、證券行業(yè)、政務(wù)行業(yè)、保險行業(yè)等。
需要詳細排查數(shù)據(jù)庫運行情況的場景,如極端場景的問題排查、SQL語句性能排查。
極端情況保護數(shù)據(jù)的場景,可以通過SQL洞察記錄的SQL語句恢復(fù)數(shù)據(jù)。
注意事項
單次在線查詢時間范圍最多為24小時。這是因為SQL洞察記錄所有數(shù)據(jù)庫行為,會記錄大量SQL語句,在線查詢選擇時間范圍過大,會導(dǎo)致長時間沒有返回查詢結(jié)果,甚至查詢超時。
說明您可以查詢數(shù)據(jù)存儲時長范圍內(nèi),任意24小時的數(shù)據(jù)。
如果需要查詢更大時間范圍的SQL記錄,可以使用日志服務(wù)接入洞察日志。詳情請參見采集RDS SQL審計日志。
在線查詢支持組合查詢。例如在關(guān)鍵字搜索欄輸入test1 test2可以查詢包含test1或test2的SQL日志。
在線查詢不支持模糊查詢。
在線查詢的關(guān)鍵字至少包含4個字符。
審計記錄支持通過線程ID和事務(wù)ID查詢SQL語句記錄。
說明通過事務(wù)ID查詢前需將loose_rds_audit_log_version參數(shù)值設(shè)為MYSQL_V3。詳見RDS MySQL 8.0開放參數(shù)一覽表。
MySQL 8.0支持通過事務(wù)ID查詢的小版本為20210930以上,MySQL 5.7小版本為20210630以上。
SQL洞察和審計記錄的SQL語句最大長度為8192字節(jié),并且SQL語句最大長度受loose_rds_audit_max_sql_size或loose_rds_audit_log_event_buffer_size參數(shù)控制,參數(shù)取值范圍為
[0,32768]
,單位為字節(jié):當參數(shù)取值小于等于8192字節(jié)時,SQL語句最大長度為參數(shù)設(shè)定值,超過部分不再記錄。由于信息采集處理時會增加前綴標注,實際記錄的SQL語句最大長度略小于參數(shù)設(shè)定值。
當參數(shù)取值大于8192字節(jié)時,SQL語句最大長度為8192字節(jié),超過部分不再記錄。由于信息采集處理時會增加前綴標注,實際記錄的SQL語句最大長度略小于8192字節(jié)。
說明RDS MySQL 5.6、5.7版本支持loose_rds_audit_max_sql_size參數(shù)控制記錄長度。
RDS MySQL 8.0版本支持loose_rds_audit_log_event_buffer_size參數(shù)控制記錄長度。
如果您開啟的SQL洞察為試用版,暫不支持調(diào)用API(DescribeSQLLogRecords和DescribeSQLLogFiles)查詢審計日志。
洞察日志包含鎖等待時間,而慢日志不包含。
如果使用RDS數(shù)據(jù)庫代理地址連接,且代理開啟了事務(wù)級連接池,由于連接可能會被復(fù)用,所以使用
show processlist
命令或者SQL洞察顯示的IP地址和端口可能和客戶端實際的IP地址和端口不一致。當程序使用Prepare方式時,會在SQL洞察中出現(xiàn)2條語句,一條包含問號,一條包含具體值。
掛載到PolarDB-X 1.0(DRDS)的RDS MySQL實例執(zhí)行一條SQL語句時,由于水平拆分(分庫分表)原因,會在RDS MySQL實例上產(chǎn)生多條SQL洞察和審計日志。
開啟SQL洞察和審計
如果您在日志服務(wù)的CloudLens for RDS開啟了RDS MySQL實例的審計日志采集功能,系統(tǒng)會自動開啟對應(yīng)RDS MySQL實例的SQL洞察和審計功能。詳情請參見CloudLens for RDS。
如果您未開通SQL洞察和審計功能,您可以通過Binlog日志進行查看。Binlog日志只能查詢備份保留時間以內(nèi)的增、刪、改等SQL語句,不能查看來源IP和賬號信息。詳情請參見查看本地日志(Binlog)。
訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。
在左側(cè)導(dǎo)航欄中,選擇 。
點擊開啟企業(yè)版V3。
勾選需要開啟的功能,點擊提交。
修改SQL洞察和審計數(shù)據(jù)存儲時長
減少SQL洞察和審計數(shù)據(jù)存儲時長后,DAS會立刻將超過存儲時長的SQL審計日志清空。建議您將SQL審計日志導(dǎo)出并保存至本地后,再減少SQL洞察和審計數(shù)據(jù)存儲時長。
訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。
在左側(cè)導(dǎo)航欄中,選擇 。
單擊服務(wù)設(shè)置。
在服務(wù)設(shè)置頁,修改審計場景的日志存儲時長,然后單擊確定。
關(guān)閉SQL洞察和審計
SQL洞察和審計功能關(guān)閉后,SQL洞察和審計的日志會被清空。建議您將SQL洞察和審計的日志導(dǎo)出并保存至本地后,再關(guān)閉SQL洞察和審計功能。當重新開啟SQL洞察和審計功能時,SQL洞察和審計的日志將從本次開啟SQL洞察和審計的時間開始記錄。
訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。
在左側(cè)導(dǎo)航欄中,選擇
。在搜索頁簽的日志列表區(qū)域,單擊導(dǎo)出。
在彈出的對話框中,選擇導(dǎo)出字段和導(dǎo)出時間范圍,單擊確認。
導(dǎo)出完成后,下載已導(dǎo)出的文件并妥善保存。
單擊服務(wù)設(shè)置,關(guān)閉SQL洞察和審計。
如果您開通了DAS 企業(yè)版V3,請去掉SQL洞察和審計所有功能的勾選,單擊提交。
說明關(guān)閉SQL洞察和審計功能約1小時后,系統(tǒng)會釋放SQL洞察和審計數(shù)據(jù)占用的存儲空間。
遷移不同企業(yè)版的SQL洞察和審計數(shù)據(jù)
企業(yè)版 V2相對于企業(yè)版 V1,變更了底層存儲架構(gòu),通過冷熱混合存儲實現(xiàn)降本增效,使用成本低。而企業(yè)版 V3,在冷熱混合存儲的基礎(chǔ)上,按使用的功能細分計費項,計費更加靈活。
當您的數(shù)據(jù)庫實例支持企業(yè)版 V3時,您可以將DAS企業(yè)版 V1或V2的數(shù)據(jù)遷移至企業(yè)版 V3,以獲得更加優(yōu)惠的費用,詳情請參見DAS企業(yè)版間數(shù)據(jù)如何遷移?
遷移操作無法終止和回退,請仔細閱讀遷移說明。
常見問題
A:logout!
是指連接斷開。logout!
的耗時,是指上一次交互時間到logout!
發(fā)生時間的差值,可以理解為連接空閑的時長。狀態(tài)列的1158是指網(wǎng)絡(luò)鏈接斷開,其可能的原因是:
客戶端連接超時。
服務(wù)端異常斷開。
服務(wù)端連接Reset(超過interactive_timeout或wait_timeout時長)。
A:該情況可能在您使用存儲過程時出現(xiàn)。按如下示例可以復(fù)現(xiàn)這種情況:
示例中數(shù)據(jù)庫實例為RDS MySQL,測試賬號為test_user,測試數(shù)據(jù)庫為testdb。
在RDS控制臺創(chuàng)建普通權(quán)限賬號及其授權(quán)的數(shù)據(jù)庫,詳細操作請參見創(chuàng)建數(shù)據(jù)庫和賬號。
使用測試賬號通過命令行方式連接數(shù)據(jù)庫實例,詳細操作請參見通過客戶端、命令行連接RDS MySQL實例。
切換到測試數(shù)據(jù)庫,并創(chuàng)建如下存儲過程。
-- 切換到測試數(shù)據(jù)庫 USE testdb; -- 創(chuàng)建存儲過程 DELIMITER $$ DROP PROCEDURE IF EXISTS `das` $$ CREATE DEFINER=`test_user`@`%` PROCEDURE `das`() BEGIN SELECT * FROM information_schema.processlist WHERE Id = CONNECTION_ID(); END $$ DELIMITER;
使用高權(quán)限賬號連接數(shù)據(jù)庫實例,詳細操作請參見通過客戶端、命令行連接RDS MySQL實例。
調(diào)用存儲過程。
-- 切換到測試數(shù)據(jù)庫 USE testdb; -- 調(diào)用存儲過程 CALL das(); +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+ | ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO | +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+ | 487818 | test_user | %:2065 | testdb | Query | 0 | executing | SELECT * FROM information_schema.processlist WHERE Id = CONNECTION_ID() | +--------+-----------+--------+--------+---------+------+-----------+-------------------------------------------------------------------------+
A:數(shù)據(jù)庫實例開啟了query_cache_type
。日志列表中,SQL語句的掃描行數(shù)統(tǒng)計的是在InnoDB引擎層掃描的行數(shù),開啟query_cache_type
后,MySQL會嘗試將查詢結(jié)果緩存起來,如果后續(xù)有相同的查詢請求到來,且查詢緩存命中,則不會再到InnoDB層進行查詢,直接返回緩存結(jié)果。因此,實際有數(shù)據(jù)返回,但日志列表中統(tǒng)計的掃描行數(shù)為0。詳情請參見Fast Query Cache。
RDS MySQL的增量數(shù)據(jù)可以通過SQL洞察或Binlog日志來查看,兩者區(qū)別如下:
SQL洞察:適用于獲取數(shù)據(jù)庫中所有增量數(shù)據(jù),但是在實例負載非常高時,會丟失少量記錄,因此通過這種方式來統(tǒng)計增量數(shù)據(jù)可能會出現(xiàn)不準確的情況??梢杂涗浰蠨QL、DML和DDL操作信息,這些信息是通過數(shù)據(jù)庫內(nèi)核輸出,對系統(tǒng)CPU消耗極低。
Binlog日志:適用于短期內(nèi)獲取準確的增量數(shù)據(jù),但是無法獲取實時日志信息。準確記錄數(shù)據(jù)庫所有的增、刪、改操作信息以及恢復(fù)用戶的增量數(shù)據(jù)。Binlog日志暫存在實例中,系統(tǒng)定期將實例中已經(jīng)寫完數(shù)據(jù)的Binlog日志轉(zhuǎn)移至OSS保存7天。無法保存正在寫入數(shù)據(jù)的Binlog文件,因此單擊一鍵上傳Binlog后仍有部分Binlog日志沒有被上傳。詳情請參見云數(shù)據(jù)庫RDS MySQL版遠程獲取Binlog日志并解析Binlog日志。
A:由于SQL洞察和審計功能版本更新,最新版的入口已經(jīng)變成了SQL洞察和審計。
A:當前只能開通本實例支持的最新版本的SQL洞察和審計。詳情請參見產(chǎn)品系列及支持的功能。