萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> 資料庫綜合

MySQL 實戰安全與效能優化七大技巧

1. 強化帳號體系

  • 安裝後立即修改 root 密碼:ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongP@ss!';
  • 修改/刪除匿名用戶 ''@'%':DROP USER ''@'%';
  • 非管理帳號禁止 GRANT OPTION,防止權限蔓延。
  • 限定權限至特定資料庫:GRANT SELECT,INSERT ON appdb.* TO 'app'@'10.0.%.%';

2. 審核敏感權限

SELECT User, Host, 
  Shutdown_priv, Reload_priv, Process_priv, File_priv,
  Super_priv, Create_user_priv
FROM mysql.user
WHERE Shutdown_priv='Y' OR Reload_priv='Y' OR Process_priv='Y' OR File_priv='Y';

僅保留必要帳號擁有上述權限。

3. 應用層隔離資料庫存取

  • PHP/Python/Node 等框架使用連線池,避免頻繁建立連線。
  • 啟用 PDO::ATTR_EMULATE_PREPARES = false 使用真實預處理語句防注入。
  • 若不需資料庫功能,編譯/配置時停用對應擴充(如 --without-mysqli)。

4. 查詢效能優化

  • EXPLAIN 分析執行計畫,關注 type(避免 ALL)、key、rows、Extra(Using temporary/filesort)。
  • 建立覆蓋索引:INCLUDE 不支援,改用複合索引包含 SELECT 欄位。
  • 避免 SELECT *、LIKE '%keyword%' 導致全表掃描。
  • 大表分頁:WHERE id > last_seen_id LIMIT 20(游標分頁)替代 OFFSET。

5. 參數調優關鍵項

參數建議值/方向說明
innodb_buffer_pool_size實體記憶體 60-80%核心快取,資料+索引
innodb_log_file_size1GB-4GB減少 checkpoint 壓力
innodb_flush_log_at_trx_commit1(安全)或 2(效能)2 可能丟失 1 秒交易
max_connections應用峰值 + 緩衝配合 thread_pool/ProxySQL
query_cache_typeOFF (MySQL 8.0 已移除)高併發下鎖爭用嚴重

6. 備份與災難恢復

  • 邏輯備份:mysqldump --single-transaction --routines --triggers --events(小/中型)。
  • 物理備份:Percona XtraBackup(熱備份、大型、支援增量)。
  • 二進位日誌:binlog_format=ROW、expire_logs_days=7,支援 PITR。
  • 定期演練恢復,驗證 RPO/RTO。

7. 監控與告警

  • Prometheus + mysqld_exporter 收集指標。
  • 關鍵指標:Threads_connected、Innodb_row_lock_waits、Slow_queries、Replication_lag(主從)。
  • 慢查詢日誌:long_query_time=1、log_queries_not_using_indexes=ON。

持續應用上述技巧,構建安全、高效、可維運的 MySQL 環境。

copyright © 萬盛學電腦網 all rights reserved