最佳 MySQL 配置 (my.cnf)
-
19-09-2019 - |
题
以下是我的默认生产MySQL配置文件(my.cnf
)用于以 InnoDB 作为默认存储引擎的纯 UTF-8 设置。
[server]
bind-address=127.0.0.1
innodb_file_per_table
default-character-set=utf8
default-storage-engine=innodb
该设置执行以下操作:
- 绑定到 localhost:3306(环回)而不是默认的 *:3306(所有接口)。这样做是为了增加安全性。
- 为每个表设置一个表空间。这样做是为了增加可维护性。
- 将默认字符集设置为 UTF-8。默认情况下完成是为了轻松国际化。
- 将默认存储引擎设置为 InnoDB。完成后默认允许行级锁定。
假设您可以通过添加最多三 (3) 个配置参数来进一步改进设置。您会添加哪些内容以及为什么?
在这种情况下,改进意味着性能改进、可靠性改进或易用性/易于维护性的提高。您可以假设运行 MySQL 实例的计算机将具有 1000 MB RAM。
解决方案
缓存更多数据:
innodb_buffer_pool_size = 512M
如果你写入大量数据:
innodb_log_file_size = 128M
, ,避免过多的日志切换。
无论如何,我不会添加第三个,所有其他都取决于。
其他提示
为 InnoDB 分配比默认 8M 更多的内存(使用 innodb_buffer_pool_size)无疑是一种增强。关于该值,在您的专用数据库服务器上,您可以将其设置为 RAM 的 80%,并且该值设置得越高,与硬盘的交互就越少。只是为了给我两分钱,我想提一下,您可以通过调整以下值来提高性能 innodb_flush_log_at_trx_commit
, ,但是牺牲了 ACID 合规性......根据 MySQL手册:
如果Innodb_flush_log_at_trx_commit的值为0,则将日志缓冲区每秒写入日志文件,然后在日志文件上执行磁盘操作,但是在事务提交中什么也没有完成。
因此,您可能会由于崩溃或任何故障而丢失一些未正确写入数据库的数据。再次根据MySQL手册:
但是,InnoDB的崩溃恢复不会受到影响,因此无论价值如何,崩溃恢复确实有效。
所以,我建议:
innodb_flush_log_at_trx_commit = 0
最后,如果您的连接率很高(即如果您需要配置 MySQL 以支持访问数据库的 Web 应用程序),那么您应该考虑将最大连接数增加到 500 等。但由于这是或多或少微不足道且众所周知的事情,所以我想强调的重要性 back_log
以确保连通性。
我希望这些信息能够帮助您优化数据库服务器。
增加 innodb 缓冲池大小,尽可能大:
innodb_buffer_pool_size=768M
您还需要一些临时表的关键缓冲区空间:
key_buffer_size=32M
其他取决于您对数据库所做的事情,但 table_cache 或 query_cache_size 将是其他一些潜力。