分享一个实用的MySQL一键巡检脚本

今日分享一个实用的MySQL一键巡检脚本,脚本内容还不是很完善,后续会继续进行优化。大家可以先在测试环境执行,确认执行没问题后可以在生产环境进行操作,问题的可以私信我。

MySQL一键巡检脚本的作用主要是帮助数据库管理员快速且系统性地检查和评估MySQL数据库实例的运行状态和健康状况。通过定期执行这样的巡检脚本,可以及时发现潜在问题,优化性能,确保数据库的高可用性和稳定性。以下是MySQL一键巡检脚本的一些主要作用和目标:

1. 性能监测

  • CPU使用率:检查MySQL实例及其主机的CPU使用情况,识别是否存在过高的CPU占用。

  • 内存使用情况:监测内存使用情况,判断是否存在内存泄露或内存不足。

  • I/O性能:检查磁盘I/O性能,评估读写速度和延迟,确保磁盘性能不会成为瓶颈。

2. 配置检查

  • 重要参数检查:审查MySQL配置文件中的关键参数(如max_connections、innodb_buffer_pool_size等),根据最佳实践进行调整。

  • 安全设置:检查用户权限、安全配置和日志等,确保数据库的安全性。

3. 数据库状态

  • 连接数监控:检查当前连接数及最大连接数设置,预防由于连接数过多导致的资源耗尽问题。

  • 线程状态:统计各类线程的状态,识别锁等待、慢查询等问题。

4. 存储和容量监控

  • 表空间使用:统计数据库和表的大小,监测表空间使用情况,规划存储扩容。

  • 数据文件和日志文件:检查数据文件和日志文件的增长情况,确保磁盘空间充足。

5. 日志和慢查询分析

  • 错误日志:分析MySQL错误日志,获取近期发生的错误信息。

  • 慢查询日志:捕获并分析慢查询日志,找出执行时间较长的SQL语句,优化查询性能。

6. 备份和恢复状态

  • 备份状态检查:检查最近的备份时间和备份文件的完整性,确保备份策略有效执行。

  • 恢复测试:定期测试备份文件的恢复情况,验证备份的可用性。

