找回密碼
 註冊
搜索
查看: 74|回復: 0

[AlamLinux] MYSQL 發現CPU負載過高(被駭客攻擊),導致discuz X3.5論壇卡死

[複製鏈接]
發表於 昨天 13:03 | 顯示全部樓層 |閱讀模式
Push to Facebook
今日發現論壇卡卡的
於是去看了一下
發現mariadb CPU負載超級高
db1.png

1. 🔍 第一步:抓出到底是哪一條 SQL 語句在搞鬼
這是最關鍵的一步。資料庫 CPU 高,通常是因為某個查詢沒有寫好、或是缺少「索引(Index)」,導致資料庫必須做全表掃描(Full Table Scan)。
請登入你的 MariaDB 資料庫:
  1. mysql -u root -p
複製代碼

登入後,執行以下指令來查看目前正在執行的所有查詢:
  1. SHOW FULL PROCESSLIST;
複製代碼

db.png

PROCESSLIST 暴露出非常經典且嚴重的 Discuz! 論壇被 CC 攻擊(惡意刷流量)或遭遇大量爬蟲 的現象。
導致你 CPU 飆高的核心原因是:pre_common_session 這張資料表被鎖死(Table Lock)了。


調整 AlmaLinux 9 的 MariaDB 記憶體設定
從你的 top 數據來看,這台伺服器的記憶體(RAM)其實滿充足的(MariaDB 佔用不到 1% MEM),但 CPU 卻爆了。這通常意味著 MariaDB 的快取緩衝區(Buffer Pool)可能設得太小,導致它不斷在做硬碟 I/O 與 CPU 計算,而不是直接從記憶體抓資料。
你可以檢查 MariaDB 的設定檔(通常在 /etc/my.cnf 或 /etc/my.cnf.d/mariadb-server.cnf):


打開設定檔:

  1. sudo nano /etc/my.cnf.d/mariadb-server.cnf
複製代碼

在 [mysqld] 區段底下,檢查或加入以下設定(假設你的伺服器總記憶體有 16GB 或以上,可以分配給資料庫多一點快取):ini

  1. [mysqld]
  2. # 讓 InnoDB 引擎可以使用更多記憶體來快取數據和索引(通常設為總記憶體的 50% - 70%)
  3. innodb_buffer_pool_size = 2G  # 請根據你伺服器的實際記憶體大小調整,例如 2G、4G 或 8G

  4. # 開啟慢查詢日誌,以後有慢 SQL 會自動記錄下來
  5. slow_query_log = 1
  6. slow_query_log_file = /var/log/mariadb/slow.log
  7. long_query_time = 2  # 超過 2 秒的查詢就會被記錄
複製代碼
修改後存檔,並重啟 MariaDB:bash
  1. sudo systemctl restart mariadb
複製代碼

將該資料表轉換為 InnoDB 引擎(徹底根治鎖表問題)
為了防止等一下又有流量進來導致重新卡死,建議將這張表改為支援行級鎖(Row-level Lock)的 InnoDB 引擎。這樣多個 IP 同時刪除/寫入時就不會互相排隊卡死。
在 MariaDB 命令列中執行:
  1. ALTER TABLE pre_common_session ENGINE=InnoDB;
複製代碼

這時CPU負載還是無法降下

啟用 AlmaLinux 9 內建防禦(封鎖可疑 IP)
既然我們在之前的 PROCESSLIST 看到大量來自海外的不明 IP(如 45.70.198.97、86.243.81.109),你可以利用系統內建的 firewalld 或 iptables 進行保護。
如果你發現攻擊大部分來自國外,且你的論壇主要服務特定地區(例如台灣/亞洲),最快的方法是封鎖特定異常網段,或是安裝 fail2ban 來自動封鎖在短時間內瘋狂連線的 IP:

安裝 Fail2ban(自動阻擋 CC 攻擊者):
  1. sudo dnf install epel-release -y
  2. sudo dnf install fail2ban -y
複製代碼

重新開機就可以了

如果是CENTOS 8
epel-next旨在針對 RHEL/CentOS Stream「Next」版本測試軟體包,但該特定路徑在 Fedora 的鏡像版本 8 中已被移動或棄用。
您可以透過停用或刪除儲存庫檔案輕鬆解決此問題epel-next,因為您只需要標準的 EPEL 儲存庫fail2ban。
步驟 1:停用或移除epel-next
執行以下命令禁用該epel-next存儲庫:
  1. sudo dnf config-manager --set-disabled epel-next
複製代碼

(或者,如果您想徹底刪除負責此問題的倉庫文件,可以運行sudo rm -f /etc/yum.repos.d/epel-next*:)
步驟 2:清理並重建緩存
現在清除快取並重新生成:
  1. sudo dnf clean allsudo dnf makecache
複製代碼

步驟 3:安裝 Fail2ban
快取更新成功後,您可以繼續安裝fail2ban:
  1. sudo dnf install fail2ban -y
複製代碼
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

Archiver|手機版|小黑屋|TShopping

GMT+8, 2026-11-4 01:20 , Processed in 0.022270 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表