MySQL巡检要怎么做,巡检模版给你准备好了

:2024年10月07日 老苏畅谈运维
分享到:

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

[我要纠错]
文:宋聪乔&发表于江苏
关键词: MySQL 日常 巡检 都要 检查

来源:本文内容搜集或转自各大网络平台,并已注明来源、出处,如果转载侵犯您的版权或非授权发布,请联系小编,我们会及时审核处理。
声明:江苏教育黄页对文中观点保持中立,对所包含内容的准确性、可靠性或者完整性不提供任何明示或暗示的保证,不对文章观点负责,仅作分享之用,文章版权及插图属于原作者。

点个赞
0
踩一脚
0

您在阅读:MySQL巡检要怎么做,巡检模版给你准备好了

Copyright©2013-2024 JSedu114 All Rights Reserved. 江苏教育信息综合发布查询平台保留所有权利

苏公网安备32010402000125 苏ICP备14051488号-3技术支持:南京博盛蓝睿网络科技有限公司

南京思必达教育科技有限公司版权所有   百度统计

最热文章
最新文章
  • 卡尔蔡司镜片优惠店,镜片价格低
  • 苹果原装手机壳