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-2024 JSedu114 All Rights Reserved. 江苏教育信息综合发布查询平台保留所有权利
苏公网安备32010402000125 苏ICP备14051488号-3技术支持:南京博盛蓝睿网络科技有限公司
南京思必达教育科技有限公司版权所有 百度统计