Всем привет!
Сегодня я решил написать статью про оптимизацию MySQL 5.x для запуска и работы в условиях малого объёма ОЗУ
Проблема стоит особенно остро на VDS/VPSсерверах, так как там ОЗУ очень немного.
Конкретно в моём случае я довольствуюсь лишь 64Мб и без дополнительного тюнинга MySQL отказался запускаться вообще.
Почитав некоторое количество форумов, блогов и мануалов я вывел самый минимальный конфиг, при котором MySQL может работать.
Вот он:
- # Main MySQL server options
- [mysqld]
- port = 3306
- socket = /var/run/mysqld/mysqld.sock
- # No locking at all!
- skip-locking
- # Set internal buffers, caches and stacks very low
- key_buffer = 16K
- max_allowed_packet = 16K
- table_cache = 1
- sort_buffer_size = 16K
- read_buffer_size = 16K
- read_rnd_buffer_size = 1K
- net_buffer_length = 1K
- thread_stack = 16K
- # Don’t listen on a TCP/IP port at all.
- # Will still work provided all access is done via localhost
- skip-networking
- server-id = 1
- # Skip Berkley and Inno DB types
- skip-bdb
- skip-innodb
- # Set the query cache low
- query_cache_limit = 1048576
- query_cache_size = 1048576
- query_cache_type = 1
- # Set various memory limits very low, disable memory-hogging extras
- [mysqldump]
- quick
- max_allowed_packet = 16K
- [mysql]
- no-auto-rehash
- [isamchk]
- key_buffer = 16K
- sort_buffer_size = 16K
- [myisamchk]
- key_buffer = 16K
- sort_buffer_size = 16K
- [mysqlhotcopy]
- interactive-timeout
Именно с ним мне получилось первый раз удачно стартовать MySQL.
Посмотрев результат и оценив расход ОЗУ я решил расщедриться и увеличить кэш, заодно и пометь некоторые параметры.
Вот что у меня получилось в итоге:
Пока что пользуюсь без проблем этим конфигом, при моих ресурсах ОЗУ он вполне меня устраивает.
- [mysqld]
- datadir=/var/lib/mysql
- socket=/tmp/mysql/mysql.sock
- user=mysql
- port = 3306
- bind-address = 127.0.0.1
- # No locking at all!
- skip-locking
- # Set internal buffers, caches and stacks very low
- key_buffer = 16K
- max_allowed_packet = 16K
- table_cache = 1
- sort_buffer_size = 16K
- read_buffer_size = 16K
- read_rnd_buffer_size = 1K
- net_buffer_length = 1K
- thread_stack = 16K
- # Don’t listen on a TCP/IP port at all.
- # Will still work provided all access is done via localhost
- skip-networking
- server-id = 1
- # Skip Berkley and Inno DB types
- skip-bdb
- skip-innodb
- # Set the query cache low
- query_cache_limit = 500K
- query_cache_size = 3M
- query_cache_type = 1
- # Set various memory limits very low, disable memory-hogging extras
- [mysqldump]
- quick
- max_allowed_packet = 16K
- [mysql]
- no-auto-rehash
- [isamchk]
- key_buffer = 16K
- sort_buffer_size = 16K
- [myisamchk]
- key_buffer = 16K
- sort_buffer_size = 16K
- [mysqlhotcopy]
- interactive-timeout
Все опции прокомментированы прямо в конфиге и очень понятны.