my.cnf 自动生成脚本

青旅半醒 2023-06-11 03:30 83阅读 0赞

利用python 写了一个自动生成my.cnf 的脚本,写的很简单,运行结果如下:

  1. (yuhuashi) [root@yuhuashi opt]# python auto_mycnf.py
  2. MySQL安装文件路径:/opt/mysql
  3. MySQL数据文件路径:/database/mysql
  4. MySQL监听端口:3306
  5. 日志保留天数:7

脚本代码如下:

  1. #/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. import os
  4. import configparser
  5. import socket
  6. import psutil
  7. def get_hostname():
  8. return socket.gethostname()
  9. def get_meminfo():
  10. memory = psutil.virtual_memory()
  11. ##memory_total = memory.total
  12. #memory_free = memory.free
  13. return memory.free
  14. def get_cpu():
  15. return psutil.cpu_count(logical=False)
  16. def get_ip():
  17. info = psutil.net_if_addrs()
  18. ip_addr='127.0.0.1'
  19. for k,v in info.items():
  20. for item in v:
  21. if item[0] == 2 and not item[1]=='127.0.0.1':
  22. ip_addr=item[1]
  23. return ip_addr
  24. def auto_mycnf(mysql_port,mysql_install_dir,datadir,innodb_buffer_pool_size,expire_days,cpu_cores,local_ip):
  25. config= configparser.ConfigParser()
  26. config['client']={
  27. 'port':mysql_port,
  28. 'socket': mysql_install_dir+'/mysql.sock'
  29. }
  30. config['mysqld']={
  31. 'port':mysql_port,
  32. 'socket':mysql_install_dir+'/mysql.sock',
  33. 'basedir':mysql_install_dir,
  34. 'datadir':datadir,
  35. 'server_id':mysql_port,
  36. 'report_host':local_ip,
  37. 'user':'mysql',
  38. 'federated':'',
  39. 'key_buffer_size':'512M',
  40. 'read_buffer_size':'8M',
  41. 'read_rnd_buffer_size':'8M',
  42. 'join_buffer_size':'8M',
  43. 'sort_buffer_size':'8M',
  44. 'myisam_sort_buffer_size':'64M',
  45. 'max_heap_table_size':'128M',
  46. 'tmp_table_size':'128M',
  47. 'max_allowed_packet':'16M',
  48. 'table_open_cache':'4096',
  49. 'thread_cache_size':'4096',
  50. 'thread_concurrency':'38',
  51. 'back_log':'1024',
  52. 'max_connections':'6000',
  53. 'max_user_connections':'2000',
  54. 'max_connect_errors':'10',
  55. 'wait_timeout':'60',
  56. 'lower_case_table_names':'1',
  57. 'innodb_data_file_path':'ibdata1:2000M;ibdata2:10M:autoextend',
  58. 'innodb_buffer_pool_size':innodb_buffer_pool_size+'G',
  59. 'innodb_additional_mem_pool_size':'10M',
  60. 'innodb_log_file_size':'256M',
  61. 'innodb_log_buffer_size':'16M',
  62. 'innodb_flush_log_at_trx_commit':'1',
  63. 'innodb_lock_wait_timeout':'50',
  64. 'innodb_file_per_table':'1',
  65. 'innodb_log_files_in_group':'10',
  66. 'innodb_flush_method':'O_DIRECT',
  67. 'innodb_open_file':'1024',
  68. 'innodb_purge_threads':'4',
  69. 'innodb_write_io_threads':cpu_cores,
  70. 'innodb_read_io_threads':cpu_cores,
  71. 'log_error':mysql_install_dir+'/data/error-log',
  72. 'pid-file':'mysqld.pid',
  73. 'log_bin':mysql_install_dir+'/data/mysql-bin',
  74. 'max_binlog_size':'1G',
  75. 'max_binlog_cache_size':'2G',
  76. 'binlog_format':'mixed',
  77. 'expire_logs_days':expire_days,
  78. 'general_log_file':mysql_install_dir+'/data/general.log',
  79. 'relay_log':mysql_install_dir+'/data/relay-bin',
  80. 'log_slave_updates':'1',
  81. 'slave_compressed_protocol':'1',
  82. 'slow_query_log':'1',
  83. 'slow_query_log':mysql_install_dir+'/data/slow-query.log',
  84. 'long_query_time':'1',
  85. 'log_queries_not_using_indexes':'0',
  86. 'event_scheduler':'on',
  87. 'log_slave-_updates':'on',
  88. 'skip_external_locking':'ON',
  89. 'skip_name_resolve':'ON',
  90. }
  91. with open('my.cnf', 'w') as configfile:
  92. config.write(configfile)
  93. if __name__=='__main__':
  94. mysql_install_dir=input('MySQL安装文件路径:')
  95. while len(mysql_install_dir.strip())==0:
  96. buffer_pool_size=input('MySQL安装文件路径:')
  97. datadir=input('MySQL数据文件路径:')
  98. while len(datadir.strip())==0:
  99. buffer_pool_size=input('MySQL数据文件路径:')
  100. mysql_port=input('MySQL监听端口:')
  101. while len(mysql_port.strip())==0 or mysql_port.isdigit()==False:
  102. mysql_port=input('MySQL监听端口:')
  103. expire_days=input('日志保留天数:')
  104. while len(expire_days.strip())==0 or expire_days.isdigit()==False:
  105. expire_days=input('日志保留天数:')
  106. cpu_cores = get_cpu()
  107. innodb_buffer_pool_size=get_meminfo()/1024/1024/1024*0.8
  108. local_ip=get_ip()
  109. server_id=local_ip+mysql_port
  110. auto_mycnf(mysql_port,mysql_install_dir,datadir,str(int(innodb_buffer_pool_size)),expire_days,cpu_cores,local_ip)

发表评论

表情:
评论列表 (有 0 条评论,83人围观)

还没有评论,来说两句吧...

相关阅读