调整MySQL服务器

我inheritance了一个mysql服务器,所以我开始运行MySQLTuner.pl脚本。 我不是一个MySQL专家,但我可以看到,这里肯定是一团糟。 我不想追求每一个需要修复和调整的东西,但我确实想要抓住主要的低挂果实。

系统总内存为:512MB。 是的,我知道这是低的,但这是我们暂时的。

这是剧本必须说的:

General recommendations: Run OPTIMIZE TABLE to defragment tables for better performance MySQL started within last 24 hours - recommendations may be inaccurate Enable the slow query log to troubleshoot bad queries When making adjustments, make tmp_table_size/max_heap_table_size equal Reduce your SELECT DISTINCT queries without LIMIT clauses Increase table_cache gradually to avoid file descriptor limits Your applications are not closing MySQL connections properly Variables to adjust: query_cache_limit (> 1M, or use smaller result sets) tmp_table_size (> 16M) max_heap_table_size (> 16M) table_cache (> 64) innodb_buffer_pool_size (>= 326M) 

对于build议我调整的variables,我甚至没有在mysql.cnf文件中看到它们中的大部分。

 [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] innodb_buffer_pool_size = 220M innodb_flush_log_at_trx_commit = 2 innodb_file_per_table = 1 innodb_thread_concurrency = 32 skip-locking big-tables max_connections = 50 innodb_lock_wait_timeout = 600 slave_transaction_retries = 10 innodb_table_locks = 0 innodb_additional_mem_pool_size = 20M user = mysql socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp skip-external-locking bind-address = localhost key_buffer = 16M max_allowed_packet = 16M thread_stack = 192K thread_cache_size = 4 myisam-recover = BACKUP query_cache_limit = 1M query_cache_size = 16M log_error = /var/log/mysql/error.log expire_logs_days = 10 max_binlog_size = 100M skip-locking innodb_file_per_table = 1 big-tables [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] [isamchk] key_buffer = 16M !includedir /etc/mysql/conf.d/ 

从最近的Percona白皮书直接引用:

“InnoDB的两个最重要的设置是缓冲池大小和日志文件大小,服务器中的几乎所有其他设置都可以保持默认值,而不会造成太大的伤害,或者至less默认设置在许多情况下是可以接受的。这两个设置不能保留默认值,对于生产服务器来说是不可接受的。“

干杯

首先, my.cnf文件的工作方式是,如果configuration指令不在文件中,则它被认为是默认值。 (也就是说,如果my.cnf文件是完全空的,所有的configuration选项将被设置为默认值。)例如,如果您想要采取这个build议:

 tmp_table_size (> 16M) 

…你只要将这一行添加到你的my.cnf文件中:

 tmp_table_size 32M 

(我build议先检查一下MySQL文档,然后再与脚本的build议分离太远,但是你听起来很谨慎,以至于你打算这样做。)

这听起来像你需要实现的一些东西将在你的应用程序(例如确保连接正确closures,优化查询等)。 你将如何做,取决于应用程序是如何构build的以及你正在使用哪种语言的绑定。