7. 高可用性状态

  • 主从复制状态:检查主从复制的同步状态,确保数据一致性和复制链路畅通。

  • 自动故障切换:检查高可用配置和故障切换机制的正常运作,确保数据库在故障时能够快速恢复。

    #!/bin/bashhost="192.168.59.128"port="3306"userName="root"password="123456"dbname="mysql"base='/usr/local/mysql'##数据文件位置##echo "================= mysql配置信息 ==============================="echo "========= 基本配置信息 ==========="lower_case_table_names="show variables like 'lower_case_table_names';"lower_case_table_names_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${lower_case_table_names}")echo "不区分大小写:" `echo ${lower_case_table_names_val} | cut -d' ' -f4`_port="show variables like 'port';"_port_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${_port}")echo "端口:" `echo ${_port_val} | cut -d' ' -f4`socket="show variables like 'socket';"socket_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${socket}")echo "socket的值:" `echo ${socket_val} | cut -d' ' -f4`skip_name_resolve="show variables like 'skip_name_resolve';"skip_name_resolve_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${skip_name_resolve}")echo "域名解析skip_name_resolve:" `echo ${skip_name_resolve_val} | cut -d' ' -f4`character_set_server="show variables like 'character_set_server';"character_set_server_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${character_set_server}")echo "数据库字符集character_set_server:" `echo ${character_set_server_val} | cut -d' ' -f4`interactive_timeout="show variables like 'interactive_timeout';"interactive_timeout_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${interactive_timeout}")echo "交互式连接超时时间(mysql工具、mysqldump等)interactive_timeout(秒):" `echo ${interactive_timeout_val} | cut -d' ' -f4`wait_timeout="show variables like 'wait_timeout';"wait_timeout_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${wait_timeout}")echo "非交互式连接超时时间,默认的连接mysql api程序,jdbc连接数据库等wait_timeout(秒):" `echo ${wait_timeout_val} | cut -d' ' -f4`query_cache_type="show variables like 'query_cache_type';"query_cache_type_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${query_cache_type}")echo "查询缓存query_cache_type:" `echo ${query_cache_type_val} | cut -d' ' -f4`innodb_version="show variables like 'innodb_version';"innodb_version_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${innodb_version}")echo "数据库版本:" `echo ${innodb_version_val} | cut -d' ' -f4`trx_isolation="show variables like 'tx_isolation';"trx_isolation_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${trx_isolation}")echo "mysql5.6隔离级别trx_isolation:" `echo ${trx_isolation_val} | cut -d' ' -f4`transaction_isolation="show variables like 'transaction_isolation';"transaction_isolation_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${transaction_isolation}")echo "隔离级别transaction_isolation:" `echo ${transaction_isolation_val} | cut -d' ' -f4`datadir="show variables like '%datadir%';"datadir_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${datadir}")echo "mysql 数据文件存放位置:" `echo ${datadir_val} | cut -d' ' -f4`echo "========= 连接数配置信息 ==========="max_connections="show variables like 'max_connections';"max_connections_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${max_connections}")echo "最大连接数(max_connections):" `echo ${max_connections_val} | cut -d' ' -f4`Max_used_connections="show status like 'Max_used_connections';"Max_used_connections_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${Max_used_connections}")echo "当前连接数(Max_used_connections):" `echo ${Max_used_connections_val} | cut -d' ' -f4`max_connect_errors="show variables like 'max_connect_errors';"max_connect_errors_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${max_connect_errors}")echo "最大错误连接数(max_connect_errors):" `echo ${max_connect_errors_val} | cut -d' ' -f4`echo "========= binlog配置信息 ==========="sync_binlog="show variables like 'sync_binlog';"sync_binlog_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${sync_binlog}")echo "sync_binlog(0|1|n,查看是否采用双1模式):" `echo ${sync_binlog_val} | cut -d' ' -f4`binlog_format="show variables like 'binlog_format';"binlog_format_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${binlog_format}")echo "binlog格式:" `echo ${binlog_format_val} | cut -d' ' -f4`log_bin="show variables like 'log-bin';"log_bin_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${log-bin}")echo "binlog文件(log-bin):" `echo ${log_bin_val} | cut -d' ' -f4`expire_logs_days="show variables like 'expire_logs_days';"expire_logs_days_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${expire_logs_days}")echo "binlog文件过期时间:" `echo ${expire_logs_days_val} | cut -d' ' -f4`binlog_cache_size="show variables like 'binlog_cache_size';"binlog_cache_size_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${binlog_cache_size}")echo "binlog_cache_size:" `echo ${binlog_cache_size_val} | cut -d' ' -f4`max_binlog_cache_size="show variables like 'max_binlog_cache_size';"max_binlog_cache_size_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${max_binlog_cache_size}")echo "max_binlog_cache_size:" `echo ${max_binlog_cache_size_val} | cut -d' ' -f4`max_binlog_size="show variables like 'max_binlog_size';"max_binlog_size_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${max_binlog_size}")echo "binlog文件大小:" `echo ${max_binlog_size_val} | cut -d' ' -f4`master_info_repository="show variables like 'master_info_repository';"master_info_repository_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${master_info_repository}")echo "master_info_repository(table|file,建议用table):" `echo ${master_info_repository_val} | cut -d' ' -f4`relay_log_info_repository="show variables like 'relay_log_info_repository';"relay_log_info_repository_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${relay_log_info_repository}")echo "relay_log_info_repository(table|file,建议用table):" `echo ${relay_log_info_repository_val} | cut -d' ' -f4`relay_log_recovery="show variables like 'relay_log_recovery';"relay_log_recovery_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${relay_log_recovery}")echo "relay_log_info_repository(建议开启):" `echo ${relay_log_recovery_val} | cut -d' ' -f4`echo "========= GTID配置信息 ==========="gtid_mode="show variables like 'gtid_mode';"gtid_mode_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${gtid_mode}")echo "是否开启gtid_mode:" `echo ${gtid_mode_val} | cut -d' ' -f4`enforce_gtid_consistency="show variables like 'enforce_gtid_consistency';"enforce_gtid_consistency_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${enforce_gtid_consistency}")echo "enforce_gtid_consistency是否开启:" `echo ${enforce_gtid_consistency_val} | cut -d' ' -f4`echo "(MySQL官方解释说当启用enforce_gtid_consistency功能的时候,MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行,像create table … select 和 create temporary table语句,以及同时更新事务表和非事务表的SQL语句或事务都不允许执行)"log_slave_updates="show variables like 'log_slave_updates';"log_slave_updates_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${log_slave_updates}")echo "级联复制是否开启log_slave_updates:" `echo ${log_slave_updates_val} | cut -d' ' -f4`echo "======== innodb配置信息 ========="innodb_data_home_dir="show variables like 'innodb_data_home_dir';"innodb_data_home_dir_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${innodb_data_home_dir}")echo "innodb_data_home_dir:" `echo ${innodb_data_home_dir_val} | cut -d' ' -f4`innodb_buffer_pool_size="show variables like 'innodb_buffer_pool_size';"innodb_buffer_pool_size_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${innodb_buffer_pool_size}")echo "innodb_buffer_pool_size(不超过内存的75%):" `echo ${innodb_buffer_pool_size_val} | cut -d' ' -f4`innodb_buffer_pool_instances="show variables like 'innodb_buffer_pool_instances';"innodb_buffer_pool_instances_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${innodb_buffer_pool_instances}")echo "innodb_buffer_pool_instances(innodb_buffer_pool_size小于8G实例个数建议为1):" `echo ${innodb_buffer_pool_instances_val} | cut -d' ' -f4`innodb_log_file_size="show variables like 'innodb_log_file_size';"innodb_log_file_size_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${innodb_log_file_size}")echo "redo文件的大小innodb_log_file_size:" `echo ${innodb_log_file_size_val} | cut -d' ' -f4`innodb_log_files_in_group="show variables like 'innodb_log_files_in_group';"innodb_log_files_in_group_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${innodb_log_files_in_group}")echo "redo文件的个数innodb_log_files_in_group:" `echo ${innodb_log_files_in_group_val} | cut -d' ' -f4`innodb_flush_log_at_trx_commit="show variables like 'innodb_flush_log_at_trx_commit';"innodb_flush_log_at_trx_commit_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${innodb_flush_log_at_trx_commit}")echo "innodb_flush_log_at_trx_commit(0|1|2,跟sync_binlog双1):" `echo ${innodb_flush_log_at_trx_commit_val} | cut -d' ' -f4`innodb_io_capacity="show variables like 'innodb_io_capacity';"innodb_io_capacity_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${innodb_io_capacity}")echo "innodb_io_capacity(机械硬盘200,固态2000,闪存20000):" `echo ${innodb_io_capacity_val} | cut -d' ' -f4`transaction_isolation="show variables like 'transaction_isolation';"transaction_isolation_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${transaction_isolation}")echo "隔离级别transaction_isolation:" `echo ${transaction_isolation_val} | cut -d' ' -f4`trx_isolation="show variables like 'tx_isolation';"trx_isolation_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${trx_isolation}")echo "mysql5.6隔离级别trx_isolation:" `echo ${trx_isolation_val} | cut -d' ' -f4`innodb_max_undo_log_size="show variables like 'innodb_max_undo_log_size';"innodb_max_undo_log_size_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${innodb_max_undo_log_size}")echo "undo大小innodb_max_undo_log_size:" `echo ${innodb_max_undo_log_size_val} | cut -d' ' -f4`innodb_undo_tablespaces="show variables like 'innodb_undo_tablespaces';"innodb_undo_tablespaces_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${innodb_max_undo_log_size}")echo "undo个数innodb_undo_tablespaces:" `echo ${innodb_undo_tablespaces_val} | cut -d' ' -f4`echo "========= rep配置信息 ==========="slave_parallel_type="show variables like 'slave-parallel-type';"slave_parallel_type_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${slave_parallel_type}")echo "slave复制模式:" `echo ${slave_parallel_type_val} | cut -d' ' -f4`slave_parallel_workers="show variables like 'slave-parallel-workers';"slave_parallel_workers_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${slave_parallel_workers}")echo "slave并发复制:" `echo ${slave_parallel_workers_val} | cut -d' ' -f4`echo "================= 内存配置情况 ==============================="mem_dis_1="show variables like 'innodb_buffer_pool_size';"mem_dis_1_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_1}")mem_dis_1_val_1=`echo ${mem_dis_1_val} | cut -d' ' -f4`mem_dis_1_val_2=`echo | awk "{print $mem_dis_1_val_1/1024/1024}"`echo "InnoDB 数据和索引缓存:" $mem_dis_1_val_1mem_dis_2="show variables like 'innodb_log_buffer_size';"mem_dis_2_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_2}")mem_dis_2_val_1=`echo ${mem_dis_2_val} | cut -d' ' -f4`mem_dis_2_val_2=`echo | awk "{print $mem_dis_2_val_1/1024/1024}"`echo "InnoDB 日志缓冲区:" $mem_dis_2_val_1mem_dis_3="show variables like 'binlog_cache_size';"mem_dis_3_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_3}")mem_dis_3_val_1=`echo ${mem_dis_3_val} | cut -d' ' -f4`mem_dis_3_val_2=`echo | awk "{print $mem_dis_3_val_1/1024/1024}"`echo "二进制日志缓冲区:" $mem_dis_3_val_1mem_dis_4="show variables like 'thread_cache_size';"mem_dis_4_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_4}")echo "连接线程缓存:" `echo $mem_dis_4_val | cut -d' ' -f4`mem_dis_5="show variables like 'query_cache_size';"mem_dis_5_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_5}")echo "查询缓存:" `echo ${mem_dis_5_val} | cut -d' ' -f4`mem_dis_6="show variables like 'table_open_cache';"mem_dis_6_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_6}")echo "表缓存:" `echo ${mem_dis_6_val} | cut -d' ' -f4`mem_dis_7="show variables like 'table_definition_cache';"mem_dis_7_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_7}")echo "表定义缓存:" `echo ${mem_dis_7_val} | cut -d' ' -f4`mem_dis_8="show variables like 'max_connections';"mem_dis_8_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_8}")echo "最大线程数:" `echo ${mem_dis_8_val} | cut -d' ' -f4`mem_dis_9="show variables like 'thread_stack';"mem_dis_9_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_9}")echo "线程栈信息使用内存:" `echo ${mem_dis_9_val} | cut -d' ' -f4`mem_dis_10="show variables like 'sort_buffer_size';"mem_dis_10_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_10}")echo "排序使用内存:" `echo ${mem_dis_10_val} | cut -d' ' -f4`mem_dis_11="show variables like 'join_buffer_size';"mem_dis_11_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_11}")echo "Join操作使用内存:" `echo ${mem_dis_11_val} | cut -d' ' -f4`mem_dis_12="show variables like 'read_buffer_size';"mem_dis_12_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_12}")echo "顺序读取数据缓冲区使用内存:" `echo ${mem_dis_12_val} | cut -d' ' -f4`mem_dis_13="show variables like 'read_rnd_buffer_size';"mem_dis_13_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_13}")echo "随机读取数据缓冲区使用内存:" `echo ${mem_dis_13_val} | cut -d' ' -f4`mem_dis_14="show variables like 'tmp_table_size';"mem_dis_14_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${mem_dis_14}")echo "临时表使用内存:" `echo ${mem_dis_14_val} | cut -d' ' -f4`echo "================= QPS ==============================="Questions1="show global status like 'Questions';"Questions1_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${Questions1}")sleep 1Questions2="show global status like 'Questions';"Questions2_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${Questions2}")echo "QPS:$((`echo ${Questions2_val} | cut -d' ' -f4`-`echo ${Questions1_val} | cut -d' ' -f4`))"echo "================= TPS ==============================="Com_commit="show  global status like 'Com_commit';"Com_commit_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${Com_commit}")Com_rollback="show global status like 'Com_rollback';"Com_rollback_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${Com_rollback}")echo "TPS:" $((`echo ${Com_commit_val} | cut -d' ' -f4` + `echo ${Com_rollback_val} | cut -d' ' -f4`))##缓存命中率##echo "================= 缓存命中情况 ==============================="cache_hits="show global status like 'QCache_hits';"hits=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${cache_hits}")hits_val=`echo ${hits} | cut -d' ' -f4`echo "缓存命中次数:" ${hits_val}cache_not_hits="show global status like  'Qcache_inserts';"not_hits=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${cache_not_hits}")not_hits_val=`echo ${not_hits} | cut -d' ' -f4`echo "缓存未命中次数:" ${not_hits_val}cache_hits_rate_1=$(($hits_val - $not_hits_val))cache_hits_rate_2=`echo | awk "{print $cache_hits_rate_1/$hits_val * 100}"`echo "缓存命中率:" ${cache_hits_rate_2} "%"echo "================= 主从复制 ============================="slave_parallel_type="show variables like 'slave-parallel-type';"slave_parallel_type_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${slave_parallel_type}")echo "slave复制模式:" `echo ${slave_parallel_type_val} | cut -d' ' -f4`slave_parallel_workers="show variables like 'slave-parallel-workers';"slave_parallel_workers_val=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${slave_parallel_workers}")echo "slave并发复制:" `echo ${slave_parallel_workers_val} | cut -d' ' -f4`${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "show master status\G;"${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "show slave status\G;"echo "================= 半同步复制 ==============================="${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "show variables like '%semi%';"echo "================= 慢查询 ==============================="slow_query_log_file=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "show variables like 'slow_query_log_file';"|grep 'slow'|awk '{print $2}')slow_query_log=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "show variables like 'slow_query_log';"|grep 'slow'|awk '{print $2}')long_query_time=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "show variables like 'long_query_time';"|grep 'long_query_time'|awk '{print $2}')log_queries_not_using_indexes=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "show variables like 'log_queries_not_using_indexes';"|grep 'log_queries_not_using_indexes'|awk '{print $2}')if [ ${slow_query_log} == "ON" ];thenecho "慢查询状态(slow_query_log):${slow_query_log} ;long_query_time(s) : ${long_query_time};log_queries_not_using_indexes: ${log_queries_not_using_indexes};慢查询top10,如下:"mysqldumpslow -s c -t 10 ${slow_query_log_file};elseecho "慢查询状态(slow_query_log):${slow_query_log} ,未开启慢查询。"fi##等待事件##echo "================= 数据库大小 ==============================="${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "SELECTtable_schema,sum( data_length )/ 1024 / 1024 / 1024 AS data_length,sum( index_length )/ 1024 / 1024 / 1024 AS index_length,sum( data_length + index_length )/ 1024 / 1024 / 1024 AS sum_data_indexFROMinformation_schema.TABLESWHEREtable_schema NOT IN ( 'mysql', 'information_schema', 'performance_schema', 'sys' )GROUP BYtable_schema;"echo "================= 数据碎片 ==============================="${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "SELECTTABLE_SCHEMA,TABLE_NAME,ENGINE,concat( splinter, 'G' ) '碎片(G)'FROM(SELECTTABLE_SCHEMA,TABLE_NAME,ENGINE,ROUND(( DATA_LENGTH + INDEX_LENGTH - TABLE_ROWS * AVG_ROW_LENGTH )/ 1024 / 1024 / 1024 ) splinterFROMinformation_schema.TABLESWHERETABLE_TYPE = 'BASE TABLE') aWHEREsplinter > 1ORDER BYsplinter DESC;"echo "================= 锁查询 ==============================="${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "SELECTr.trx_isolation_level,r.trx_id waiting_trx_id,r.trx_mysql_thread_id waiting_trx_thread,r.trx_state waiting_trx_state,lr.lock_mode waiting_trx_lock_mode,lr.lock_type waiting_trx_lock_type,lr.lock_table waiting_trx_lock_table,lr.lock_index waiting_trx_lock_index,r.trx_query waiting_trx_query,b.trx_id blocking_trx_id,b.trx_mysql_thread_id blocking_trx_thread,b.trx_state blocking_trx_state,lb.lock_mode blocking_trx_lock_mode,lb.lock_type blocking_trx_lock_type,lb.lock_table blocking_trx_lock_table,lb.lock_index blocking_trx_lock_index,b.trx_query blocking_queryFROMinformation_schema.innodb_lock_waits wINNER JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_idINNER JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_idINNER JOIN information_schema.innodb_locks lb ON lb.lock_trx_id = w.blocking_trx_idINNER JOIN information_schema.innodb_locks lr ON lr.lock_trx_id = w.requesting_trx_id \G;"echo "================= 等待事件 ==============================="top_event_10="select event_name, count_star, sum_timer_wait from performance_schema.events_waits_summary_global_by_event_name where count_star > 0 order by sum_timer_wait desc limit 10;"echo "等待事件 TOP 10:"${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "${top_event_10}"echo "==================最近一周的错误日志 =========================="_time=$(date -d '6 days ago' +%Y-%m-%d)\|$(date -d '5 days ago' +%Y-%m-%d)\|$(date -d '4 days ago' +%Y-%m-%d)\|$(date -d '3 days ago' +%Y-%m-%d)\|$(date -d '2 days ago' +%Y-%m-%d)\|$(date -d '1 days ago' +%Y-%m-%d)\|$(date -d '0 days ago' +%Y-%m-%d)log_error=$(${base}/bin/mysql -h${host} -u${userName} -p${password} ${dbname} -P${port} -e "show variables like 'log_error';"|grep  'log_error'|awk '{print $2}')#grep -i -E 'error' /home/logs/mysql/mysqld.err* | grep -E '2019-03-28|2019-06-14'grep -i -E "error" ${log_error}| grep -E "${_time}"

    该脚本可以放在任意位置,然后赋予X执行权限进行一键巡检,同时也可以设置定时任务,定时进行巡检并输出相关报告。

    ./mysql_check.sh>>/data/check.txt 2>&1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/19686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redux状态管理用法详解

