Pregunta MySQL no lee enlaces simbólicos para archivos de opciones my.cnf


Estoy ejecutando MySQL 5.5 en Ubuntu.

Hay un archivo my.cnf en / etc / mysql / donde esperaría que estuviera. - ¡Excelente!

Para las instalaciones debian de mysql, se recomienda que no edite el archivo my.cnf. Hay una directiva IncludeDir en el archivo /etc/mysql/my.cnf para buscar en la carpeta /etc/mysql/conf.d/ para ver más archivos de opciones.

Cuando coloco este archivo aquí:

/etc/mysql/conf.d/my-local.cnf

MySQL lee el archivo y anula cualquier cosa en /etc/mysql/my.cnf.

¡Genial! :-)

Aquí está el problema:

Mantengo mi copia local del archivo /etc/mysql/conf.d/my-local.cnf en el control de código fuente y quiero actualizarlo periódicamente para todo el equipo. Por lo tanto, mi solución es un enlace simbólico:

cd /etc/mysql/conf.d/
ln -s /path/to/my/my-local.cnf my-local.cnf

MySQL no lee este enlace simbólico.

He verificado lo siguiente:

  • Tanto el archivo físico como el enlace simbólico tienen la extensión de archivo .cnf según el manual de mysql.
  • El usuario de mysql tiene acceso a este archivo.
  • Cada usuario tiene acceso a este archivo.
  • El usuario mysql tiene acceso al enlace simbólico.
  • Cada usuario tiene acceso al enlace simbólico.

Entonces, para resumir, MySQL leerá y analizará cuando haya un archivo físico en la carpeta /etc/mysql/conf.d/. Mysql no leerá un enlace simbólico en esta carpeta.

¿Alguna idea a alguien? ¿Podría ser esto un problema debian / ubuntu?

Un problema similar, pero no resuelto y ligeramente diferente fue descrito aquí.


5
2017-10-17 15:09


origen


es apparmor activo? - Thomas Berger
@Thomas Berger OK, entonces Apparmor está activo. La única forma de evitar esto fue deshabilitar Apparmor para MySQL, así: sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld  sudo service apparmor restart  Esta es una máquina de desarrollo, por lo que esta solución está bien. Sin embargo, si quisiera distribuir archivos de configuración en servidores como este en un entorno en vivo, no estaría contento con esta solución. ¿Alguna otra idea? - HenryHayes


Respuestas:


Apparmor no sabe nada sobre la nueva ubicación del my.cnf

El servidor MySQL sigue el enlace simbólico e intenta abrir el destino. Pero el apparmor lo niega.

Para solucionar el problema, debe agregar la ruta al my.cnf a /etc/apparmor.d/usr.sbin.mysqld


2
2017-10-18 11:11



Potencialmente, el archivo podría estar en cualquier lugar en la máquina de desarrollo de un usuario. Esa es la razón por la que estoy usando un enlace simbólico. Até para agregar la ubicación del enlace simbólico de la siguiente manera: /etc/mysql/conf.d/symlinked-file.cnfdirectamente debajo de la /etc/mysql/conf.d/* Sin embargo la línea, esto no funcionó. - HenryHayes


Puede ser causado por apparmor que está habilitado para mysqld por defecto desde ubuntu 9.0.4. Por favor mira http://en.wikipedia.org/wiki/AppArmor .

  • Puede modificar las adiciones específicas del sitio en /etc/apparmor.d/local/. He sufrido el mismo problema y edité /etc/apparmor.d/local/usr.sbin.mysqld para que funcione. Tenga en cuenta la última coma en el archivo de política.

    # 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,
    
  • Después de editar /etc/apparmor.d/local/usr.sbin.mysqld, reinicie el servicio apparmor mediante service apparmor restart. No debe haber ningún error o advertencia sobre /etc/apparmor.d/local/usr.sbin.mysqld.
  • En mi caso, quería usar datadir y my.cnf específico del sitio ubicado en el directorio de inicio de los usuarios.

2
2018-05-22 08:09





Algunas posibilidades vienen a la mente:

  • Cree el enlace simbólico en la otra dirección, es decir,

    /home/developer/my-local.cnf -> /etc/mysql/conf.d/my-local.cnf
    
  • Utilice un enlace duro en su lugar.

  • Poner /etc bajo control de versiones usando una herramienta como etckeeper.


0
2017-10-18 12:22