MySQL 5.7: Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock
После обновления MySQL с версии 5,6 на версию 5,7 столкнулся с тем, что MySQL перестала запускаться. В логе была вот такая ошибка: [ERROR] Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock..
Вот так выглядит ошибка в /var/log/mysql/error.log
1 2 3 4 5 6 7 |
... 2019-11-25T13:16:23.046481Z 0 [ERROR] Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock. 2019-11-25T13:16:23.046485Z 0 [ERROR] Unable to setup unix socket lock file. 2019-11-25T13:16:23.046488Z 0 [ERROR] Aborting ... |
Первым делом я проверил, что указанная папка существует и у нее правильный пользователь (mysql) и есть права на запись
1 2 3 4 |
$ ls -al /var/run/ | grep mysqld drwxr-xr-x 2 mysql mysql 100 Nov 25 15:32 mysqld |
в моем случае все было в порядке.
Я погуглил и наткнулся на напоминание, что для убунту надо этот файл добавить в apparmor, это я и сделал
1 2 3 4 5 |
$ sudo mcedit /etc/apparmor.d/usr.sbin.mysqld ... /var/run/mysqld/mysqld.sock.lock rwk, |
и перезапускаем apparmor и mysql
1 2 3 4 |
sudo systemctl restart apparmor sudo systemctl restart mysql |
К сожалению, на этом приключения не закончились, по прежнему была та же ошибка в логе mysql. Тогда я погуглил по ключевику "apparmor mysql" и нашел подсказку - смотреть в syslog. Заглянул туда и увидел ошибку чтения других файлов
1 2 3 4 5 6 7 8 9 10 11 12 |
$ tail -n25 /var/log/syslog Nov 25 15:23:46 homenet100 kernel: [ 1846.381432] audit: type=1400 audit(1574688226.849:1941): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/etc/ssl/openssl.cnf" pid=23017 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=121 ouid=0 Nov 25 15:30:24 homenet100 kernel: [ 2243.768247] audit: type=1400 audit(1574688624.268:2443): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/node0/meminfo" pid=27189 comm="mysqld" requested_ Nov 25 15:31:52 homenet100 kernel: [ 2332.345777] audit: type=1400 audit(1574688712.852:2523): apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/run/mysqld/mysqld.sock.lock" pid=28076 comm="mysqld" requested_mask="c" |
в атрибуте name мы видим к каким файлам mysql пытается получить доступ. Вносим их так же в apparmor
1 2 3 4 5 6 7 8 |
$ mcedit /etc/apparmor.d/usr.sbin.mysqld ... /etc/ssl/openssl.cnf r, /run/mysqld/mysqld.sock.lock rwk, /sys/devices/system/node/** r, ... |
и рестартуем
1 2 3 4 |
sudo systemctl restart apparmor sudo systemctl restart mysql |
после этого mysql успешно запустился.
Т.е. алгоритм решения тут такой:
- Пробуем запустить mysql и получаем ошибку
- Проверяем существование папки и права на нее
- Проверяем не закончилось ли место на диске
- Смотрим в /var/log/mysql/error.log и видим ошибку записи
- Смотрим в /var/log/syslog и добавляем в /etc/apparmor.d/usr.sbin.mysqld те пути, куда не хватает доступа
- Перезапускаем apparmor
- Пробуем запустить MySQL, повторяем пункты 4-7.
-- [добавлено] --
В конфиге apparmor-а, после пути указывается флаг доступа, вот возможные варианты
- r - read - permission to read data
- w - write - permission to create, delete, write to a file and extend it
- a - append - permission to create, and extend a file. The append permission is limited that it only gives permission for applications to open a file with O_APPEND, it can not be used to enforce a generic file write is append only. If an application only has the append permission in the profile and it tries to write to the file even if it is an appending write, the write will be failed.
- l - link - permission to link to a file (combined with /** to determine if permissions apply to subtree)
- k - lock - permission to lock a file, is combined with write perm to determine if it has permission to take exclusive lock
- m - memory map executable - permission to memory map a file executable
- x - executable - determines if a file is executable, allow forms of the rule must be accompanied by x qualifiers. When specified as part of an allow rule it must be accompanied by qualifiers.
Более подробно вот тут: https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference
Author: | Tags: /
| Rating:
Leave a Reply