記錄惡意SQL註入引發的RDS只讀資料庫CPU飈100%

来源:https://www.cnblogs.com/lucktomato/p/18081873
-Advertisement-
Play Games

前言: 在廣州這座城市下著小雨的晚上,我正在廚房洗著碗,突然手機有來電,脫下手套,一看是來自阿裡雲的告警電話。打開飛書查看告警內容,發現某個業務的RDS只讀實例CPU飈到100%,下意識覺得是不是有慢查詢導致,想著不會有啥問題,上去kill慢查就好了,結果發現是大問題....一、發現問題 2024年 ...


前言: 在廣州這座城市下著小雨的晚上,我正在廚房洗著碗,突然手機有來電,脫下手套,一看是來自阿裡雲的告警電話。打開飛書查看告警內容,發現某個業務的RDS只讀實例CPU飈到100%,下意識覺得是不是有慢查詢導致,想著不會有啥問題,上去kill慢查就好了,結果發現是大問題....
一、發現問題

  2024年3月10號 21:22分左右,手機響起來自阿裡雲的告警通知,確定了是阿裡雲RDS報警,MySQL有一波連接數進來,資料庫CPU瞬間100%,MySQL連接數也觸發告警,10分鐘不到有35000多條慢日誌,同時阿裡雲只讀庫進行了實例主備切換(故障切換)
問題影響了線上用戶登錄和充值,當時工作群運營反饋問題,技術這邊也關註起來。

二、分析造成原因

業務運行的RDS是1主4只讀的架構,然後開啟資料庫代理,讀寫分離。
一開始以為是管理後臺有人在查數據,全表掃描或者查看日期時間範圍很長導致只讀庫有慢查,因為之前出現過這種情況,結果看到控制台幾萬條慢查詢。影響我判斷的告警來了,只讀實例出現故障進行主備切換,以為是實例出現問題,我立馬去找阿裡雲客服問實例是否有問題,為什麼會主備切換了。結果技術客服回答,是因為有一波連接數進來,慢查裡面執行SQL有掃描行數很大的可以看看。然後就發現了下麵這個關鍵語句,執行1127次,每次掃描3789828行導致CPU漲到100%,

SELECT *
FROM `table_info`
WHERE user_name = '                        '
        AND game_xxxx = '123abc'
        AND platform = 'xxxpay'
LIMIT 1 

於是立馬反饋給該業務的開發,複製粘貼到群里,開發說user_name是空的,開發也很快修改代碼發佈到線上,本以為就要結束了,結果還是有這樣的SQL進來,這就神奇了....然後懷疑user_name不是空的,會不會是空格,結果我複製出來到文本編輯器,因為開了符號顯示,發現user_name的值是空+空格,真想大白了,太可惡了。

 三、解決辦法

開發同事修改代碼,正則匹配過濾,業務恢復

四、個人反思

1、遇到類似問題,細心按照流程思路找問題,不要急
2、第一時間先把阿裡雲告警臨時關閉,不然一直打電話影響排錯
3、查看告警的只讀活躍會話,如果有執行特別長時間的SQL,立馬kill別影響業務。
4、如果慢查特別多,先對掃描行欄位進行排序,找出掃描行特別多的SQL再分析
5、事後總結,做好記錄,處理事故同時也得到積累和進步

  

  




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文主要學習 FreeRTOS 互斥量的相關知識,包括優先順序翻轉問題、優先順序繼承、死鎖現象、創建/刪除互斥量 和 獲取/釋放互斥量等知識 ...
  • 一、六種Java線程狀態 新建狀態(New):當創建一個Thread實例後,線程就處於新建狀態。此時線程對象已經被分配了記憶體,並初始化了其成員變數的值。 就緒狀態(Runnable):也被稱為“可執行狀態”。當調用了線程的start()方法後,線程就進入了就緒狀態。此時線程已經具備了執行的條件,等待 ...
  • 痞子衡嵌入式半月刊: 第 95 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
  • 實驗環境: 兩台windows servers 一臺已經配置了FTP伺服器,IP為192.168.1.220,vmnet1 一臺作為客戶端測試,IP為192.168.1.138,vmnet1 一:FTP IP限制 1.關閉ftp伺服器端防火牆,使客戶端能pin通伺服器端 2.在客戶端資源管理器輸入f ...
  • 實驗環境: windows server虛擬機一臺 網路適配器:vmnet1 ip:192.168.1.220 一.安裝FTP服務 打開伺服器管理器 點擊添加角色,勾IIS,點擊下一步直到對話框消失 勾選FTP 從開始菜單找到管理工具 打開IIS 可以看見ftp服務的相關信息,說明安裝成功 二:新建 ...
  • 目錄一、zabbix部署1、安裝zabbix服務端2、準備資料庫(mariadb簡單點)3、修改服務的配置二、登錄zabbix三、客戶端配置1、安裝軟體包2、修改配置文件3、啟動客戶端服務四、報錯解決五、添加監控主機1、安裝軟體包2、修改配置文件3、啟動客戶端服務4、回到zabbix添加主機5、添加 ...
  • 想使用串口,找了半天也沒找到它所給的pin的使用示例,淘寶客服說只是硬體相容樹莓派。 想來想去,還是直接接個USB串口最方便。 但是插上不識別,說明沒有驅動。 直接在板子上編譯沒有header依賴,後續下載華碩對應的arm依賴能編譯但是驅動不能正常使用。 就在所給虛擬機上交叉編譯。 先按照手冊配置好 ...
  • innodb_log_file_size 和 innodb_buffer_pool_size 是 MySQL 資料庫中 InnoDB 存儲引擎的兩個重要配置參數。它們對資料庫的性能和可靠性有著顯著的影響。 1. innodb_log_file_size innodb_log_file_size 參數 ...
