One Hat Cyber Team
Your IP :
3.133.115.2
Server IP :
192.145.235.60
Server :
Linux ngx365.inmotionhosting.com 5.14.0-427.33.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Aug 30 09:45:56 EDT 2024 x86_64
Server Software :
Apache
PHP Version :
8.2.27
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
opt
/
tier2c
/
View File Name :
check_mysql
#!/opt/imh-python/bin/python3 """MySQL RADS tool - T2C version""" import argparse import configparser import subprocess from collections import Counter import sys import pymysql from pymysql.optionfile import Parser as PyMySQLParser def parse_args(): """Parse commandline arguments""" parser = argparse.ArgumentParser( description='MySQL RADS tool - T2C version' ) group = parser.add_mutually_exclusive_group(required=True) group.add_argument( '--sockets', action='store_true', help='Show number of open connections vs max connections', ) group.add_argument( '--active', action='store_true', help='Display databases with the most currently running queries', ) args = parser.parse_args() return args def get_max_connections() -> int: """Read mysqld:max_connections from /etc/my.cnf""" try: parser = PyMySQLParser(strict=False) if not parser.read('/etc/my.cnf'): return 100 # default return parser.get('mysqld', 'max_connections') except configparser.Error: return 100 # default def count_mysql_conns() -> None: """Count used/available mysql connections using netstat in case the connections are exhausted""" try: # stderr will go to tty conns = subprocess.check_output( ['netstat', '-an'], encoding='utf-8' ).splitlines() except subprocess.CalledProcessError: sys.exit("netstat -an failed") conns = [x for x in conns if 'ESTABLISHED' in x or 'CONNECTED' in x] conns = [x for x in conns if ':3306' in x or 'mysql' in x] max_conns = get_max_connections() print(f'MySQL Connections: {len(conns)} / {max_conns}') def show_active() -> None: """Show a count of active connections for each mysql user""" try: with pymysql.connect( host='localhost', database='INFORMATION_SCHEMA', read_default_file="/root/.my.cnf", ) as conn: with conn.cursor() as cur: cur.execute("SELECT USER FROM PROCESSLIST") active = Counter([x[0] for x in cur.fetchall()]) except pymysql.Error as exc: sys.exit(str(exc)) sorted_active = sorted(iter(active.items()), key=lambda x: x[1]) for user, count in sorted_active: print(user, count, sep=': ') def main(): """Runs either count_mysql_conns() or show_active()""" args = parse_args() if args.sockets: return count_mysql_conns() if args.active: return show_active() raise NotImplementedError if __name__ == '__main__': main()