MySQL日常巡檢主要包括監控數據庫運行狀況、備份容災、集群狀況、緊急故障頻率、改進建議等,可使用MySQL巡檢模版進行操作。
MySQL日常巡檢都要檢查哪些項,該怎么巡檢?來,給你一個MySQL巡檢模版。
1. 巡檢目的
? 監控數據庫的當前運行狀況,確保數據庫穩定運行。
? 監控數據庫的備份或容災或集群狀況,減少問題發生時的風險和責任。
? 盡可能減少緊急故障發生頻率。
? 盡早發現系統存在的潛在問題,使可能的故障消除在萌芽狀態。
? 提出相應的合理改進建議。
2. 基本信息
主機名 | IP地址 | 系統版本 | 硬件配置 | MySQL版本 | 工作模式 | 數據庫端口 | 數據庫分配內存 |
---|---|---|---|---|---|---|---|
db1 | xxx.xxx.xxx.xxx | CentOS Linux release 7.9.2009 (Core) | Intel(R) Xeon(R) Gold 6230R CPU @ 2.10GHz,4核,16G內存 | mysqld Ver 5.7.35-38-57 | 主從/主主/PXC/MGR | 3306 | innodb_buffer_pool_size 6G |
db2 | xxx.xxx.xxx.xxx | CentOS Linux release 7.9.2009 (Core) | Intel(R) Xeon(R) Gold 6230R CPU @ 2.10GHz,4核,16G內存 | mysqld Ver 5.7.35-38-57 | 主從/主主/PXC/MGR | 3306 | innodb_buffer_pool_size 6G |
db3 | xxx.xxx.xxx.xxx | CentOS Linux release 7.9.2009 (Core) | Intel(R) Xeon(R) Gold 6230R CPU @ 2.10GHz,4核,16G內存 | mysqld Ver 5.7.35-38-57 | 主從/主主/PXC/MGR | 3306 | innodb_buffer_pool_size 6G |
3. 巡檢項目
3.1 硬件配置信息
檢查項 | 檢查命令 | 巡檢值 |
---|---|---|
主機名 | hostname | |
服務器型號 | dmidecode -t 1 | |
cpu型號 | cat /proc/cpinfo | |
物理內存 | cat /proc/meminfo或free -m | |
ip 地址 | ifconfig -a | |
操作系統 | lsb_release -a 或 cat /proc/version |
3.2 系統資源檢查
檢查項 | 檢查命令 | 參考值 | 檢查結果 |
---|---|---|---|
物理內存使用情況 | vmstat 2 10 | 正常情況,不要用到swap | |
CPU使用情況 | sar -u 2 10 | 越低越好,不超過80% | |
磁盤可使用空間 | df -h | 不超過80% | |
磁盤inode使用率 | df -i | 不超過80% | |
磁盤負載 | iostat -dxm 1 | util應在100%以內(或者瓶頸),%wa很高,可能存在IO瓶頸 | |
系統內核參數設置 | cat /etc/sysctl.conf |
3.3 數據庫巡檢
巡檢項 | 巡檢命令 | 參考值 | 檢查結果 |
---|---|---|---|
mysql進程檢查 | ps -ef|grep mysqld | 進程應存在,進程port以及datadir | |
超大庫檢查 | du -sh 每個數據庫目錄 | ||
數據庫版本 | select version() | ||
數據庫大小 | SELECT table_schema "Database name", sum( table_rows ) "No. of rows", sum( data_length ) / 1024 / 1024 "Size data (MB)", sum( index_length )/ 1024 / 1024 "Size index (MB)" FROM information_schema.TABLES GROUP BY table_schema; | ||
自增ID使用 | SELECT table_schema, table_name, ENGINE, Auto_increment FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN ( "INFORMATION_SCHEMA", "PERFORMANCE_SCHEMA", "MYSQL", "SYS") limit 30; | ||
存儲引擎不是innodb的表 | SELECT TABLE_SCHEMA, TABLE_NAME,ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE != 'innodb' AND TABLE_SCHEMA NOT IN ( "INFORMATION_SCHEMA", "PERFORMANCE_SCHEMA", "MYSQL", "SYS" ); | ||
無主鍵的表 | SELECT t1.table_schema, t1.table_name, t1.table_type FROM information_schema.TABLES t1 LEFT OUTER JOIN information_schema.TABLE_CONSTRAINTS t2 ON t1.table_schema = t2.TABLE_SCHEMA AND t1.table_name = t2.TABLE_NAME AND t2.CONSTRAINT_NAME IN ( 'PRIMARY' ) WHERE t2.table_name IS NULL AND t1.TABLE_SCHEMA NOT IN ( 'information_schema', 'performance_schema', 'test', 'mysql', 'sys' ) AND t1.table_type = "BASE TABLE"; | ||
運行線程狀態查詢 | show full processlist; | 查看當前并發 線程是否狀態正常。檢查state列是否存在wait for xxx lock的狀態,如果有則存在鎖事務; | |
InnoDB死鎖檢查 | show engine innodb status; | 查看LATEST DETECTED DEADLOCK輸出段,若存在,則需要摘取相應的語句。 | |
InnoDB長事務檢查 | show engine innodb status; | 檢查TRANSACTIONS輸出段,看是否存在ACTIVE時間 過長的事務,若存在,則需要關注 | |
指定TCP/IP 連接的偵聽隊列的大小 | show variables like 'back_log%'; | back_log 參數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中。如果系統在一個短時間內有很多連接,則需要增大該參數的值。不同的操作系統在這個隊列。默認值為50。對于Linux系統推薦設置為小于512的整數。 | |
max_allowed_packet包的值 | show variables like 'max_allowed_packet%'; | 客戶端和服務器均有自己的max_allowed_packet變量,如打算處理大的信息包,必須增加客戶端和服務器上的該變量。一般情況下,服務器默認max-allowed-packet為1MB | |
交互式連接超時時間 | show variables like 'interactive_timeout%'; | 交互式連接超時時間(mysql工具、mysqldump等), 參數默認值:28800秒(8小時),建議調小 | |
非交互式連接超時時間 | show variables like 'wait_timeout%'; | 非交互式連接超時時間,默認的連接mysql api程序, jdbc連接數據庫等,參數默認值:28800秒(8小時),建議調小 | |
skip_name_resolve | show variables like 'skip_name_resolve%'; | 使用該參數后可加快內網地址的請求 | |
最大連接數檢查 | show global status like 'max_used_connections'; show global variables like 'max_connections'; | 若max_used_connections逼近max_connections,則需要調大max_connections。max_used_connections / max_connections * 100% (理想值≈ 85%) | |
當前連接數檢查 | show global status like 'Threads_connected' | 應小于max_connections | |
異常連接檢查 | show global status like 'aborted%'; | 檢查Aborted_clients以及Aborted_connects值是否正常 | |
開啟binlog日志 | show variables like 'log_bin%'; | binlog日志開啟,能實時記錄保存DML操作 | |
binlog保留天數 | show variables like 'expire_logs_days%'; | 讓mysql自動清理若干天前的binlog | |
文件打開限制數 | show variables like 'open_files_limit%'; | ||
線程池緩存大小 | show variables like 'thread_cache_size%'; | ||
排序緩沖區大小 | show variables like 'sort_buffer_size%'; | ||
內連接緩沖區大小 | show variables like 'join_buffer_size%'; | ||
InnoDB存儲引擎緩存分配大小 | show global variables like 'innodb_buffer_pool_size'; | 物理內存的 50% - 75% | |
show global variables like 'innodb_io_capacity'; | sata/sas硬盤這個值在200 sas raid10: 2000 ssd硬盤:8000 fusion-io(閃存卡):25,000-50,000 | ||
表緩存檢查 | show global status like '%opened_tables%'; show variables like '%table_open_cache%'; | 若opened_tables過大,則需要調大 table_open_cache值 | |
查詢緩存檢查 | show variables like '%query_cache%' | 一般情況下,需要禁用query_cache。 | |
表緩存檢查 | show global status like '%opened_tables%'; show variables like '%table_open_cache%'; | 若opened_tables過大,則需要調大 table_open_cache值 | |
InnoDB獨立表空間 | show variables like 'innodb_file_per_table%'; | ||
InnoDB打開文件數 | show variables like 'innodb_open_files%'; | ||
InnoDB并發線程 | show variables like 'innodb_thread_concurrency%'; | ||
InnoDB將緩存中的redo日志回寫到日志文件的設置 | show variables like 'innodb_flush_log_at_trx_commit%'; | 建議設為1 | |
show variables like 'sync_binlog%'; | 建議設為1 | ||
InnoDB日志緩沖大小 | show variables like 'innodb_log_buffer_size%'; | ||
InnoDB日志文件大小 | show variables like 'innodb_log_file_size%'; | ||
InnoDB日志文件組 | show variables like 'innodb_log_files_in_group%'; | ||
QPS檢查 | show status like 'queries'; 間隔執行,通過兩次的間隔時間做差值,計算QPS | ||
讀寫比檢查 | show status like 'com_%' | 讀請求是com_select; 寫請求是com_insert; com_update;com_delete 通過統計讀寫的請求數,算出讀寫比例。 | |
InnoDB Buffer Pool檢查 | show status like 'Innodb_buffer_pool_read_requests'; show status like 'Innodb_buffer_pool_reads'; | Innodb_buffer_pool_reads/ Innodb_buffer_pool_read_requests 為緩存未命中率, 若此值過高,則需要調大innodb_buffer_pool_size | |
臨時表檢查 | show global status like '%tmp%'; | 如果Created_tmp_tables, Created_tmp_disk_tables或者 Created_tmp_files較高, 則需要排查慢查詢(子查詢、排序、分組等) | |
存儲引擎 binlog 磁盤使用比例 | Binlog_cache_disk_use / Binlog_cache_use show global status like 'Binlog_cache_disk_use'; show global status like 'Binlog_cache_use'; | 越低越好 | |
存儲引擎磁盤臨時表創建數 | show global status like 'Created_tmp_disk_tables'; | 越低越好 | |
存儲引擎全表掃描比例 | (Handler_read_rnd_next + Handler_read_rnd) / (Handler_read_rnd_next + Handler_read_rnd + Handler_read_first + Handler_read_next + Handler_read_key + Handler_read_prev) | 越低越好 | |
存儲引擎索引使用率 | (Handler_read_first + Handler_read_key + Handler_read_next + Handler_read_prev show global status like 'Handler_read_first'; show global status like 'Handler_read_key'; show global status like 'Handler_read_next'; show global status like 'Handler_read_prev'; | 99% 以上 | |
存儲引擎空余內存大小 | show global status like 'Innodb_buffer_pool_pages_free'; | 引擎緩存的 80% - 90% | |
存儲引擎重做日志等待 | show global status like 'Innodb_log_waits'; show global status like 'Innodb_log_writes'; Innodb_log_waits / Innodb_log_writes | 幾乎為0 | |
存儲引擎表鎖等待比例 | Table_locks_waited / (Table_locks_waited + Table_locks_immediate) show global status like 'Table_locks_waited'; show global status like 'Table_locks_immediate'; | 幾乎為0 | |
存儲引擎線程緩存 | show global status like 'threads_created'; | 1000以下, threads_created/connections為緩存未命中率, 若此值過高,則需要調大thread_cache_size | |
并發線程查詢 | show global status like 'threads_running%'; | 應小于10,過大,說明并發數太多,存在慢語句 | |
備份檢查 | cat /backup/hostname | cut -d . -f 1 /backup/date +%F -d "a day ago" /xtrabackup_time.txt grep completed /backup/$dir_name/backup/$dtime/xtrabackup_log* | 檢查備份成功與否,耗時多久 | |
PXC同步狀態檢查 | show global status where variable_name in ('wsrep_cluster_status','wsrep_local_state','wsrep_local_state_comment','wsrep_connected','wsrep_ready','wsrep_cluster_size','wsrep_desync_count','wsrep_incoming_addresses'); | wsrep_local_state_comment為Synced狀態 wsrep_cluster_status為Primary wsrep_connected為ON wsrep_ready為ON | |
主從復制狀態檢查 | show slave status; | 查看線程是否正常,延遲是否存在 | |
最近7天的error log | grep -i -E 'error' ${errorlog} | grep -E '${errortime}' | 查看error日志是否有報錯 | |
慢查詢日志開啟 | show variables like '%slow%'; | 檢查慢查詢日志是否開啟,若開啟,檢查慢日志文件中的語句。 | |
慢查詢查詢時間 | show variables like 'long_query_time%'; | 慢查詢查詢時間超多久會寫日志 |
4. 總結及建議
總結:
對服務器性能的現狀進行描述
若有隱患可指出
建議:
針對隱患,指出可能的解決辦法
關注我,后臺回復關鍵詞“MySQL巡檢”,可下載該MySQL巡檢模版。
原文來源:https://mp.weixin.qq.com/s/Z33O-B_7qLd_Kgur_WW1xg
來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。
Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利
蘇公網安備32010402000125
蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司
南京思必達教育科技有限公司版權所有 百度統計