Персональный блог Игоря Антонова aka "spider_net"

Пример оптимального конфига для mySQL и проверка таблиц БД


Рубрика: Администрирование -> Linux -> Без рамки
Метки: | | | | | | |
Просмотров: 5265
Пример оптимального конфига для mySQL и проверка таблиц БД

На одном из 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 вновь приступил к своим обязанностям, а я закрыл еще один тикет с задачей.

Оставьте комментарий!
comments powered by HyperComments