No se puede iniciar el servidor MySQL si el archivo .sock se cambia en /etc/mysql/my.cnf

8

He instalado el servidor MySQL 5.5 en Ubuntu 12.04. Estoy tratando de iniciar el servidor MySQL en un archivo de calcetines diferente. Por defecto, MySQL se ejecuta en /var/run/mysqld/mysqld.sock.

Estoy tratando de ejecutar el mismo servidor en /var/run/mysqld/mysqld1.sock.

Para esto he realizado los siguientes cambios:

  1. Cambios en /etc/mysql/my.cnf
[cliente]
    puerto = 3306
    socket = /var/run/mysqld/mysqld1.sock

[mysqld_safe]
    socket = /var/run/mysqld/mysqld1.sock
    bonito = 0

[mysqld]
    usuario = mysql
    pid-file = /var/run/mysqld/mysqld.pid
    ** socket = /var/run/mysqld/mysqld1.sock**
    puerto = 3306
    basedir = / usr
    datadir = / var / lib / mysql
    tmpdir = / tmp
    lc-messages-dir = / usr / share / mysql
  1. También agregué la siguiente línea a /etc/apparmor.d/usr/sbin.mysqld

    /var/run/mysqld/mysqld1.sock w,

    /var/run/mysqld/mysqld[1-9font>.sock w,

  2. También cambié la propiedad del directorio / var / run / mysqld a mysql user.

    ls -lA / var / run / | grep mysqld

    drwxrwxrwx 2 mysql mysql 40 31 de diciembre 17:24 mysqld

Sin embargo, cuando intento iniciar el servidor MySQL me sale el siguiente error (como usuario root)

    $ mysqld --user = mysql --verbose
    121231 18:40:56 [Nota] El complemento 'FEDERADO' está deshabilitado.
    121231 18:40:56 InnoDB: el montón de memoria InnoDB está deshabilitado
    121231 18:40:56 InnoDB: Mutexes y rw_locks usan componentes atómicos GCC
    121231 18:40:56 InnoDB: las tablas comprimidas usan zlib 1.2.3.4
    121231 18:40:56 InnoDB: Inicializando agrupación de almacenamiento intermedio, tamaño = 128.0M
    121231 18:40:56 InnoDB: inicialización completada de la agrupación de almacenamiento intermedio
    121231 18:40:56 InnoDB: el formato de archivo más alto admitido es Barracuda.
    121231 18:40:57 InnoDB: esperando que comiencen los hilos de fondo
    121231 18:40:58 InnoDB: 1.1.8 iniciado; número de secuencia de registro 1595685
    121231 18:40:58 [Nota] Nombre de host del servidor (dirección de enlace): '127.0.0.1'; puerto: 3306
    121231 18:40:58 [Nota] - '127.0.0.1' se resuelve en '127.0.0.1';
    121231 18:40:58 [Nota] Socket de servidor creado en IP: '127.0.0.1'.
   ** `121231 18:40:58 [ERROR] No se puede iniciar el servidor: Enlace en el socket de Unix: Permiso denegado` **

    121231 18:40:58 [ERROR] ¿Ya tiene otro servidor mysqld ejecutándose en el socket: 
    /var/run/mysqld/mysqld1.sock?
    121231 18:40:58 [ERROR] Abortar **
    121231 18:40:58 InnoDB: inicio del apagado ...
    121231 18:40:58 InnoDB: apagado completado; número de secuencia de registro 1595685
    121231 18:40:58 [Nota] mysqld: apagado completo

Si inicio el servidor con el archivo de socket predeterminado, puedo iniciar el servidor. Busqué en Google este problema, pero solo encontré soluciones que sugieren que es un problema de permisos. Sin embargo, los permisos parecen estar bien. Algunos han sugerido que AppArmor podría ser una causa, pero también lo he comprobado: el fragmento se ha pegado anteriormente.

¿Alguien puede proporcionar algunas pistas?

[EDITAR]

Veo el siguiente resultado en /var/log/syslog.

2 de enero 12:09:34 praveshp-lt mysqld: 130102 12:09:34 [Nota] El complemento 'FEDERADO' está deshabilitado.
2 de enero 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: el montón de memoria de InnoDB está deshabilitado
2 de enero 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Mutexes y rw_locks usan componentes atómicos del CCG
2 de enero 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: las tablas comprimidas usan zlib 1.2.3.4
2 de enero 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Inicializando agrupación de almacenamiento intermedio, tamaño = 128.0M
2 de enero 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: inicialización completada de la agrupación de almacenamiento intermedio
2 de enero 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: el formato de archivo más alto admitido es Barracuda.
2 de enero 12:09:35 praveshp-lt mysqld: 130102 12:09:35 InnoDB: Esperando a que comiencen los hilos de fondo
2 de enero 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: 1.1.8 comenzó; número de secuencia de registro 1595685
2 de enero 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Nota] Nombre de host del servidor (dirección de enlace): '127.0.0.1'; puerto: 3307
2 de enero 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Nota] - '127.0.0.1' se resuelve en '127.0.0.1';
2 de enero 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Nota] Socket de servidor creado en IP: '127.0.0.1'.
2 de enero 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ERROR] No se puede iniciar el servidor: enlace en el socket de Unix: permiso denegado
2 de enero 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ERROR] ¿Ya tiene otro servidor mysqld ejecutándose en el socket: /var/run/mysqld/mysqld1.sock?
2 de enero 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ERROR] Abortar
2 de enero 12:09:36 praveshp-lt mysqld: 
2 de enero 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: Iniciando el apagado ...
2 de enero 12:09:36 kernel praveshp-lt: [7060.098580] type = 1400 audit (1357108776.036: 33): apparmor = "DENIED" operation = "mknod" parent = 6702 profile = "/ usr / sbin / mysqld" name = "/run/mysqld/mysqld1.sock" pid = 7039 comm = "mysqld" required_mask = "c" deny_mask = "c" fsuid = 116 ouid = 116
2 de enero 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: cierre completado; número de secuencia de registro 1595685
2 de enero 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Nota] / usr / sbin / mysqld: cierre completo

