mysql自动巡检监控脚本

#! /bin/bash

### DATE: 2023/03/03

# 数据库服务器 性能巡检报告

source /etc/profile

source /root/.bash_profile

#################################

# #

# 全局配置 #

# #

#################################

# 巡检日期

CheckDate=`date +"%Y-%m-%d"`

#mysql 命令前缀

db_sql="mysql --defaults-extra-file=password.txt"

# #

# 巡检内容 #

# #

#################################

# 格式化标题函数

function f_format(){

echo ""

echo "-----------------------------------------------"

echo ""

echo -e "# \e[36m$1\e[0m "

echo ""

}

f_format "01、CPU空闲率、系统负载"

uptime

f_format "02、可用内存"

free -h

f_format "03、磁盘空间使用率"

df -h -x tmpfs

f_format "04、磁盘IO性能"

iostat -c

f_format "05、数据库启动状态"

pid_count=$(ps -ef | grep mysqld|grep -v "grep"|wc -l)

if [[ $pid_count > 0 ]];then

echo "数据库进程:alive"

else

echo "数据库进程:off"

exit 99

fi

echo -n "数据库uptime(秒):"

$db_sql -e "show global status where variable_name in ('Uptime')"|awk 'NR>1{print $2}'

f_format "05、数据库基本信息"

echo "PID文件: $($db_sql -e "show global variables where variable_name in ('pid_file')"|awk 'NR>1{print $2}')"

echo "SOCKET文件: $($db_sql -e "show global variables where variable_name in ('socket')"|awk 'NR>1{print $2}')"

echo "BIN日志文件: $($db_sql -e "show global variables where variable_name in ('log_bin_index')"|awk 'NR>1{print $2}')"

echo "SLOW日志文件: $($db_sql -e "show global variables where variable_name in ('slow_query_log_file')"|awk 'NR>1{print $2}')"

echo "ERROR日志文件: $($db_sql -e "show global variables where variable_name in ('log_error')"|awk 'NR>1{print $2}')"

echo "主机名: $($db_sql -e "show global variables where variable_name in ('hostname')"|awk 'NR>1{print $2}')"

echo "数据库版本: $($db_sql -e "show global variables where variable_name in ('version')"|awk 'NR>1{print $2}')"

echo "SERVEID: $($db_sql -e "show global variables where variable_name in ('server_id')"|awk 'NR>1{print $2}')"

echo "默认字符集: $($db_sql -e "show global variables where variable_name in ('character_set_server')"|awk 'NR>1{print $2}')"

echo "默认存储引擎: $($db_sql -e "show global variables where variable_name in ('default_storage_engine')"|awk 'NR>1{print $2}')"

echo "是否开启自动提交: $($db_sql -e "show global variables where variable_name in ('autocommit')"|awk 'NR>1{print $2}')"

echo "是否开启事件调度器: $($db_sql -e "show global variables where variable_name in ('event_scheduler')"|awk 'NR>1{print $2}')"

echo "是否开启查询缓冲功能: $($db_sql -e "show global variables where variable_name in ('have_query_cache')"|awk 'NR>1{print $2}')"

echo "BIN日志格式: $($db_sql -e "show global variables where variable_name in ('binlog_format')"|awk 'NR>1{print $2}')"

echo "BIN日志保留时长(天): $($db_sql -e "show global variables where variable_name in ('expire_logs_days')"|awk 'NR>1{print $2}')"

echo "慢查询开启状态: $($db_sql -e "show global variables where variable_name in ('slow_query_log')"|awk 'NR>1{print $2}')"

echo "写入慢查询日志时间限制(秒): $($db_sql -e "show global variables where variable_name in ('long_query_time')"|awk 'NR>1{print $2}')"

echo "事务隔离级别: $($db_sql -e "show global variables where variable_name in ('transaction_isolation')"|awk 'NR>1{print $2}')"

