操作系统巡检

可以使用zabbix等监控类型的工具 没有的话可以使用sar小工具

1.1cpu监控
  1. 命令
  • sar -u 10 3 (每十秒打印一次 总共打印三次)
  1. 参数
  • %user : 用户模式下消耗的CPU时间的比例;
  • %nice:通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例;
  • %system:系统模式下消耗的CPU时间的比例;
  • %iowait:CPU等待磁盘I/O而导致空闲状态消耗时间的比例;
  • %steal:利用Xen等操作系统虚拟化技术时,等待其他虚拟CPU计算占用的时间比例;
  • %idle:CPU没有等待磁盘I/O等的空闲状态消耗的时间比例;
1.2 内存监控
  1. 命令
  • sar -r
  1. 参数
  • kbmemfree:空闲物理内存量;
  • kbmemused:使用中的物理内存量;
  • %memused:物理内存量使用率;
  • kbbuffers:内核中作为缓冲区使用的物理内存容量;
  • kbcacheed:内核中作为缓存使用的物理内存容量;
  • kbswpfree:交换区的空闲容量;
  • kbswpused:使用中的交换区容量;
1.3 I/O监控
  1. 命令
  • sar -b 10 3
  1. 参数
  • tps: 每秒钟物理设备的 I/O 传输总量
  • rtps: 每秒钟从物理设备读入的数据总量
  • wtps: 每秒钟向物理设备写入的数据总量
  • bread/s: 每秒钟从物理设备读入的数据量,单位为 块/s
  • bwrtn/s: 每秒钟向物理设备写入的数据量,单位为 块/s
1.4系统SWAP监控
  1. 命令
  • sar -w 10 3

参数

MySQL本身巡检

2.1 重点参数
"innodb_buffer_pool_size"
"sync_binlog"
'binlog_format'
'innodb_flush_log_at_trx_commit'
'read_only': 
'log_slave_updates'
'innodb_io_capacity'
'query_cache_type'
'query_cache_size'
'max_connections'
'max_connect_errors'
'server_id'
2.2 MySQL的状态

show global status;

  1. tps(每秒事物处理数)
  • Transactions Per Second(每秒传输的事物处理个数)
  • TPS = (COM_COMMIT + COM_ROLLBACK)/UPTIME
show global status like 'Com_commit';
show global status like 'Com_rollback';
## uptime 单位为秒
show global status like 'uptime';
  1. qps(每秒查询数)
  • 每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准
  • QPS=QUESTIONS/UPTIME
show global status like 'Questions';
show global status like 'uptime';
  1. 检查mysql查询缓慢语句
show variables like '%slow%';
show global status like '%slow%';
##看是否有打开缓慢sql日志,如果有,则检查该日志中的sql,大于5秒的要特别关注。如果没有,则建议打开这个功能
  1. 检查mysql错误日志
## mysql错误日志在安装目录下,命名格式为$hostname.err
## 检查是否存在关键字为err的报错,根据实际报错情况进行处理。
  1. wait事件
Innodb_buffer_pool_wait_free
Innodb_log_waits
  1. MySQL锁监控
    show global status like ‘xxx’;
show global status like 'table_locks%';
## 如果Table_locks_waited等待时间过大(大于1000),则建议优化sql和应用逻辑,减少锁等待

表锁
Table_locks_waited
Table_locks_immediate

行锁
Innodb_row_lock_current_waits,当前等待锁的行锁数量
Innodb_row_lock_time,请求行锁总耗时
Innodb_row_lock_time_avg,请求行锁平均耗时
Innodb_row_lock_time_max,请求行锁最久耗时
Innodb_row_lock_waits,行锁发生次数
  1. 连接数
show global status like 'max_used_connections%';
 show variables like 'max_connections%';
 ## 建议最大连接数参数是当前连接数的2倍以上
  1. Mysql临时表检查
show global status like 'created_tmp%';
## Created_tmp_tables/ Created_tmp_disk_tables这个比值要10倍以上才正常
  1. MySQL数据库磁盘空间使用情况
df -h mysql安装目录
  1. 及所等待
临时表/临时文件
Created_tmp_disk_tables/Created_tmp_files

打开表/文件数
Open_files/Open_table_definitions/Open_tables

并发连接数
Threads_running /Threads_created/Threads_cached
Aborted_clients 
客户端没有正确关闭连接导致客户端终止而中断的连接数

Aborted_connects
试图连接到mysql服务器而失败的连接数

binlog

Binlog_cache_disk_use 
使用临时二进制日志缓冲但超过 binlog_cache_size 值并使用临时文件

Binlog_cache_use
使用临时二进制日志缓冲的事务数量

Binlog_stmt_cache_disk_use
当非事务语句使用二进制日志缓存

Binlog_stmt_cache_use
使用二进制日志缓冲非事务语句数量

链接数

Connections 
试图连接到(不管成不成功)mysql服务器的链接数

临时表

Created_tmp_disk_tables
服务器执行语句时,在硬盘上自动创建的临时表的数量,是指在排序时,内存不够用(tmp_table_size小于需要排序的结果集),所以需要创建基于磁盘的临时表进行排序

Created_tmp_files
服务器执行语句时自动创建的内存中的临时表的数量

索引

Handler_commit 内部交语句

Handler_rollback 内部 rollback语句数量

Handler_read_first  索引第一条记录被读的次数,如果高,则它表明服务器正执行大量全索引扫描

Handler_read_key  根据索引读一行的请求数,如果较高,说明查询和表的索引正确

Handler_read_last 查询读索引最后一个索引键请求数

Handler_read_next 按照索引顺序读下一行的请求数

Handler_read_prev 按照索引顺序读前一行的请求数

Handler_read_rnd 根据固定位置读一行的请求数,如果值较高,说明可能使用了大量需要mysql扫整个表的查询或没有正确使用索引

Handler_read_rnd_next 在数据文件中读下一行的请求数,如果你正进行大量的表扫,该值会较高
Open_table_definitions 
被缓存的.frm文件数量

Opened_tables
已经打开的表的数量,如果较大,table_open_cache值可能太小

Open_tables
当前打开的表的数量
Queries
已经发送给服务器的查询个数
Select_full_join 
没有使用索引的联接的数量,如果该值不为0,你应该仔细检查表的所有

Select_scan
对第一个表进行完全扫的联接的数量

Slow_queries 
查询时间超过long_query_time秒的查询个数

Sort_merge_passes
排序算法已经执行的合并的数量,如果值较大,增加sort_buffer_size大小

线程

Threads_cached 线程缓存内的线程数量

Threads_connected 当前打开的连接数量

Threads_created 创建用来处理连接的线程数

Threads_running 激活的(非睡眠状态)线程数
2.3MySQL主从检测

首先要先配置主从关系 (就是一个主机写入数据 从机同步写入数据 相当于备份 )

可惜我单个计算机

show slave status\G

Slave_IO_Running 和Slave_SQL_Running 两个属性出现都为YES说明没有问题

2.4MySQL备份检查

按照你自己所使用的备份方案进行检查备份 检查本地备份的完整性