Dice permiso denegado, sin embargo, parece que he establecido los permisos correctos.

usuario117844
fuente
1. Verifique los permisos en /usr/local/mysqly /tmp. La necesidad de ser 775 como mínimo. 2. El permiso para el directorio de la base de datos mysql en la /var/lib/carpeta debe ser mysql:root ( chown mysql:root mysql)
Rinzwind
1
He revisado los permisos y parecen estar bien.
user117844
también verifique /etc/apparmor.d/usr.sbin.mysqldAquí hay una comparación entre la versión antigua y la nueva: bugs.launchpad.net/ubuntu/+source/mysql-5.1/+bug/876268/…
Rinzwind

Respuestas:

5

Al observar esta línea en la siguiente línea en el registro, parece que Apparmor está negando el acceso.

Jan  2 12:09:36 praveshp-lt kernel: [ 7060.098580] type=1400 audit(1357108776.036:33):
     apparmor="DENIED" operation="mknod" parent=6702 profile="/usr/sbin/mysqld" 
     name="/run/mysqld/mysqld1.sock" pid=7039 comm="mysqld" requested_mask="c"
     denied_mask="c" fsuid=116 ouid=116

Para permitir esto, agregue un archivo /etc/apparmor.d/local/usr.sbin.mysqldcon la entrada a continuación y reinicie MySQL.

/var/run/mysqld/mysqld1.sock w,

Gracias a Rinzwind por señalar esto.

usuario117844
fuente
¡Decir ah! : D Tomó un poco de búsqueda;)
Rinzwind
He mejorado su respuesta para usar el directorio de cambios locales de Apparmor. Al evitar el que tiene la administración de paquetes, es menos probable que se rompa más tarde al hacer actualizaciones y demás.
gertvdijk