echo "线程运行方式: $($db_sql -e "show global variables where variable_name in ('thread_handling')"|awk 'NR>1{print $2}')"

echo "打开文件数限制: $($db_sql -e "show global variables where variable_name in ('open_files_limit')"|awk 'NR>1{print $2}')"

echo "INNODB表创建方式(innodb_file_per_table): $($db_sql -e "show global variables where variable_name in ('innodb_file_per_table')"|awk 'NR>1{print $2}')"

echo "INNODB打开表空间文件数限制: $($db_sql -e "show global variables where variable_name in ('innodb_open_files')"|awk 'NR>1{print $2}')"

echo "表名是否区分大小写: $($db_sql -e "show global variables where variable_name in ('lower_case_table_names')"|awk 'NR>1{print $2}')"

echo "INNODB页大小: $($db_sql -e "show global variables where variable_name in ('innodb_page_size')"|awk 'NR>1{print $2}')"

echo "是否开启双写功能: $($db_sql -e "show global variables where variable_name in ('innodb_doublewrite')"|awk 'NR>1{print $2}')"

echo "是否启用redo专用线程: $($db_sql -e "show global variables where variable_name in ('innodb_log_writer_threads')"|awk 'NR>1{print $2}')"

echo "INNODB读线程数: $($db_sql -e "show global variables where variable_name in ('innodb_read_io_threads')"|awk 'NR>1{print $2}')"

echo "INNODB写线程数: $($db_sql -e "show global variables where variable_name in ('innodb_write_io_threads')"|awk 'NR>1{print $2}')"

echo "INNODB是否启用本地AIO: $($db_sql -e "show global variables where variable_name in ('innodb_use_native_aio')"|awk 'NR>1{print $2}')"

f_format "06、数据库监听状态"

db_port=$($db_sql -e "show global variables where variable_name in ('port')"|awk 'NR>1{print $2}')

echo "数据库监听端口:$db_port"

echo "数据库端口连接状态:"

netstat -ant|grep -w "3306"|awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

f_format "07、数据库大小"

DataDir=$($db_sql -e "show global variables where variable_name in ('innodb_data_home_dir')"|awk 'NR>1{print $2}')

echo "数据目录:$DataDir"

du -sh $DataDir

f_format "08、数据库连接信息"

echo -n "数据库设置最大连接数:"

$db_sql -e "show global variables where variable_name in ('max_connections')"|awk 'NR>1{print $2}'

echo -n "数据库连接超时时间(秒):"

$db_sql -e "show global variables where variable_name in ('connect_timeout')"|awk 'NR>1{print $2}'

echo -n "数据库峰值连接数:"

$db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Max_used_connections'"|awk 'NR>1{print $2}'

echo -n "数据库当前打开连接数:"

$db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Threads_connected'"|awk 'NR>1{print $2}'

echo -n "拒绝的连接数(内部错误):"

$db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Connection_errors_internal'"|awk 'NR>1{print $2}'

echo -n "拒绝的连接数(超出最大连接数):"

$db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Connection_errors_max_connections'"|awk 'NR>1{print $2}'

f_format "09、数据库运行状态信息"