在React中使用redux,官方要求安装俩个其他插件 - Redux Toolkit 和 react-redux 1.ReduxToolkit (RTK) 官方推荐编写 Redux 逻辑的方式,是一套工具的集合集,简化书写方式 简化 store 的配置方式; 内置 immer 支持…

dubbo复习:(19)dubbo 和spring整合(老古董)

一、服务端依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM…

华为SSH实验

华为SSH实验 实验拓扑&#xff1a; 实验要求&#xff1a;从SSH客户端AR1采用stelnet方式登录到SSH 服务器端。 实验步骤&#xff1a; 1.完成基本配置&#xff08;略&#xff09; sys Enter system view, return user view with CtrlZ. [AR1]sys CLIENT [CLIENT]INT g0/0/0 [C…

ECMAScript 详解:深入理解 JavaScript 的核心标准

ECMAScript 详解&#xff1a;深入理解 JavaScript 的核心标准 如果你是一名前端开发者&#xff0c;或者只是对编程感兴趣&#xff0c;那么你一定听说过 ECMAScript。它是 JavaScript 的标准&#xff0c;是现代 web 开发的基础。那么&#xff0c;究竟什么是 ECMAScript&#xf…

智能网联汽车翻译

智能网联汽车 自动驾驶功能场地试验方法及要求 2022-10-20 10:13:01 ChinaAutoRegs|GB/T 41798-2022英文版翻译 智能网联汽车 自动驾驶功能场地试验方法及要求 Intelligent and connected vehicles——Field testing methods and requirements for automated driving function…

