最佳MySQL配置(my.cnf)

时间:2009-07-22 17:55:17

标签: mysql optimization utf-8 innodb my.cnf

以下是我的默认生产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

设置执行以下操作:

  1. 绑定到localhost:3306(环回)而不是默认的*:3306(所有接口)。完成以提高安全性。
  2. 为每个表设置一个表空间。完成以提高可维护性。
  3. 将默认字符集设置为UTF-8。完成以便在默认情况下轻松实现国际化。
  4. 将默认存储引擎设置为InnoDB。完成默认情况下允许行级锁定。
  5. 假设您可以通过添加最多三(3)个配置参数来进一步改进设置。您会添加哪些内容以及为什么?

    在这种情况下,改进意味着性能改进,可靠性改进或易用性/易维护性增加。您可以假设运行MySQL实例的计算机将具有1000 MB的RAM。

3 个答案:

答案 0 :(得分:5)

要缓存更多数据:

innodb_buffer_pool_size = 512M

如果你写了很多数据:

innodb_log_file_size = 128M

,避免过多的日志切换。

在任何情况下都没有第三个我会添加,所有其他依赖。

答案 1 :(得分:1)

将比默认值8M更多的内存分配给InnoDB(使用innodb_buffer_pool_size)肯定是一种增强。关于值,在您的专用数据库服务器上,您可以将其设置为RAM的80%,设置此值越高,与硬盘的交互越少。只是为了给我两分钱,我想提一下,你可以通过调整innodb_flush_log_at_trx_commit的价值来提高性能,但是会牺牲ACID合规性......根据MySQL manual

  

如果值为   innodb_flush_log_at_trx_commit是0,   日志缓冲区写出来了   每秒一次日志文件和刷新   磁盘操作是在   日志文件,但没有做任何事情   事务提交。

因此,您可能会因为崩溃或任何故障而丢失一些未在数据库中正确写入的数据。再次根据MySQL手册:

  

然而,InnoDB的崩溃恢复是   不受影响,因而崩溃恢复   无论价值如何都能奏效。

所以,我建议:

innodb_flush_log_at_trx_commit = 0

最后,如果您的连接速率很高(即,如果您需要配置MySQL以支持访问数据库的Web应用程序),那么您应该考虑将最大连接数增加到500之类。但是,因为这是更多的东西或者不那么琐碎和众所周知,所以我想强调back_log确保连通性的重要性。

我希望这些信息可以帮助您优化数据库服务器。

答案 2 :(得分:0)

增加innodb缓冲池的大小,实际上可以做到这一点:

innodb_buffer_pool_size=768M

您还需要临时表的一些关键缓冲区空间:

key_buffer_size=32M

其他人将取决于您对数据库所做的事情,但table_cache或query_cache_size将是其他几个潜力。