Uptime=$($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Uptime'"|awk 'NR>1{print $2}')

Questions=$($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Questions'"|awk 'NR>1{print $2}')

Com_commit=$($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Com_commit'"|awk 'NR>1{print $2}')

Com_rollback=$($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Com_rollback'"|awk 'NR>1{print $2}')

Connected=$($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Connections'"|awk 'NR>1{print $2}')

Created_th=$($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Threads_created'"|awk 'NR>1{print $2}')

Total_buff=$($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Innodb_buffer_pool_pages_total'"|awk 'NR>1{print $2}')

Free_buff=$($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Innodb_buffer_pool_pages_free'"|awk 'NR>1{print $2}')

mem_read=$($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Innodb_buffer_pool_read_requests'"|awk 'NR>1{print $2}')

disk_read=$($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Innodb_buffer_pool_reads'"|awk 'NR>1{print $2}')

other_read=$($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Innodb_buffer_pool_read_ahead'"|awk 'NR>1{print $2}')

disk_tmp=$($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Created_tmp_disk_tables'"|awk 'NR>1{print $2}')

total_tmp=$($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Created_tmp_tables'"|awk 'NR>1{print $2}')

echo "平均每秒查询量(QPS):$(( $Questions / $Uptime))"

echo "平均每秒事务量(TPS):$((( $Com_commit + $Com_rollback ) /$Uptime))"

echo "发送数据量(Bytes): $($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Bytes_sent'"|awk 'NR>1{print $2}')"

echo "接收数据量(Bytes): $($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Bytes_received'"|awk 'NR>1{print $2}')"

echo "慢查询数: $($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Slow_queries'"|awk 'NR>1{print $2}')"

echo "打开文件数: $($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Open_files'"|awk 'NR>1{print $2}')"

echo -n "线程缓存命中率(target 100%): "

echo $Total_buff $Created_th|awk '{printf("%4.2f%\n", (1-$2/$1)*100)}'

echo -n "INNODB缓存空闲率: "

echo $Total_buff $Free_buff|awk '{printf("%4.2f%\n", ($2/$1)*100)}'

echo -n "INNODB缓存命中率: "

echo $mem_read $disk_read $other_read|awk '{printf("%.2f%\n", $1/($1+$2+$3)*100)}'

echo -n "临时表磁盘创建率: "

echo $disk_tmp $total_tmp|awk '{printf("%.2f%\n", ($1/$2)*100)}'

echo "等待LOG刷出次数: $($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Innodb_log_waits'"|awk 'NR>1{print $2}')"

echo "行锁等待次数: $($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Innodb_row_lock_waits'"|awk 'NR>1{print $2}')"

echo "行锁等待平均时长: $($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Innodb_row_lock_time_avg'"|awk 'NR>1{print $2}')"

echo "行锁等待最长时间: $($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Innodb_row_lock_time_max'"|awk 'NR>1{print $2}')"

echo "正在等待行锁的数量: $($db_sql -e "SHOW GLOBAL STATUS WHERE variable_name='Innodb_row_lock_current_waits'"|awk 'NR>1{print $2}')"

f_format "10、数据库用户信息"

$db_sql -e "SELECT user , host, account_locked, password_expired FROM mysql.user"

f_format "11、数据库主从同步状态"

echo "MASTER状态:"

$db_sql -e "SHOW master status \G"

echo ""

echo "SLAVE状态:"

$db_sql -e "SHOW slave status \G"

f_format "12、事务和锁信息"

SQL="SELECT

r.trx_id waiting_trx_id,

r.trx_mysql_thread_id waiting_thread,

r.trx_query waiting_query,

b.trx_id blocking_trx_id,

b.trx_mysql_thread_id blocking_thread,

b.trx_query blocking_query

FROM sys.innodb_lock_waits w

INNER JOIN information_schema.innodb_trx b

ON b.trx_id = w.blocking_trx_id

INNER JOIN information_schema.innodb_trx r

ON r.trx_id = w.waiting_trx_id;"

$db_sql -e "$SQL"

echo ""

f_format "12、INNODB整体运行状态"

echo ""

$db_sql -e "show engine innodb status \G"

f_format "THE END ! "

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: MySQL巡检脚本是一种通过Shell脚本编写的工具,用于检查MySQL数据库的运行状态和配置是否符合预期,并提供相应的报告和建议。 首先,在巡检脚本中,我们需要连接到MySQL数据库,可以使用MySQL的命令行工具如mysql或者mysqldump,通过传入用户名、密码和数据库的连接信息来实现连接。 接下来,我们可以通过查询系统表如information_schema或者执行一些特定的命令,获取MySQL数据库的相关信息。这些信息包括数据库的版本、状态、运行时间、连接数、存储引擎使用情况等。 通过分析这些信息,我们可以检查数据库的性能瓶颈,如查询慢、锁争用、IO负载等。我们可以使用一些性能分析工具如EXPLAIN、SHOW STATUS、SHOW PROCESSLIST等来获取更详细的性能数据。 此外,巡检脚本还可以检查数据库的配置参数是否合理。我们可以通过查询或者读取my.cnf配置文件,来验证配置参数如缓冲区大小、并发连接数、日志记录等是否符合最佳实践。 除了性能和配置方面的检查,巡检脚本还可以执行一些数据完整性和一致性的检查。例如,检查表的行数是否正确、索引是否存在冗余、约束是否被满足等。 最后,在执行完检查逻辑后,巡检脚本可以生成一份报告。报告中可以包含检查项的执行结果、问题的详细描述和修复建议。可以将报告输出到日志文件或者通过邮件发送给管理员。 总之,MySQL巡检脚本是一种实用的工具,可以帮助管理员自动化检查MySQL数据库的运行状态和配置,减少人工巡检的工作量,并提供及时的问题发现和解决。 ### 回答2: MySQL巡检脚本是一种在Linux或Unix系统上使用的Shell脚本,用于自动执行一系列与MySQL数据库相关的巡检任务和诊断操作。这些巡检任务包括检查数据库的运行状态、性能指标、连接数、数据完整性等,并且可以根据需要进行灵活的配置和定制。 MySQL巡检脚本的主要功能包括以下几个方面: 1. 数据库连接和运行状态检查:脚本可以检查数据库是否正常运行、是否能够连接,并在数据库出现异常时及时报警。 2. 性能指标监测:可以定期检查数据库的性能指标,如CPU利用率、内存利用率、磁盘IO等,以便及时发现潜在的性能问题并采取相应的优化措施。 3. 数据库参数及配置检查:脚本可以检查数据库的参数设置是否合理,比如是否开启了慢查询日志、是否启用了查询缓存等,以保证数据库的最佳性能。 4. 数据完整性检查:可以定期检查数据库中的表结构、索引、外键约束等是否完整和一致,以避免数据损坏和不一致的情况发生。 5. 数据库备份和恢复检查:脚本可以检查数据库的备份策略是否完善,并定期执行恢复测试,以确保备份数据的可用性和完整性。 通过使用MySQL巡检脚本,可以简化数据库巡检监控的工作,提高数据库的可用性和性能,并且能够及时发现和解决潜在的问题,保证数据库系统的稳定运行。 ### 回答3: MySQL巡检脚本Shell是一种自动脚本,用于监控和检查MySQL数据库的运行状况。它可以帮助数据库管理员快速发现和解决潜在的问题,以确保数据库的可用性和性能。 MySQL巡检脚本Shell可以执行一系列检查来评估数据库的健康状况。它可以检查数据库的运行状态,包括连接数、线程使用情况、缓冲区等。它还可以检查数据库的性能指标,如查询响应时间、查询缓存命中率等。 通过MySQL巡检脚本Shell,可以收集数据库的关键指标,并生成详细的报告。这些报告可以被用来监控数据库的性能和瓶颈,并在需要时采取相应的措施进行优化。此外,巡检脚本还可以创建备份和快照,以防止数据丢失和故障恢复。 MySQL巡检脚本Shell的好处还包括自动化,节省时间和资源。通过定期运行脚本,可以及时发现和解决问题,提高数据库的稳定性和可靠性。此外,巡检脚本Shell还可以自定义设置,根据具体需求进行巡检和报告生成。 总之,MySQL巡检脚本Shell是一个强大的工具,用于监控和检查MySQL数据库的运行状况。它可以帮助数据库管理员更加高效地管理和优化数据库,确保其稳定性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热海鲜橙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值