403Webshell
Server IP : 172.64.80.1  /  Your IP : 216.73.216.175
Web Server : LiteSpeed
System : Linux srv13.swhc.ca 4.18.0-553.126.2.lve.el8.x86_64 #1 SMP Thu May 28 14:12:30 UTC 2026 x86_64
User : hongluck ( 2522)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /lib64/nagios/plugins/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib64/nagios/plugins/check_mysql_mem_detail.sh
#!/bin/bash

# Detailed MySQL/MariaDB memory and usage check
# Outputs Nagios/Icinga-style performance data.

# Command to call MySQL (adjust if needed, e.g. add -u / -p or --defaults-file)
MYSQL="mysql -NBe"

# --------------------------
# 1) Total MySQL RSS memory
# --------------------------
RSS_KB=$(ps -o rss= -C mysqld -C mariadbd 2>/dev/null | awk '{s+=$1} END{print s+0}')

if [ -z "$RSS_KB" ] || [ "$RSS_KB" -eq 0 ] 2>/dev/null; then
    # MySQL probably not running
    STATE="CRITICAL"
    EXITCODE=2
    echo "CRITICAL - MySQL process not found | mysql_mem_mb=0;;;;"
    exit $EXITCODE
fi

RSS_MB=$(awk -v rss_kb="$RSS_KB" 'BEGIN {printf "%.2f", rss_kb/1024}')

# ---------------------------------
# 2) InnoDB buffer pool information
# ---------------------------------
# Buffer pool size (MB)
innodb_bp_mb=$($MYSQL "SELECT @@innodb_buffer_pool_size/1024/1024;" 2>/dev/null)

# Fallback to 0 if query fails
innodb_bp_mb=${innodb_bp_mb:-0}

# Buffer pool pages: data, free and page size
bp_data=$($MYSQL "SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_data';" 2>/dev/null | awk '{print $2}')
bp_free=$($MYSQL "SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_free';" 2>/dev/null | awk '{print $2}')
bp_pagesize=$($MYSQL "SHOW GLOBAL STATUS LIKE 'Innodb_page_size';" 2>/dev/null | awk '{print $2}')

bp_data=${bp_data:-0}
bp_free=${bp_free:-0}
bp_pagesize=${bp_pagesize:-16384}  # default 16KB if not returned

innodb_used_mb=$(awk -v d="$bp_data" -v ps="$bp_pagesize" 'BEGIN {printf "%.2f", d*ps/1024/1024}')
innodb_free_mb=$(awk -v f="$bp_free" -v ps="$bp_pagesize" 'BEGIN {printf "%.2f", f*ps/1024/1024}')

# ---------------------------------
# 3) Connection / thread information
# ---------------------------------
threads_connected=$($MYSQL "SHOW GLOBAL STATUS LIKE 'Threads_connected';" 2>/dev/null | awk '{print $2}')
threads_running=$($MYSQL "SHOW GLOBAL STATUS LIKE 'Threads_running';" 2>/dev/null | awk '{print $2}')

threads_connected=${threads_connected:-0}
threads_running=${threads_running:-0}

# --------------------------
# 4) Build status + perfdata
# --------------------------
STATE="OK"
EXITCODE=0

# Simple example logic: if MySQL is using a lot of RAM relative to host, you could add WARN/CRIT here later.
# For now we just always say OK if mysqld is present.

MESSAGE="mysql_mem=${RSS_MB}MB, innodb_buffer_pool=${innodb_bp_mb}MB, used=${innodb_used_mb}MB, threads_connected=${threads_connected}, threads_running=${threads_running}"

PERFDATA="mysql_mem_mb=${RSS_MB};;;;"
PERFDATA+=" innodb_buffer_pool_mb=${innodb_bp_mb};;;;"
PERFDATA+=" innodb_buffer_pool_used_mb=${innodb_used_mb};;;;"
PERFDATA+=" innodb_buffer_pool_free_mb=${innodb_free_mb};;;;"
PERFDATA+=" mysql_threads_connected=${threads_connected};;;;"
PERFDATA+=" mysql_threads_running=${threads_running};;;;"

echo "${STATE} - ${MESSAGE} | ${PERFDATA}"

exit $EXITCODE


Youez - 2016 - github.com/yon3zu
LinuXploit