打造你的首个QT 5计算器应用

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;QT 5的力量与我们的计算器 二、QT 5基础&#xff1a;理解UI设计与文件…

Java多线程(04)—— 保证线程安全的方法与线程安全的集合类

一、CAS 与原子类 1. CAS CAS&#xff08;compare and swap&#xff09;&#xff0c;是一条 cpu 指令&#xff0c;其含义为&#xff1a;CAS(M, A, B); M 表示内存&#xff0c;A 和 B 分别表示一个寄存器&#xff1b;如果 M 的值和 A 的值相同&#xff0c;则把 M 和 B 的值交…

数字IC基础:主要的FPGA厂商

相关阅读 数字IC基础https://blog.csdn.net/weixin_45791458/category_12365795.html?spm1001.2014.3001.5482 Xilinx&#xff08;现已被AMD收购&#xff09; Xilinx, 成立于1984年&#xff0c;是FPGA&#xff08;现场可编程门阵列&#xff09;技术的创始者和市场领导者。该公…

dmdts连接kingbase8报错

dmdts连接kingbase报错 环境介绍1 人大金仓jdbc配置2 dmdts 人大金仓jdbc默认配置3 dmdts 修改jdbc配置4 达梦产品学习使用列表 环境介绍 dts版本 使用dmdts连接kingbase金仓数据库报错 无效的URL 对比jdbc连接串,修改配置解决 1 人大金仓jdbc配置 配置URL模版信息等 类名…

