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.

Другие вопросы по тегам