在 EC2 大型实例上为 MySQL 提供好的/更好的配置

Tim*_*lds 6 mysql ubuntu innodb amazon-ec2

我有一个专用于 MySQL 的 EC2 大型实例。

它将提供 Joomla/Magento 组合,因此它混合了 InnoDB 和 MyISAM 表。我过去只使用过 MyISAM,因此不熟悉 InnoDB 使用的设置。迄今为止的实验并不富有成效,因为我一直在导致 InnoDB 引擎被禁用。

我的实例运行的是 Ubuntu 10.04 64 位服务器版本,并且有大约 7.5G 的内存。MySQL 目前使用了大约 0.6%,性能稍差。我想将其配置为合理使用尽可能多的系统 RAM。

测试一些设置我了解到 InnoDB 日志的总大小不能超过 4G。

任何人都可以提供一些基本的 InnoDB 和 MyISAM 设置来帮助我入门。

谢谢蒂姆

kas*_*ani 8

我在 EC2 上运行相同类型的 Mysql 服务器。不要触摸 /etc/mysql/my.cnf,而是将配置文件放入 /etc/mysql/conf.d/ 这将让​​您管理特定引擎的更改,并在您获得有关如何配置的其他线索后向管理员提供. 它还可以轻松备份您所做的任何更改以及跟踪它们。

/etc/mysql/conf.d/innodb_mysql.cnf

[mysqld]    
# innodb settings 
innodb_additional_mem_pool_size = 12M
innodb_buffer_pool_size         = 2G
innodb_file_per_table           = 1
innodb_flush_log_at_trx_commit  = 2
innodb_lock_wait_timeout        = 180
innodb_log_buffer_size          = 16M
innodb_open_files               = 512
innodb_thread_concurrency       = 0
Run Code Online (Sandbox Code Playgroud)

大多数这些设置都非常标准,您绝对应该查看Percona 的建议。你的系统可以达到 6G,但我会从小做起。还有 myisam 表,我可能会停在 4G 上。我不会触及 innodb 日志文件的大小,那里几乎没有什么收获。增加 log_buffer_size 和 additional_mem_pool 在初始碰撞后也几乎没有回报。

此外,上述设置是为了更好的性能,而不是为了事务一致性。假设您只运行一个 Web 应用程序,上述内容很好,但不适用于银行系统。

/etc/mysql/conf.d/general_mysql.cnf

[mysqld]
# general settings
key_buffer = 384M
Run Code Online (Sandbox Code Playgroud)

key_buffer 通常对 myisam 和 Mysql 最有用。默认情况下它只有 16M,这在 8GB 机器上非常小。再次,我会从一个很好的跳跃开始,看看你是否有进步。请记住,myisam 缓冲区和 innodb 缓冲区不是共享的,因此它们总体上需要小于您拥有的 RAM 量。稍后您可能还会查看排序和读取缓冲区。