Назад | Перейти на главную страницу

Настройка сервера MySQL

Я унаследовал сервер mysql, поэтому начал с запуска сценария MySQLTuner.pl. Я не эксперт по MySQL, но вижу, что здесь определенно беспорядок. Я не собираюсь вдаваться в подробности, требующие исправления и настройки, но я хочу воспользоваться основными, низко висящими фруктами.

Общий объем памяти в системе: 512 МБ. Да, я знаю, что он низкий, но пока это то, что у нас есть.

Вот что должен был сказать сценарий:

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)

Что касается переменных, которые я рекомендую настроить, я даже не вижу большинства из них в файле 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 являются размер буферного пула и размер файла журнала. Почти все остальные настройки на сервере можно оставить по умолчанию, не причиняя большого вреда - или, по крайней мере, значения по умолчанию приемлемы во многих случаях, - но для этих двух настроек нельзя оставить значения по умолчанию, и они никогда не будут приемлемы для рабочих серверов ".

Ура

Во-первых, способ my.cnf file работает так: если директивы конфигурации нет в файле, предполагается, что это значение по умолчанию. (То есть, если my.cnf файл полностью пуст, все параметры конфигурации будут установлены по умолчанию.) Итак, если, например, вы хотите действовать в соответствии с этим предложением:

tmp_table_size (> 16M)

... вы просто добавите эту строку в свой my.cnf файл:

tmp_table_size 32M

(Я предлагаю проверка документации MySQL прежде чем слишком далеко отклониться от предложений сценария, но вы говорите достаточно осторожно, чтобы уже планировать это сделать.)

Похоже, что некоторые вещи, которые вам нужно реализовать, будут в вашем приложении (например, обеспечение правильного закрытия соединений, оптимизация запросов и т. Д.). Как вы это сделаете, будет зависеть от того, как это приложение построено и какие языковые привязки вы используете.