Я размещаю веб-сайт WordPress на дроплете DigitalOcean (1 ГБ ОЗУ). База данных MySQL веб-сайта время от времени дает сбой, в результате чего на веб-сайте отображается сообщение «Ошибка установления соединения с базой данных». Использование памяти упало примерно в 2:40, что указывает на то, что именно в этот момент произошел сбой базы данных. Я проверил файл журнала MySQL за этот день, и самая ранняя запись была сделана в 10:47. Вот начало лог-файла:
2021-12-06T10:47:14.800977Z 0 [Предупреждение] TIMESTAMP с неявным значением DEFAULT устарело. Пожалуйста, используйте --explicit_defaults_for_timest$
2021-12-06T10:47:14.806192Z 0 [Примечание] /usr/sbin/mysqld (mysqld 5.7.36-0ubuntu0.18.04.1), начиная с процесса 2810 ...
2021-12-06T10:47:14.819674Z 0 [Примечание] InnoDB: доступна поддержка PUNCH HOLE
2021-12-06T10:47:14.819711Z 0 [Примечание] InnoDB: мьютексы и rw_locks используют атомарные встроенные функции GCC
2021-12-06T10:47:14.819716Z 0 [Примечание] InnoDB: использует мьютексы событий
2021-12-06T10:47:14.819720Z 0 [Примечание] InnoDB: встроенная функция GCC __atomic_thread_fence() используется для барьера памяти
2021-12-06T10:47:14.819723Z 0 [Примечание] InnoDB: сжатые таблицы используют zlib 1.2.11
2021-12-06T10:47:14.819727Z 0 [Примечание] InnoDB: использование родного AIO для Linux
2021-12-06T10:47:14.820551Z 0 [Примечание] InnoDB: Количество пулов: 1
2021-12-06T10:47:14.823342Z 0 [Примечание] InnoDB: использование инструкций CPU crc32
2021-12-06T10:47:14.825847Z 0 [Примечание] InnoDB: Инициализация пула буферов, общий размер = 128 МБ, количество экземпляров = 1, размер фрагмента = 128 МБ
2021-12-06T10:47:14.826246Z 0 [ОШИБКА] InnoDB: сбой mmap (137428992 байт); ошибка 12
2021-12-06T10:47:14.826258Z 0 [ОШИБКА] InnoDB: не удается выделить память для пула буферов
2021-12-06T10:47:14.826262Z 0 [ОШИБКА] InnoDB: инициализация плагина прервана из-за ошибки Общая ошибка
2021-12-06T10:47:14.826270Z 0 [ОШИБКА] Функция инициализации плагина InnoDB вернула ошибку.
2021-12-06T10:47:14.826274Z 0 [ОШИБКА] Ошибка регистрации плагина InnoDB в качестве STORAGE ENGINE.
2021-12-06T10:47:14.826278Z 0 [ОШИБКА] Не удалось инициализировать встроенные плагины.
2021-12-06T10:47:14.826282Z 0 [ОШИБКА] Прерывание
2021-12-06T10:47:14.832237Z 0 [Примечание] Конец бинлога
2021-12-06T10:47:14.832297Z 0 [Примечание] Выключение плагина CSV
2021-12-06T10:47:14.832572Z 0 [Примечание] /usr/sbin/mysqld: завершение работы
Судя по файлу журнала, MySQL не хватает памяти. Однако использование памяти для дроплета оставалось стабильным на уровне 73 % до тех пор, пока не произошел сбой базы данных около 2:40 утра, когда оно упало до 32 %. Кажется, у него много доступной памяти, так почему же он падает?
РЕДАКТИРОВАТЬ В соответствии с запросом, вот содержимое моих конфигурационных файлов MySQL:
/etc/mysql/conf.d/mysql.cnf
[mysql]
/etc/mysql/conf.d/mysqldump.cnf
[mysqldump]
быстрый
кавычки
max_allowed_packet = 16M
/etc/mysql/mysql.conf.d/mysqld.cnf
#
# Файл конфигурации сервера базы данных MySQL.
#
# Вы можете скопировать это в один из:
# - "/etc/mysql/my.cnf" для установки глобальных параметров,
# - "~/.my.cnf" для установки пользовательских параметров.
#
# Можно использовать все длинные опции, поддерживаемые программой.
# Запустите программу с --help, чтобы получить список доступных опций и с помощью
# --print-defaults, чтобы увидеть, что он на самом деле понимает и использует.
#
# Пояснения см.
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
# Это будет передано всем клиентам mysql
# Сообщалось, что пароли должны заключаться в галочки/кавычки
# особенно если они содержат символы "#"...
# Не забудьте отредактировать файл /etc/mysql/debian.cnf при изменении местоположения сокета.
# Здесь записи для некоторых конкретных программ
# Следующие значения предполагают, что у вас есть как минимум 32 МБ оперативной памяти
[mysqld_safe]
сокет = /var/run/mysqld/mysqld.sock
хорошо = 0
[mysqld]
#
# * Основные настройки
#
пользователь = mysql
pid-файл = /var/run/mysqld/mysqld.pid
сокет = /var/run/mysqld/mysqld.sock
порт = 3306
базисир = /usr
каталог данных = /var/lib/mysql
временная_папка = /tmp
lc-сообщения-каталог = /usr/доля/mysql
пропустить внешнюю блокировку
#
# Вместо пропуска сети теперь по умолчанию прослушивается только
# localhost, который более совместим и не менее безопасен.
адрес привязки = 127.0.0.1
#
# * Тонкая настройка
#
key_buffer_size = 16M
max_allowed_packet = 16M
thread_stack = 192 КБ
thread_cache_size = 8
# Это заменяет сценарий запуска и проверяет таблицы MyISAM, если это необходимо
# когда к ним прикасаются в первый раз
myisam-recover-options = РЕЗЕРВНАЯ КОПИЯ
#max_connections = 100
#table_open_cache = 64
#thread_concurrency = 10
#
# * Конфигурация кэша запросов
#
query_cache_limit = 1M
query_cache_size = 16M
#
# * Ведение журнала и репликация
#
# Обе локации чередуются с помощью cronjob.
# Имейте в виду, что этот тип журнала снижает производительность.
# Начиная с версии 5.1 вы можете включить журнал во время выполнения!
#general_log_file = /var/log/mysql/mysql.log
#общий_журнал = 1
#
# Журнал ошибок - должно быть очень мало записей.
#
log_error = /var/log/mysql/error.log
#
# Здесь вы можете увидеть запросы с особенно большой продолжительностью
#slow_query_log = 1
#slow_query_log_file = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
#
# Следующее можно использовать для простого воспроизведения журналов резервного копирования или для репликации.
# примечание: если вы настраиваете ведомое устройство репликации, см. README.Debian о
# другие настройки, которые вам, возможно, придется изменить.
#идентификатор_сервера = 1
#log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
#binlog_do_db = include_database_name
#binlog_ignore_db = include_database_name
#
# * ИнноБД
#
# InnoDB включен по умолчанию с файлом данных размером 10 МБ в /var/lib/mysql/.
# Прочтите руководство, чтобы узнать больше о параметрах, связанных с InnoDB. Здесь очень много!
#
# * Функции безопасности
#
# Прочтите также руководство, если вам нужен chroot!
# chroot = /var/lib/mysql/
#
# Для создания SSL-сертификатов я рекомендую OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem
/etc/mysql/mysql.conf.d/mysqld_safe_syslog.cnf
[mysqld_safe]
системный журнал