Падает MySQL сервер после последовательных 10-15 запросов на сайт

261
06 апреля 2017, 21:29

При обращении 15 раз подряд и больше (через F5) сервис mysql нужно включать заново. В err логах из важного:

170404 19:15:06 MyISAM: Fatal error: cannot allocate memory for the buffer pool
170404 19:15:06 [ERROR] Plugin 'MyISAM' init function returned error.
170404 19:15:06 [ERROR] Plugin 'MyISAM' registration as a STORAGE ENGINE failed.
170404 19:15:06 [ERROR] Unknown/unsupported storage engine: MyISAM
170404 19:15:06 [ERROR] Aborting

И иногда еще такая ошибка:

170404 19:15:00 [ERROR] /usr/sbin/mysqld: Out of memory (Needed 1047280 bytes)

Но при ней mysql не падает, просто ошибка на сайте.

Сервер - VPS 1гб ОЗУ. Сайт на WordPress. На главной стр (которую тестил) в MySQL ~250 запросов (что для WP чуть ли не норма)

Начал пытаться вникнуть в конфигурирование mysql. И вроде бы даже всё понятно по отдельности. Получилось добиться ускорения раз в 10 (до этого вообще не работал сайт толком, постоянно падал). Но я не так силён в администрировании, видимо, либо не замечаю чего-то. Нужен опытный совет. Вот текущий конфиг:

[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
lc-messages-dir = /usr/share/mysql
skip-external-locking
innodb_buffer_pool_size = 512M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_use_sys_malloc = 0
wait_timeout = 60000
max_allowed_packet  = 160M
key_buffer = 64M
read_buffer_size = 1M
sort_buffer_size = 32M
thread_stack        = 192K
thread_cache_size       = 16
thread_concurrency  = 6
myisam-recover         = BACKUP
table_cache = 512
max_connections = 20
query_cache_limit = 2M
query_cache_size = 128M
query_cache_type = 1
log_error = /var/log/mysql/mysql.err
log_warnings = 1
expire_logs_days    = 10
max_binlog_size         = 100M
[mysqldump]
quick
quote-names
max_allowed_packet  = 160M
[mysql]
[isamchk]
key_buffer      = 64M
!includedir /etc/mysql/conf.d/
Answer 1

Вот абсолютно рабочая конфигурация для 2ГБ сервера. Сайты на WordPress. Ничего не падает.

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
max_connections = 64
key_buffer_size = 32M
innodb_buffer_pool_size = 1G
innodb_buffer_pool_instances = 2
innodb_flush_method = O_DIRECT
innodb_log_file_size = 1G
innodb_log_buffer_size = 512M
innodb_flush_log_at_trx_commit = 2
thread_cache_size = 16
query_cache_size = 128M
query_cache_limit = 2M
max_heap_table_size = 64M
tmp_table_size = 64M
init_connect='SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci
sql_mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ALLOW_INVALID_DATES"
[client]
default-character-set = utf8
READ ALSO
Долго срабатывает AJAX в Yii2

Долго срабатывает AJAX в Yii2

Сейчас делаю проект, и при нажатии на некоторые кнопки должен срабатывать аяксПример: поставить оценку "+" статье

340
Как связать две таблицы по нескольким полям сразу Laravel

Как связать две таблицы по нескольким полям сразу Laravel

Напишу в примерном виде, что хочу получить:

343
Защищают ли подготовленные выражения/переменные полностью от SQL инъекций?

Защищают ли подготовленные выражения/переменные полностью от SQL инъекций?

В мире уже давно используются mysqli и PDOМногие очень активно их пропагандируют: есть подготовленные переменные, всё становится безопасно и прочее

261
Перенос сайта на локальную машину

Перенос сайта на локальную машину

Есть сайт, к которому есть доступ по фтпДоступ к бд также есть

221