分享一个实用的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
相关文章:
分享一个实用的MySQL一键巡检脚本
今日分享一个实用的MySQL一键巡检脚本,脚本内容还不是很完善,后续会继续进行优化。大家可以先在测试环境执行,确认执行没问题后可以在生产环境进行操作,问题的可以私信我。 MySQL一键巡检脚本的作用主要是帮助数据库管理员快速且…...
【动手学深度学习】卷积神经网络CNN的研究详情
目录 🌊1. 研究目的 🌊2. 研究准备 🌊3. 研究内容 🌍3.1 卷积神经网络 🌍3.2 练习 🌊4. 研究体会 🌊1. 研究目的 特征提取和模式识别:CNN 在计算机视觉领域被广泛用于提取图像…...
2024年数字化经济与智慧金融国际会议(ICDESF 2024)
2024 International Conference on Digital Economy and Smart Finance 【1】大会信息 大会时间:2024-07-22 大会地点:中国成都 截稿时间:2024-07-10(以官网为准) 审稿通知:投稿后2-3日内通知 会议官网:h…...
kafka-消费者服务搭建配置简单消费(SpringBoot整合Kafka)
文章目录 1、使用efak 创建 主题 my_topic1 并建立6个分区并给每个分区建立3个副本2、创建生产者发送消息3、application.yml配置4、创建消费者监听器5、创建SpringBoot启动类6、屏蔽 kafka debug 日志 logback.xml7、引入spring-kafka依赖 1、使用efak 创建 主题 my_topic1 并…...
C++STL---list常见用法
C STL中的list list是C标准模板库(STL)中的一个序列容器,它实现了一个双向链表。与vector和deque相比,list支持快速的任意位置插入和删除操作,但不支持快速随机访问。 基本操作 创建和初始化 #include <list> …...
MQTT.FX的使用
背景 在如今物联网的时代下,诞生了许多的物联网产品,这些产品通过BLE、WIFI、4G等各种各样的通信方式讲数据传输到各种各样的平台。 除了各个公司私有的云平台外,更多的初学者会接触到腾讯云、阿里云之类的平台。设备接入方式也有着多种多样…...
SRS、ZLMediakit音视频流媒体服务器
SRS、ZLMediakit都是做为webrtc的SFU(selective forward unit) WebRTC 开发实践:为什么你需要 SFU 服务器 https://mp.weixin.qq.com/s?__bizMzAxNTc1MjM0Mw&mid2652213442&idx1&sn33f0393a2dbc2b6a39c613bb238ec145&chksm…...
大模型Prompt-Tuning技术进阶
LLM的Prompt-Tuning主流方法 面向超大规模模型的Prompt-Tuning 近两年来,随之Prompt-Tuning技术的发展,有诸多工作发现,对于超过10亿参数量的模型来说,Prompt-Tuning所带来的增益远远高于标准的Fine-tuning,小样本甚至…...
统一响应,自定义校验器,自定义异常,统一异常处理器
文章目录 1.基本准备(构建一个SpringBoot模块)1.在A_universal_solution模块下创建新的子模块unified-processing2.pom.xml引入基本依赖3.编写springboot启动类4.启动测试 2.统一响应处理1.首先定义一个响应枚举类 RespBeanEnum.java 每个枚举对象都有co…...
完整状态码面试背
{"100": "继续","101": "切换协议","102": "处理中","103": "早期提示","200": "成功","201": "已创建","202": "已接受",&qu…...
QT+FFmpeg+Windows开发环境搭建(加薪点)
01、Windows 环境搭建 FFMPEG官网:http://ffmpeg.org/ 02、下载4.2.1版本源码 源码:https://ffmpeg.org/releases/ffmpeg-4.2.1.tar.bz2 03、下载4.2.1编译好的文件 下载已经编译好的FFMPEG)(迅雷下载很快) 网址:https://ffmpeg.zeranoe.com/builds/ 32位下载地址:(迅雷…...
Linux 主机一键安全整改策略
为防止linux主机被恶意攻击,和受到攻击后能更快定位到源头,需要对linux主机做一些参数配置。 比如禁用root的远程登录、用户多次密码验证失败后被锁、禁止系统账号交互式登录等等。 下面是linux主机安全整改的一些简单介绍,最后会通过脚本一…...
Hot100——二叉树
树的定义: public static class TreeNode{int val;TreeNode left;TreeNode right;TreeNode(){};TreeNode(int val){ this.val val; };TreeNode(int val, TreeNode left, TreeNode right){this.val val;this.left left;this.right right;}} 深度优先遍历&#x…...
C++ static_cast、dynamic_cast、const_cast 和 reinterpret_cast 用处和区别
在 C 中,static_cast、dynamic_cast、const_cast 和 reinterpret_cast 是四种类型转换运算符,它们各自有不同的用途和行为: static_cast 用于编译时已知类型的转换,如基本数据类型转换、派生类到基类的转换、指针和引用的转换等…...
三十七、openlayers官网示例Earthquakes Heatmap解析——在地图上加载热力图
官网demo地址: Earthquakes Heatmap 这篇主要介绍了热力图HeatmapLayer HeatmapLayer 是一个用于在地图上显示热力图的图层类型,通常用于表示地理数据中的密度或强度。例如,它可以用来显示地震、人口密度或其他空间数据的热点区域。在这个示…...
curl 92 HTTP/2 stream 5 was not closed cleanly: CANCEL
source ~/.bash_profile flutter clean Command exited with code 128: git fetch --tags Standard error: 错误:RPC 失败。curl 92 HTTP/2 stream 5 was not closed cleanly: CANCEL (err 8) 错误:预期仍然需要 2737 个字节的正文 fetch-pack: unexpec…...
Spring Security 注册过滤器关键点与最佳实践
在 Spring Security 框架中,注册过滤器是实现身份验证和授权的关键组件。正确配置和使用注册过滤器对于确保应用程序的安全性至关重要。以下是一些关于 Spring Security 注册过滤器的注意事项和最佳实践。 过滤器链顺序: 注册过滤器通常位于过滤器链的末…...
力扣2024.考试的最大困扰度
力扣2024.考试的最大困扰度 注意同时>k才处理 class Solution {public:int maxConsecutiveAnswers(string answerKey, int k) {int n answerKey.size(),res0;unordered_map<int,int> cnt;for(int i0,j0;i<n;i){cnt[answerKey[i] - a] ;while(cnt[T - a] > k …...
java配置文件解析yml/xml/properties文件
XML 以mybatis.xml:获取所有Environment中的数据库并连接session为例 import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException;import javax.xml.parsers.DocumentBuilder; impo…...
grpc接口调用
grpc接口调用 准备依赖包clientserver 参考博客: Grpc项目集成到java方式调用实践 gRpc入门和springboot整合 java 中使用grpc java调用grpc服务 准备 因为需要生成代码,所以必备插件 安装后重启 依赖包 <?xml version"1.0" encoding&…...
通信技术振幅键控(ASK)调制与解调硬件实验
一、实验目的 1. 掌握用键控法产生ASK信号的方法; 2. 掌握ASK非相干解调的原理。 二、实验内容 1. 观察ASK已调信号的波形; 2. 观察ASK解调信号的波形。 三、实验器材 1. 双踪示波器; 2. 通信原理实验箱信号源模块、③、④、⑦号模块。…...
自动化办公02 用openpyxl库操作excel.xlsx文件(新版本)
目录 一、文件读操作 二、文件写操作 三、修改单元格样式 openpyxl 是一个处理Excel表格的第三方库。openpyxl 库可以处理Excel2010以后的电子表格格式,包括:xlsx/xlsm/xltx/xltm。 openpyxl教程 一、文件读操作 工作簿(workbook): excel文件 工作表…...
用户反馈解决方案 —— 兔小巢构建反馈功能
目录 01: 前言 02: 用户反馈整体实现方案分析 03: 兔小巢全解析 04: 基于兔小巢实现用户反馈 05: 总结 01: 前言 在前台系统中,用户反馈 功能也是一个非常常见的需求。 通过反馈功能,我们可以知道当前的应用存在的一些不足和用户相应的一些诉求。…...
git 下载失败
-- 错误0 加 sudo git config --global http.postBuffer 524288000 -- 错误 $ git clone https://github.com/espressif/arduino-esp32.git -b release/v2.x arduino Cloning into arduino... remote: Enumerating objects: 53886, done. remote: Counting objects: 100% (1…...
力扣1438.绝对差不超过限制的最长连续子数组
力扣1438.绝对差不超过限制的最长连续子数组 难点:保存数组缩小后的最大最小值 用两个单调队列分别处理最大值和最小值 class Solution {public:int longestSubarray(vector<int>& nums, int limit) {deque<int> quemax,quemin;int n nums.size…...
如何避免Python中默认参数带来的陷阱
Python编程中,我们有时会给函数或方法提供默认参数。然而,这种做法在某些情况下可能会导致意想不到的行为,尤其是当默认参数是可变对象(例如列表、字典或类实例对象)时。本文将通过几个具体的例子来解释这个问题&#…...
代码随想录算法训练营第五十天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III
代码随想录算法训练营第五十天 198.打家劫舍 题目链接:198.打家劫舍 确定dp数组以及下标的含义:dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]。确定递推公式:max(dp[i - 1],…...
VB.net 进行CAD二次开发(二)
利用参考文献2,添加面板 执行treeControl New UCTreeView()时报一个错误: 用户代码未处理 System.ArgumentException HResult-2147024809 Message控件不支持透明的背景色。 SourceSystem.Windows.Forms StackTrace: 在 System.Windows…...
安徽某高校数据挖掘作业6
1 根据附件中year文件,编辑Python程序绘制年销售总额分布条形图和年净利润分布条形图,附Python程序和图像。 2 根据附件中quarter和quarter_b文件,编辑Python程序绘制2018—2020年销售额和净利润折线图,附Python程序和图像。 3 …...
CMakeLists.txt和Package.xml
CMakeLists.txt和Package.xml CMakeLists.txt 总览 CMakeLists.txt 是用于定义如何构建 ROS (Robot Operating System) 包的 CMake 脚本文件。CMake 是一个跨平台的构建系统,用于自动化编译过程。在 ROS 中,CMakeLists.txt 文件指定了如何编译代码和链…...
生成短网址的平台/爱站网seo
CleanMyMac作为知名的Mac清理工具,仅需一键即可快速而安全地清理系统垃圾,释放磁盘空间,因此一直深受Mac用户的喜爱。在不断更新的版本中,CleanMyMac已经不仅仅满足于只做简单的Mac清理工具,而是为Mac用户提供更多的实…...
南海网站制作/关键词搜索指数
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼全国计算机二级考试大题把题目给定程序删除了,正确运行,这样会不会给分?50、请编写函数fun, 函数的功能是: 将M行N列的二维数组中的数据, 按列的顺序依次放到一维数组中。函数fun中给出的语句仅供…...
精品网站设计/海外网络推广方案
转自 (http://www.cnblogs.com/armlinux/archive/2010/08/30/2396931.html)一、开发环境主 机:VMWare--Fedora 9开发板:Mini2440--64MB Nand, Kernel:2.6.30.4编译器:arm-linux-gcc-4.3.2二、背景知识1. LCD工作的硬件…...
网站设计做微信发现界面/网站域名服务器查询
random库是使用随机数的Python标准库 从概率论角度来说,随机数是随机产生的数据(比如抛硬币),但时计算机是不可能产生随机值,真正的随机数也是在特定条件下产生的确定值,只不过这些条件我们没有理解&#x…...
微信手机版网站建设/少儿培训
6月23日,由中国电子技术标准化研究所(以下简称CESI)互联网开放实验室(以下简称ISOL)研究并制定的《SOA标准体系V1.0》(中英文版 本)正式发布。该白皮书将通过其官方网站www.soa-china.org.cn及唯…...
网站建设 成都/免费推广产品的网站
大家都知道,少林寺有七十二项绝技,每个绝技都很厉害。 可以设想某通天彻地的武林盟主克隆了一个少林寺出来,要原始少林寺和克隆少林寺之间来比这七十二项绝技,两家都好不容易网罗了72个练武奇才,同时开始连这七十二…...