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