民国漫画杂志《时代漫画》第36期.PDF

时代漫画36.PDF: https://url03.ctfile.com/f/1779803-1248636233-8a4a9d?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

【高校科研前沿】南大王栋、吴吉春教授团队在深度学习助力水库生态调度和优化管理方面取得新进展,成果以博士生邱如健为一作发表于水环境领域国际权威期刊

1.文章简介 论文名称&#xff1a;Integration of deep learning and improved multi-objective algorithm to optimize reservoir operation for balancing human and downstream ecological needs 第一作者及单位&#xff1a;邱如健&#xff08;博士生 南京大学&#xff09;…

Linux自动挂载服务autofs讲解

1.产生原因 2.配置文件讲解 总结&#xff1a;配置客户端&#xff0c;先构思好要挂载的目录如&#xff1a;/abc/cb 然后在autofs.master中编辑&#xff1a; /abc&#xff08;要挂载的主目录&#xff09; /etc/qwe&#xff08;在这个文件里去找要挂载的副目录&#xff0c;这个名…

MySQL基础索引知识【索引创建删除 | MyISAM InnoDB引擎原理认识】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;MySQL之旅_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;索引用…

JMeter源码解析之NewDriver.java(二)完结

JMeter源码解析之NewDriver.java&#xff08;二&#xff09;完结 NewDriver.java主要作用 JMeter程序入口&#xff1a;JMeter的主类-设置初始类路径和加载程序。 文件路径 路径地址&#xff1a;…\apache-jmeter-5.1\src\core\org\apache\jmeter\NewDriver.java 关于Main内…

