File: //proc/self/root/proc/self/root/usr/local/CyberCP/databases/mysqlOptimizer.py
import math
import random
from textwrap import dedent
class MySQLOptimizer:
defaults = {
'mysql_dir': "/var/lib/mysql",
'log_error': "/var/lib/mysql/mysqld.log",
'slow_query_log_file': "/var/lib/mysql/mysqld-slow.log",
'pid_file': "/var/lib/mysql/mysqld.pid",
'mysql_ram_gb': 1,
'query_cache_type': 0,
'query_cache_size': 0,
'long_query_time': 2,
'max_connections': 500,
'server_id': random.randint(100000, 999999)
}
@staticmethod
def mycnf_innodb_log_file_size_MB(innodb_buffer_pool_size_GB):
if innodb_buffer_pool_size_GB > 64:
return '768M'
if innodb_buffer_pool_size_GB > 24:
return '512M'
if innodb_buffer_pool_size_GB > 8:
return '256M'
if innodb_buffer_pool_size_GB > 2:
return '128M'
return '64M'
@staticmethod
def output_memory_gb(gb):
if math.fabs(math.ceil(gb) - gb) < 0.01:
return str(int(gb)) + 'G'
return str(int(gb * 1024)) + 'M'
@staticmethod
def mycnf_make(m):
m['innodb_buffer_pool_size'] = MySQLOptimizer.output_memory_gb(float(m['mysql_ram_gb']) * 0.15)
m['innodb_log_file_size'] = MySQLOptimizer.mycnf_innodb_log_file_size_MB(m['mysql_ram_gb'])
return m
@staticmethod
def output_my_cnf(_metaconf):
return dedent("""
[mysqld]
# GENERAL #
user = mysql
default-storage-engine = InnoDB
#socket = {mysql_dir}/mysql.sock
#pid-file = {pid_file}
# MyISAM #
# key-buffer-size = 32M
# myisam-recover = FORCE,BACKUP
# SAFETY #
max-allowed-packet = 16M
max-connect-errors = 1000000
sql-mode = NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER
sysdate-is-now = 1
innodb-strict-mode = 1
# DATA STORAGE #
datadir = {mysql_dir}
# SERVER ID #
server-id = {server_id}
# CACHES AND LIMITS #
max-connections = {max_connections}
tmp-table-size = 32M
max-heap-table-size = 32M
query-cache-type = {query_cache_type}
query-cache-size = {query_cache_size}
thread-cache-size = 50
open-files-limit = 65535
table-definition-cache = 1024
table-open-cache = 2048
# INNODB #
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-log-file-size = {innodb_log_file_size}
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table = 1
innodb-buffer-pool-size = {innodb_buffer_pool_size}
# LOGGING #
#log-error = {log_error}
slow-query-log = 1
#slow-query-log-file = {slow_query_log_file}
log-queries-not-using-indexes = OFF
long_query_time = 30
[mysqldump]
max-allowed-packet = 16M
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
""".format(**MySQLOptimizer.mycnf_make(_metaconf)))
@staticmethod
def generateRecommendations(detectedRam):
MySQLOptimizer.defaults['mysql_ram_gb'] = int(float(detectedRam))
return MySQLOptimizer.output_my_cnf(MySQLOptimizer.defaults)