#!/bin/sh # http://dev.mysql.com/doc/refman/5.0/en/server-status-variables.html # # https://dev.mysql.com/doc/refman/5.1/en/show-status.html # SHOW STATUS provides server status information (see Section 5.1.6, “Server Status Variables”). # This statement does not require any privilege. # It requires only the ability to connect to the server. mysql_update_every=5 mysql_priority=60000 declare -A mysql_cmds=() mysql_opts=() mysql_ids=() mysql_exec() { local ret "${@}" -s -e "show global status;" ret=$? [ $ret -ne 0 ] && echo "plugin_command_failure $ret" return $ret } mysql_get() { unset \ mysql_Bytes_received \ mysql_Bytes_sent \ mysql_Queries \ mysql_Questions \ mysql_Slow_queries \ mysql_Handler_commit \ mysql_Handler_delete \ mysql_Handler_prepare \ mysql_Handler_read_first \ mysql_Handler_read_key \ mysql_Handler_read_next \ mysql_Handler_read_prev \ mysql_Handler_read_rnd \ mysql_Handler_read_rnd_next \ mysql_Handler_rollback \ mysql_Handler_savepoint \ mysql_Handler_savepoint_rollback \ mysql_Handler_update \ mysql_Handler_write \ mysql_Table_locks_immediate \ mysql_Table_locks_waited \ mysql_Select_full_join \ mysql_Select_full_range_join \ mysql_Select_range \ mysql_Select_range_check \ mysql_Select_scan \ mysql_Sort_merge_passes \ mysql_Sort_range \ mysql_Sort_scan \ mysql_Created_tmp_disk_tables \ mysql_Created_tmp_files \ mysql_Created_tmp_tables \ mysql_Connection_errors_accept \ mysql_Connection_errors_internal \ mysql_Connection_errors_max_connections \ mysql_Connection_errors_peer_addr \ mysql_Connection_errors_select \ mysql_Connection_errors_tcpwrap \ mysql_Connections \ mysql_Aborted_connects \ mysql_Binlog_cache_disk_use \ mysql_Binlog_cache_use \ mysql_Binlog_stmt_cache_disk_use \ mysql_Binlog_stmt_cache_use \ mysql_Threads_connected \ mysql_Threads_created \ mysql_Threads_cached \ mysql_Threads_running \ mysql_Innodb_data_read \ mysql_Innodb_data_written \ mysql_Innodb_data_reads \ mysql_Innodb_data_writes \ mysql_Innodb_data_fsyncs \ mysql_Innodb_data_pending_reads \ mysql_Innodb_data_pending_writes \ mysql_Innodb_data_pending_fsyncs \ mysql_Innodb_log_waits \ mysql_Innodb_log_write_requests \ mysql_Innodb_log_writes \ mysql_Innodb_os_log_fsyncs \ mysql_Innodb_os_log_pending_fsyncs \ mysql_Innodb_os_log_pending_writes \ mysql_Innodb_os_log_written \ mysql_Innodb_row_lock_current_waits \ mysql_Innodb_rows_inserted \ mysql_Innodb_rows_read \ mysql_Innodb_rows_updated \ mysql_Innodb_rows_deleted mysql_plugin_command_failure=0 eval "$(mysql_exec "${@}" |\ sed \ -e "s/[[:space:]]\+/ /g" \ -e "s/\./_/g" \ -e "s/^\([a-zA-Z0-9_]\+\)[[:space:]]\+\([0-9]\+\)$/mysql_\1=\2/g" |\ egrep "^mysql_[a-zA-Z0-9_]+=[[:digit:]]+$")" [ $mysql_plugin_command_failure -eq 1 ] && return 1 [ -z "$mysql_Connections" ] && return 1 mysql_Thread_cache_misses=0 [ $(( mysql_Connections + 1 - 1 )) -gt 0 ] && mysql_Thread_cache_misses=$(( mysql_Threads_created * 10000 / mysql_Connections )) return 0 } mysql_check() { # this should return: # - 0 to enable the chart # - 1 to disable the chart local x m mysql_cmd [ -z "${mysql_cmd}" ] && mysql_cmd="$(which mysql)" if [ ${#mysql_opts[@]} -eq 0 ] then mysql_cmds[local]="$mysql_cmd" mysql_opts[local]= fi # check once if the url works for m in "${!mysql_opts[@]}" do [ -z "${mysql_cmds[$m]}" ] && mysql_cmds[$m]="$mysql_cmd" if [ -z "${mysql_cmds[$m]}" ] then echo >&2 "$PROGRAM_NAME: mysql: cannot get mysql command for '$m'. Please set mysql_cmds[$m]='/path/to/mysql', in $confd/mysql.conf" fi mysql_get "${mysql_cmds[$m]}" ${mysql_opts[$m]} if [ ! $? -eq 0 ] then echo >&2 "$PROGRAM_NAME: mysql: cannot get global status for '$m'. Please set mysql_opts[$m]='options' to whatever needed to get connected to the mysql server, in $confd/mysql.conf" unset mysql_cmds[$m] unset mysql_opts[$m] unset mysql_ids[$m] continue fi mysql_ids[$m]="$( fixid "$m" )" done if [ ${#mysql_opts[@]} -eq 0 ] then echo >&2 "$PROGRAM_NAME: mysql: no mysql servers found. Please set mysql_opts[name]='options' to whatever needed to get connected to the mysql server, in $confd/mysql.conf" return 1 fi return 0 } mysql_create() { local m # create the charts for m in "${mysql_ids[@]}" do cat <&2 "$PROGRAM_NAME: mysql: failed to get values for '$m', disabling it." continue fi # write the result of the work. cat <&2 "$PROGRAM_NAME: mysql: no mysql servers left active." && return 1 return 0 }