mysql數據庫巡檢
- 巡檢步驟
- **一、基礎狀態檢查**
- **二、服務器資源監控**
- **CPU使用**
- **內存使用**
- **磁盤I/O**
- **網絡流量**
- **三、數據庫內部健康度**
- **全局狀態**
- **慢查詢監控**
- **鎖與并發**
- **四、存儲引擎健康**
- **InnoDB引擎**
- **MyISAM引擎**
- **五、日志與備份**
- **六、安全與權限**
- **七、高可用性檢查**
- **主從復制**
- **集群狀態(MySQL Group Replication/InnoDB Cluster)**
- **八、自動化監控建議**
- **九、維護與調優建議**
- **十、附錄:關鍵命令速查**
巡檢步驟
一、基礎狀態檢查
-
服務可用性
?systemctl status mysql
(檢查服務狀態)
?telnet <IP> 3306
/nc -zv <IP> 3306
(測試端口連通性)
?SHOW GLOBAL VARIABLES LIKE 'server_id';
(確認實例唯一性) -
版本與配置
?SELECT VERSION();
(核對MySQL版本)
? 檢查my.cnf
配置文件(內存分配、線程池、字符集等關鍵參數)
二、服務器資源監控
CPU使用
? top
/htop
(觀察MySQL進程CPU占比)
? mpstat 1 5
(1秒間隔采樣5次,分析CPU周期分布)
? 警戒值:持續>70%需排查慢查詢或鎖爭用。
內存使用
? free -m
(查看物理內存)
? ps aux --sort -rss | grep mysql
(MySQL進程內存占用)
? InnoDB緩沖池:SHOW ENGINE INNODB STATUS LIKE 'Innodb_buffer_pool_size';
? 緩沖池使用率>90%時需擴容。
磁盤I/O
? iostat -dx 2
(監控磁盤讀寫延遲與吞吐量)
? iotop -o
(實時查看I/O密集型進程)
? 重點指標:await
(平均等待時間)<20ms為佳。
網絡流量
? netstat -antp | grep ESTABLISHED
(檢查 active 連接)
? ss -s
(統計TCP連接數)
? 風險閾值:TIME_WAIT
連接數>1000可能需調整tcp_fin_timeout
。
三、數據庫內部健康度
全局狀態
? SHOW GLOBAL STATUS;
(關鍵指標解析):
? Threads_connected
(當前連接數 vs max_connections
)
? Queries_per_second
(QPS趨勢)
? Slow_queries
(慢查詢數量)
? SHOW ENGINE INNODB STATUS;
(分析事務、鎖、死鎖):
? 檢查Innodb_row_lock_waits
(行級鎖等待)
? Innodb_trx
(活躍事務數)
慢查詢監控
? 啟用慢查詢日志:slow_query_log=1
+ long_query_time=2
? 分析工具:pt-query-digest /var/log/mysql/slow.log
? 優化方向:索引缺失、臨時表使用、全表掃描。
鎖與并發
? SHOW STATUS LIKE 'innodb_lock_waits';
(鎖等待事件)
? INFORMATION_SCHEMA.INNODB_TRX
(查看長事務):
? trx_state
為RUNNING
且持續時間過長需終止。
四、存儲引擎健康
InnoDB引擎
? 表空間文件檢查:
SELECT file_name, tablespace_name, ROUND((data_length + index_length)/1024/1024, 2) AS size_mb
FROM information_schema.tables
WHERE engine='InnoDB';
? 自適應哈希索引命中率:SHOW ENGINE INNODB STATUS LIKE 'adaptive_hash_index';
? 風險點:ibdata1
文件過大時考慮表空間拆分。
MyISAM引擎
? CHECK TABLE <table_name>
(修復表損壞)
? ANALYZE TABLE
(更新統計信息)
五、日志與備份
-
錯誤日志
? 檢查/var/log/mysql/error.log
中的警告/錯誤(如主鍵沖突、連接拒絕)。 -
二進制日志
?SHOW MASTER STATUS;
(確認binlog寫入位置)
?PURGE BINARY LOGS BEFORE '<date>';
(清理舊日志) -
備份驗證
? 物理備份:xtrabackup --check --backup-dir=/path
? 邏輯備份:mysqlcheck --all-databases --auto-repair
六、安全與權限
? SHOW GRANTS FOR USER '<user>'@'host';
(最小權限原則)
? mysql_secure_installation
(加固配置)
? 授權審計:定期清理過期賬戶。
七、高可用性檢查
主從復制
? SHOW SLAVE STATUS\G
(檢查Slave_IO_Running
和Slave_SQL_Running
)
? 延遲監控:SHOW MASTER STATUS
vs SHOW SLAVE STATUS
的Relay_Master_Log_File
和Exec_Master_Log_Pos
。
? 工具推薦:Percona Toolkit的pt-table-checksum
校驗數據一致性。
集群狀態(MySQL Group Replication/InnoDB Cluster)
? SELECT * FROM mysql.group_replication_members;
(節點健康)
? 集群控制節點(CN)日志:/var/log/mysql/innodb-cluster.log
八、自動化監控建議
-
Prometheus + MySQL Exporter
? 拉取指標:up{job="mysql", instance="localhost"}
(服務狀態)
? 關鍵告警:QPS突增、慢查詢率>5%、鎖等待超時。 -
自定義腳本
? 示例:監控連接數腳本:mysql -e "SHOW STATUS LIKE 'Threads_connected'" | awk '/Threads_connected/ {print $2}'
-
巡檢工具
? Percona Monitoring and Management (PMM)
? Datadog MySQL Integration
九、維護與調優建議
-
定期優化
?OPTIMIZE TABLE
(整理碎片)
?ALTER TABLE ... ENGINE=InnoDB
(遷移MyISAM表) -
參數調優示例
? 根據內存調整InnoDB緩沖池:innodb_buffer_pool_size = (70-80% of total RAM) innodb_log_file_size = 256M
? 限制并發連接:
max_connections = 500 thread_pool_size = 16
-
版本升級
? 評估MySQL 8.0的特性(如窗口函數、資源組管理)對業務的影響。
十、附錄:關鍵命令速查
-- 查看實時線程狀態
SHOW PROCESSLIST;-- 獲取InnoDB指標
SHOW ENGINE INNODB STATUS LIKE 'innodb_';-- 分析慢查詢
SELECT * FROM sys.slow_log;
通過以上清單,可系統性排查MySQL性能瓶頸與潛在風險。建議結合自動化工具實現持續監控,并根據業務增長動態調整資源配置。若遇到復雜問題(如死鎖風暴、內存泄漏),建議啟用innodb_force_recovery
模式并聯系專業支持。