Пример оптимального конфига для mySQL и проверка таблиц БД
Рубрика: Администрирование -> Linux -> Без рамки
Метки: Debian | linux | MySQL | OpenSource | soft | инструменты | советы | хостинг
Просмотров: 8133
На одном из web-серверов клиента по случайным обстоятельствам упал MySQL. Сервер работает под управлением Debian 7, MySQL используется последней версии. Стандартные попытки перезагрузки сервиса проблему не решили. Попытка найти ответ в логах также не увенчалась успехом. Размер файла с логом был равен 0. Поскольку MySQL использовался сугубо для web-приложений, было принято решение сразу изменить созданный конфигурационный файл. На многих своих серверах я использую проверенный временем конфигурационный файл MySQL. В нем остается лишь изменить пару параметров, которые зависят от объема установленной на сервере памяти.
Пример оптимального конфигурационного файла MySQL
Здесь пример конфига для серверов с 512 мегабайтами ОЗУ. Если у вас больше, то правим key_buffer (всегда выделяю третью часть размера ОЗУ) и max_connections.
[client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english skip-external-locking skip-name-resolve low-priority-updates bind-address = 127.0.0.1 key_buffer = 170M thread_stack = 512K thread_cache_size = 32 table_cache = 60000 thread_concurrency = 12 net_buffer_length = 32 myisam-recover = BACKUP query_cache_limit = 2M query_cache_size = 128M myisam_sort_buffer_size = 128M tmp_table_size = 128M max_heap_table_size = 128M read_buffer_size = 2M read_rnd_buffer_size = 4M sort_buffer_size = 2M join_buffer_size = 4M max_allowed_packet = 128M max_sort_length = 512 max_connections = 90 max_connect_errors = 50 max_user_connections = 15 log_slow_queries = /var/log/mysql/mysql-slow.log long_query_time = 1 expire_logs_days = 10 max_binlog_size = 300M innodb_buffer_pool_size = 64M innodb_additional_mem_pool_size = 32M innodb_file_io_threads = 8 innodb_lock_wait_timeout = 50 innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 2 innodb_flush_method = O_DIRECT transaction-isolation = READ-COMMITTED [mysqldump] quick quote-names max_allowed_packet = 256M [mysql] #no-auto-rehash [isamchk] key_buffer = 32M !includedir /etc/mysql/conf.d/
Перезапуск MySQL и проверка таблиц
После обновления конфига пробую перезапустить MySQL. Ввожу стандартную команду:
service mysql restart
и служба магическим образом воскресает из мертвых, но выдает предупреждение:
Checking for tables which need to upgrade, are corrupt or were not closed cleanly
Есть подозрение на повреждение таблиц, поэтому лучше сразу выполнить проверку таблиц. Сделать проверку таблиц в MySQL совсем не сложно:
mysqlcheck --check-upgrade --all-databases --auto-repair -u root -p mysql_upgrade --force -u root -p
После этой нехитрой процедуры MySQL вновь приступил к своим обязанностям, а я закрыл еще один тикет с задачей.