Назад | Перейти на главную страницу

MySQL 5.6 на CentOS 6 тихо не запускается

Я работаю над новой установкой CentOS 6.5 и пытаюсь запустить демон сервера MySQL 5.6. Сервер - это свежая капля в инфраструктуре DigitalOcean. Размер 512 МБ. Я использовал версию MySQL из Репозиторий MySQL Yum. Когда я пытаюсь запустить его, он загадочно вылетает без каких-либо указаний на то, что пошло не так. Вот некоторые подробности:

Во-первых, мой /etc/my.cnf:

[mysqld]
innodb_buffer_pool_size = 5M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
explicit_defaults_for_timestamp = TRUE

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Когда я бегу service mysqld start, Я получаю это:

[root@myserver ~]# service mysqld start
MySQL Daemon failed to start.
Starting mysqld:                                           [FAILED]

А вот полное содержание /var/log/mysqld.log после ввода этой команды:

140104 22:53:41 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
2014-01-04 22:53:42 8177 [Note] Plugin 'FEDERATED' is disabled.
2014-01-04 22:53:42 8177 [Note] InnoDB: The InnoDB memory heap is disabled
2014-01-04 22:53:42 8177 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2014-01-04 22:53:42 8177 [Note] InnoDB: Compressed tables use zlib 1.2.3
2014-01-04 22:53:42 8177 [Note] InnoDB: Using Linux native AIO
2014-01-04 22:53:42 8177 [Note] InnoDB: Not using CPU crc32 instructions
2014-01-04 22:53:42 8177 [Note] InnoDB: Initializing buffer pool, size = 5.0M
2014-01-04 22:53:42 8177 [Note] InnoDB: Completed initialization of buffer pool
2014-01-04 22:53:42 8177 [Note] InnoDB: Highest supported file format is Barracuda.
140104 22:53:43 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Ни ошибок, ни предупреждений, ничего. И когда я бегу service mysqld status, это говорит mysqld dead but subsys locked.

Любые идеи?

Обновить: Я вошел в /etc/init.d/mysqld и добавил строку для вывода на консоль точной команды запуска, которую он использует. Затем я выполнил эту команду (но без перенаправления вывода на / dev / null и без фоновой обработки процесса). Вот что получается:

[root@myserver ~]# /usr/bin/mysqld_safe --datadir="/var/lib/mysql" --socket="/var/lib/mysql/mysql.sock" --pid-file="/var/run/mysqld/mysqld.pid" --basedir=/usr --user=mysql
140105 08:04:35 mysqld_safe Logging to '/var/log/mysqld.log'.
140105 08:04:35 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
/usr/bin/mysqld_safe: line 166: 10966 Killed                  nohup /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock < /dev/null >> /var/log/mysqld.log 2>&1
140105 08:04:36 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Похоже, что какая-то внешняя служба или сторожевой таймер убивает MySQL, как только пытается запуститься. Но что могло это делать? SELinux не устанавливается. Я не знаю, что еще ...?

Это определенно была проблема с памятью. Это стало очевидно, когда я заглянул /var/log/messages. Я пытался запустить последние версии Nginx, PHP-FPM и MySQL, и конфигурации по умолчанию для всех трех из них были слишком много для моей маленькой капли, у которой было всего 512 МБ памяти и не было места для подкачки.

Я подправил свой /etc/my.cnf и моя конфигурация PHP-FPM, и все стало работать нормально. Вот мой новый my.cnf для справочных целей:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
explicit_defaults_for_timestamp = TRUE
key_buffer=16K
table_open_cache=4
query_cache_limit=256K
query_cache_size=4M
max_allowed_packet=1M
sort_buffer_size=64K
read_buffer_size=256K
thread_stack=64K
innodb_buffer_pool_size = 56M
innodb_flush_neighbors=0
innodb_flush_log_at_trx_commit=2
character-set-server=utf8
collation-server=utf8_general_ci

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Различные параметры, которые я добавил, были собраны вместе из различных блогов и учебных сайтов, посвященных развертыванию mysqld с низким объемом памяти, например Вот и Вот.

Первое, что я хотел бы здесь проверить, это SELinux. Сначала установите его в разрешающий режим

setenforce 0

Затем попробуйте запустить mysql. Если он запускается, то мы точно знаем, что виноват SELinux. Если это так, то /var/log/audit/audit.log будет содержать сообщения AVC denied, относящиеся к MySQL, которые помогут вам диагностировать проблему в дальнейшем.

Не забудьте включить принудительный режим SELinux.

setenforce 1