一周排行
    -Advertisement-
    Play Games
  • 下麵是一個標準的IDistributedCache用例: public class SomeService(IDistributedCache cache) { public async Task<SomeInformation> GetSomeInformationAsync (string na ...
  • 這個庫提供了在啟動期間實例化已註冊的單例,而不是在首次使用它時實例化。 單例通常在首次使用時創建,這可能會導致響應傳入請求的延遲高於平時。在註冊時創建實例有助於防止第一次Request請求的SLA 以往我們要在註冊的時候實例單例可能會這樣寫: //註冊: services.AddSingleton< ...
  • 最近公司的很多項目都要改單點登錄了,不過大部分都還沒敲定,目前立刻要做的就只有一個比較老的項目 先改一個試試手,主要目標就是最短最快實現功能 首先因為要保留原登錄方式,所以頁面上的改動就是在原來登錄頁面下加一個SSO登錄入口 用超鏈接寫的入口,頁面改造後如下圖: 其中超鏈接的 href="Staff ...
  • Like運算符很好用,特別是它所提供的其中*、?這兩種通配符,在Windows文件系統和各類項目中運用非常廣泛。 但Like運算符僅在VB中支持,在C#中,如何實現呢? 以下是關於LikeString的四種實現方式,其中第四種為Regex正則表達式實現,且在.NET Standard 2.0及以上平... ...
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他們的程式記憶體會偶發性暴漲,自己分析了下是非托管記憶體問題,讓我幫忙看下怎麼回事?哈哈,看到這個dump我還是非常有興趣的,居然還有這種游戲幣自助機類型的程式,下次去大玩家看看他們出幣的機器後端是不是C#寫的?由於dump是linux上的程式,剛好win ...
  • 前言 大家好,我是老馬。很高興遇到你。 我們為 java 開發者實現了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何處理的,可以參考我的另一個項目: 手寫從零實現簡易版 tomcat minicat 手寫 ngin ...
  • 上一次的介紹,主要圍繞如何統一去捕獲異常,以及為每一種異常添加自己的Mapper實現,並且我們知道,當在ExceptionMapper中返回非200的Response,不支持application/json的響應類型,而是寫死的text/plain類型。 Filter為二方包異常手動捕獲 參考:ht ...
  • 大家好,我是R哥。 今天分享一個爽飛了的面試輔導 case: 這個杭州兄弟空窗期 1 個月+,面試了 6 家公司 0 Offer,不知道問題出在哪,難道是杭州的 IT 崩盤了麽? 報名面試輔導後,經過一個多月的輔導打磨,現在成功入職某上市公司,漲薪 30%+,955 工作制,不咋加班,還不捲。 其他 ...
  • 引入依賴 <!--Freemarker wls--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.30</version> </dependency> ...
  • 你應如何運行程式 互動式命令模式 開始一個互動式會話 一般是在操作系統命令行下輸入python,且不帶任何參數 系統路徑 如果沒有設置系統的PATH環境變數來包括Python的安裝路徑,可能需要機器上Python可執行文件的完整路徑來代替python 運行的位置:代碼位置 不要輸入的內容:提示符和註 ...