Я создал микро - сервер экземпляра на EC2 основе того , что я прочитал здесь
Сервер mysql часто выходит из строя, и в третий раз сервер mysql отсутствует. Журналы показывают только
120423 09:13:38 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
120423 09:14:27 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120423 9:14:27 [Note] Plugin 'FEDERATED' is disabled.
120423 9:14:27 InnoDB: The InnoDB memory heap is disabled
120423 9:14:27 InnoDB: Mutexes and rw_locks use GCC atomic builtins
120423 9:14:27 InnoDB: Compressed tables use zlib 1.2.3
120423 9:14:27 InnoDB: Using Linux native AIO
120423 9:14:27 InnoDB: Initializing buffer pool, size = 512.0M
InnoDB: mmap(549453824 bytes) failed; errno 12
120423 9:14:27 InnoDB: Completed initialization of buffer pool
120423 9:14:27 InnoDB: Fatal error: cannot allocate memory for the buffer pool
120423 9:14:27 [ERROR] Plugin 'InnoDB' init function returned error.
120423 9:14:27 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
120423 9:14:27 [ERROR] Unknown/unsupported storage engine: InnoDB
120423 9:14:27 [ERROR] Aborting
Что на самом деле failed; errno 12
? И как я могу выделить больше места / памяти или чего-то еще, чтобы это исправить.
Я исправляю это каждый раз, перезагружая всю систему, удаляя все журналы и перезагружая сервер mysql. Но я знаю, что с моей конфигурацией что-то не так.
Также мой my.cnf выглядит так:
[mysqld]
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
# max_allowed_packet=500M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
innodb_buffer_pool_size = 512M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
mysql
amazon-ec2
pmoubed
источник
источник
Ответы:
Я столкнулся с той же проблемой, когда попытался запустить wordpress на своем микро-экземпляре без RDS.
Добавление страницы подкачки решило проблему для меня.
Вы можете выполнить следующие шаги, чтобы настроить пространство подкачки.
Если это по-прежнему не работает, рассмотрите возможность использования службы RDS.
===============================================
Я скопировал содержание блога для записи. Кредит принадлежит автору блога pmoubed :
Пространство подкачки микроинстансов Amazon EC2 - Linux
У меня есть экземпляр Amazon EC2 Linux Micro. Поскольку экземпляры Micro имеют только 613 МБ памяти, MySQL то и дело дает сбой. После долгих поисков MySQL, Micro Instance и Memory Managment я обнаружил, что для экземпляра Micro нет места под SWAP по умолчанию. Поэтому, если вы хотите избежать сбоя, вам может потребоваться настроить пространство подкачки для вашего микро-экземпляра. На самом деле с точки зрения производительности лучше включить свопинг.
Шаги ниже показывают, как создать место подкачки для вашего экземпляра Micro. Я предполагаю, что у вас есть учетная запись AWS с запущенным экземпляром Micro.
dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
swapon /swapfile
/swapfile swap swap defaults 0 0
в/etc/fstab
Шаг 4 необходим, если вы хотите автоматически включать файл подкачки после каждой перезагрузки.
Некоторые полезные команды, связанные с пространством подкачки:
Ссылки:
источник
У меня тоже была эта проблема на микро-экземпляре Amazon EC2. Я попытался уменьшить использование памяти inno_db, добавив в
/etc/my.cnf
Это не сработало, я попытался снизить его до 16 МБ, но все равно не работало. Затем я понял, что у экземпляра практически нулевая свободная память. Итак, я попытался перезапустить apache
И все работало нормально. Возможно, другое решение - настроить apache, чтобы как-то не съедать столько памяти.
источник
Похоже , что вы запрашиваете 128M памяти для innodb_buffer_pool_size в файле my.cfg вы показываете в пост, но MySQL считает , что вы просите 512M памяти:
Несколькими строками ниже сообщение об ошибке сообщает, что MySQL не запускается, потому что он не может зарезервировать достаточно (512 МБ) памяти для буферного пула InnoDB:
Это вызывает три вопроса:
Вы можете ответить 1.
Что касается 2., есть несколько разных мест, где могут быть расположены файлы опций MySQL. Впоследствии найденные файлы переопределяют параметры, указанные в ранее найденных файлах. Увидеть
http://dev.mysql.com/doc/refman/5.5/en/option-files.html
Проблема 3. может быть связана с нехваткой памяти, которая возникает через некоторое время после запуска. Вы должны увидеть указание на это в журналах, если это так.
Наконец, но несколько не связанно, вы используете экземпляры с поддержкой EBS? Обычно это настоятельно рекомендуется для серверов баз данных (фактически, для любого экземпляра, за исключением особых обстоятельств). Подробнее об этом см.
https://stackoverflow.com/a/3630707/141172
источник
Для меня именно эта проблема была решена путем добавления тома подкачки к моему экземпляру EC2. Мои службы просто занимали всю память коробки и вылетали из строя. Не то, к чему я привык, будучи администратором RedHat / CentOS в течение многих лет - Anaconda выполняет МНОГО работы, которой нет в бесплатном экземпляре Ubuntu EC2.
Я просто создал том 2 ГБ через веб-консоль, подключил его к своему экземпляру, выполнил «mkswap / dev / [something]», отредактировал / etc / fstab, и сбой остановился.
Эти экземпляры НЕ устанавливаются, как установка ОС на основе носителя, к которой привыкло большинство из нас - она полностью очищена, без пакетов, без надлежащей файловой системы и таких вещей, как AppArmor, которые вызывают всевозможные проблемы, если вы об этом не знаете. и / или не знаете, как его настроить.
источник
Проблема в том, что серверу не хватает памяти для выделения под процесс MySQL. Есть несколько решений этой проблемы.
(1) Увеличьте физическую оперативную память. Добавление 1 ГБ дополнительной оперативной памяти решит проблему. (2) Выделите место для подкачки. Экземпляр Digital Ocean VPS по умолчанию не настроен на использование пространства подкачки. Выделив 512 МБ пространства подкачки, мы смогли решить эту проблему. Чтобы добавить пространство подкачки на свой сервер, выполните следующие действия:
Уменьшить размер буферного пула MySQL
Также проверьте свое дисковое пространство. Убедитесь, что у вас достаточно места.
источник
ЛЕГКИЙ ОТВЕТ:
* * * * * systemctl is-active --quiet mysqld || systemctl restart mysqld
ПОДРОБНЫЙ ОТВЕТ:
Это важный вопрос, особенно для людей, которые используют очень маленький VPS, скажем, 1 ГБ ОЗУ или меньше. Если MySQL отключается, это может быть проблема с конфигурацией вашего сервера (Apache | nginx) или конфигурацией MySQL. Атаки DOS могут вызвать повышенный всплеск использования системных ресурсов (см. Изображение). Конечным результатом является то, что процесс MySQL завершается ядром. Для долгосрочного решения следует обратить внимание на оптимизацию конфигураций Apache или MySQL.
Есть еще несколько обсуждений этих тем, а также руководство по MySQL и блог Percona:
Руководство по MySQL - Как MySQL использует память:
https://dev.mysql.com/doc/refman/8.0/en/memory-use.html
Percona - Рекомендации по настройке оптимального использования памяти MySQL:
https://www.percona.com/blog/2016/05/03/best-practices-for-configuring-optimal-mysql-memory-usage/
Как оптимизировать производительность MySQL с помощью MySQLTuner:
https://www.linode.com/docs/databases/mysql/how-to-optimize-mysql-performance-using-mysqltuner/
Конфигурация использования памяти Apache:
/server/254436/apache-memory-usage-optimization
Руководство Apache по настройке производительности:
https://httpd.apache.org/docs/2.4/misc/perf-tuning.html
Настройка сервера Apache:
https://www.linode.com/docs/web-servers/apache-tips-and-tricks/tuning-your-apache-server/
Однако, что касается вашего исходного вопроса, да, вы можете создать сценарий временного решения, которое проверяет, загружена и активна ли служба MySQL, и перезапускает MySQL, если она не загружена и не активна.
Вы не указали, какую операционную систему используете. Это поможет дать вам конкретную команду. Я приведу вам пример для CentOS linux.
Посмотрите на следующий вывод команды
systemctl status mysql
. Вы можете увидеть вверху, что служба загружена и активна .[root@centos-mysql-demo ~]# systemctl status mysqld ● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2019-06-18 18:28:18 UTC; 924ms ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 3350 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS) Process: 3273 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 3353 (mysqld) CGroup: /system.slice/mysqld.service └─3353 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid Jun 18 18:28:11 centos-mysql-demo systemd[1]: Starting MySQL Server... Jun 18 18:28:18 centos-mysql-demo systemd[1]: Started MySQL Server.
Если служба не загружена, то такая команда как:
сделает трюк повторного запуска процесса. Вы можете cron это:
Однако в случае, если mysql загружен , но служба не активна , ваш cron ничего не сделает. Итак, вам следует использовать более подробную команду, такую как:
* * * * * systemctl is-active --quiet mysqld || systemctl restart mysqld
В этом случае, если служба загружена, но неактивна, например в состоянии, когда DOS-атака может покинуть вашу службу mysql, команда также перезапустит mysql. Использование
--quiet
флага просто указывает команду только для возврата кода состояния, а не вывода ничего на экран. Если вы опустите--quiet
флаг, вы увидите вывод статуса либоactive
либоinactive
.Вы также можете создать пространство подкачки, чтобы добавить на сервер больше доступных ресурсов ОЗУ, например:
sudo dd if=/dev/zero of=/swapfile count=2096 bs=1MiB chmod 600 /swapfile mkswap /swapfile swapon /swapfile swapon --show swapon --summary free -h
источник
Используйте любое из следующих решений:
Увеличьте физическую оперативную память. Добавление 1 ГБ дополнительной оперативной памяти решит проблему.
Выделите пространство под SWAP, используя следующие изменения конфигурации:
config
dd if=/dev/zero of=/extraswap bs=1024 count=512M mkswap /extraswap swapon /extraswap ## Edit the /etc/fstab, and the following entry. /extraswap none swap sw 0 0
источник