2016-06-27 3 views
3

Недавно я установил MySQL Server 5.7 на Ubuntu 14.04 (через ansible using this role, чтобы быть конкретным). Она запускается нормально при первой установке, но при попытке перезапустить его, он просто зависает навсегда:MySQL Server 5.7 не запускается, и журнал ошибок не заполняется

sudo service mysql restart 
* Stopping MySQL Community Server 5.7.13 
* MySQL Community Server 5.7.13 is already stopped 
* Re-starting MySQL Community Server 5.7.13 
.................................................................................................................................................................................... 
* MySQL Community Server 5.7.13 did not start. Please check logs for more details. 

В довершение, нет журналов ошибок, кажется, чтобы получить заселены в любом месте (я проверил /var/log/mysql/ и /var/log/mysql.err) ,

Выполнение в подробном режиме (sudo /usr/sbin/mysqld --user=mysql --verbose) также не дает мне ничего.

Где я могу посмотреть, чтобы диагностировать это?

+0

Вполне возможно, что он не может открыть журналы на основе разрешений, и, следовательно, DB не запустится и CAN» T log. –

+0

Все разрешения на журналы и данные dir принадлежат моей группе и пользователю mysql – Eli

+0

У меня такая же проблема. Вы нашли решение yeT? – John

ответ

6

У меня была и эта точная проблема, я надеюсь, что мое решение устраняет ваши проблемы.

Когда я установил MySQL 5.7 вручную, он работал корректно, но с ролью Ansible он не запускался. Файлы журнала mysql не помогли. Проверка /var/log/syslog однако я нашел много сообщений от AppArmor:

Aug 10 18:50:05 vagrant-ubuntu-trusty-64 kernel: [ 4446.790627] type=1400 audit(1470855005.470:40): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/var/log/mysql.err" pid=13991 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=109 ouid=109 

AppArmor был отказ в доступе к файлу /var/log/mysql.err, поскольку его политика туздЫ не позволяет файлы, которые будут записаны в /var/log/, только /var/log/mysql/. Политика AppArmor для mysql находится в /etc/apparmor.d/usr.sbin.mysqld. Часть политики, которая занимается шоу доступа к файлам журнала:

# Allow log file access 
    /var/log/mysql/ r, 
    /var/log/mysql/** rw, 

В основном это говорит, что AppArmor ожидает файлы, которые будут записаны в /var/log/mysql без каких-либо положений о /var/log войти. Поскольку он видит, что mysql пытается писать за пределами каталогов внутри политики, он отключает вас. Для этого существует несколько решений, включая добавление новой политики, позволяющей mysql записывать файлы в /var/log, но мне было проще всего обновить переменные Ansible, касающиеся файлов журналов.

В переменных по умолчанию для geerlingguy.mysql роли указателей файлов два журнала устанавливаются:

mysql_slow_query_log_file: /var/log/mysql-slow.log 
mysql_log_error: /var/log/mysql.err 

Я переопределить эти значения по умолчанию и переместить их в /var/log/mysql вместо:

mysql_slow_query_log_file: /var/log/mysql/mysql-slow.log 
mysql_log_error: /var/log/mysql/mysql.err 

Теперь AppArmor счастлив, и mysql запускается и работает отлично. Остальная часть моей пьесы заканчивается нормально.

Для получения дополнительной информации по AppArmor и MySQL, эта страница содержит обсуждение и альтернативные решения: https://blogs.oracle.com/jsmyth/entry/apparmor_and_mysql

+0

100% правильный. Я забыл ответить на свой вопрос после того, как подошел к этому несколько месяцев назад, но вы пришли к тому же самому ответу. Спасибо, что написал это! – Eli

Смежные вопросы