8-异常与错误

8-异常与错误 1、简介2、异常处理2.1 抛出异常2.2 捕获异常2.3 匹配顺序 3、异常说明4、构造函数中的异常5、析构函数中的异常6、标准库异常 1、简介 在程序编码过程中难免会出现错误&#xff0c;主要有&#xff1a;语法错误、逻辑错误、功能错误等&#xff0c;当我们面对以上…

密闭空间作业应如何做好安全防护?

在现代工业与日常工作中&#xff0c;密闭空间作业已逐渐成为许多行业不可或缺的一部分。然而&#xff0c;这些看似寻常的空间却隐藏着诸多不为人知的风险。从窒息性气体到易燃易爆物质&#xff0c;从物理性危险到心理压力&#xff0c;每一项都足以威胁到作业人员的生命安全。因…

Llama模型家族之RLAIF 基于 AI 反馈的强化学习(六) RLAIF 代码实战

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;一&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;二&#xff09; 基于 LlaMA 3 LangGraph 在windows本地部署大模型 &#xff08;三&#xff09; 基于 LlaMA…

主键UUID和数据库自增ID怎么选择?

一、前言 最近在建表选择主键的时候有些纠结&#xff0c;我们经常使用的主键有两种UUID和自增ID&#xff0c;不知道选哪一种好。之前一直没有总结过这两种主键的区别&#xff0c;于是今天去总结了一下这两种主键的区别、优缺点&#xff0c;以便为我们以后主键选择提供一些参考。…

字符串匹配算法(三)Trie树算法

文章目录 Trie树的简介Trie树定义Trie树的实现 代码实现 Trie树的简介 Trie树定义 Trid树&#xff0c;也叫”字典树“。它是一个树形结构。专门处理字符串匹配的数据结构&#xff0c;用来解决字符串集中快速查找某个字符串的问题。 Trie 树的本质&#xff0c;就是利用字符串之…

LeetCode503:下一个更大元素Ⅱ

题目描述 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更大的数&#xff0c;这…