MySQL не читает символические ссылки для файлов опций my.cnf
Я использую MySQL 5.5 в Ubuntu.
В файле /etc/mysql/ есть файл my.cnf, где я и ожидал. Отлично!
Для установки mysql в Debian рекомендуется не редактировать файл my.cnf. В файле /etc/mysql/my.cnf есть директива IncludeDir, чтобы найти в папке /etc/mysql/conf.d/ дополнительные файлы опций.
Когда я размещаю этот файл здесь:
/etc/mysql/conf.d/my-local.cnf
MySQL читает файл и переопределяет что-либо в /etc/mysql/my.cnf.
Большой!:-)
Вот проблема:
Я храню свою локальную копию файла /etc/mysql/conf.d/my-local.cnf в системе контроля версий и хочу периодически обновлять ее для всей команды. Итак, мое решение состоит в том, чтобы символическую ссылку:
cd /etc/mysql/conf.d/
ln -s /path/to/my/my-local.cnf my-local.cnf
MySQL не читает эту символическую ссылку.
Я проверил следующее:
- Как физический файл, так и символическая ссылка имеют расширение.cnf в соответствии с руководством по mysql.
- Пользователь MySQL имеет доступ к этому файлу
- Каждый пользователь имеет доступ к этому файлу
- Пользователь mysql имеет доступ к символической ссылке
- Каждый пользователь имеет доступ к символической ссылке
Итак, подведем итог: MySQL будет читать и анализировать, когда в папке /etc/mysql/conf.d/ будет физический файл. Mysql не будет читать символическую ссылку в этой папке.
Любые идеи кто-нибудь? Может ли это быть проблемой Debian / Ubuntu?
Подобная, но нерешенная и немного другая проблема была изложена здесь.
3 ответа
Это может быть вызвано apparmor, который по умолчанию включен для mysqld из ubuntu 9.0.4. Пожалуйста, смотрите http://en.wikipedia.org/wiki/AppArmor.
Вы можете изменить специфичные для сайта дополнения в /etc/apparmor.d/local/. Я столкнулся с той же проблемой и отредактировал /etc/apparmor.d/local/usr.sbin.mysqld, чтобы заставить его работать. Помните о последней запятой в файле политики.
# Site-specific additions and overrides for usr.sbin.mysqld. # For more details, please see /etc/apparmor.d/local/README. # vim:syntax=apparmor /etc/mysql/conf.d/* rl, @{HOMEDIRS}/** rwk,
- После редактирования /etc/apparmor.d/local/usr.sbin.mysqld перезапустите службу apparmor с помощью
service apparmor restart
, Не должно быть никаких ошибок или предупреждений о /etc/apparmor.d/local/usr.sbin.mysqld. - В моем случае я хотел использовать datadir и специфичный для сайта my.cnf, расположенный в домашнем каталоге пользователя.
Apparmor ничего не знает о новом месте my.cnf
MySQL Server следует по символической ссылке и пытается открыть пункт назначения. Но apparmor это отрицает.
Чтобы решить проблему, вы должны добавить путь к my.cnf
в /etc/apparmor.d/usr.sbin.mysqld
Некоторые возможности приходят на ум:
Создайте символическую ссылку в другом направлении, т.е.
/home/developer/my-local.cnf -> /etc/mysql/conf.d/my-local.cnf
Вместо этого используйте жесткую ссылку.
Положил
/etc
под контролем версий, используя такой инструмент, как etckeeper.