El datadir de MySQL es el directorio donde se almacenan en disco los datos de las bases de datos del motor. Por defecto, el paquete mysql-server inicializa el datadir en /var/lib/mysql. Con frecuencia, esta configuración provoca que se llene el filesystem /var (cuando se encuentra configurado en una partición separada) dejando sin funcionamiento al motor y probablemente al resto del sistema.

Llegado este caso es común ver errores ERROR 2013 (HY000): Lost connection to MySQL server y ERROR 2002 (HY000): Can't connect to local MySQL server. En este punto es necesario reinicializar el datadir del motor antes de reiniciar el sistema. Las instrucciones en este artículo deberán realizarse sólo luego de haber recuperado el motor y estando en perfecto funcionamiento.

Este artículo explica cómo mover el datadir de MySQL para evitar que se llene el sistema de archivos en /var.

Antes de comenzar se debe elegir un nuevo filesystem donde alojar el datadir. Típicamente el sistema de archivos /home cuenta con espacio suficiente, con lo cual es recomendable moverlo a /home/mysql o /home/mysl/datadir.

Verificar cuánto espacio queda disponible en el /home (si está instalado en una partición aparte) de acuerdo a la columna "Avail" en la salida de df -h | grep home.

Por supuesto esto debe hacerse antes de que el motor se corrompa.

Se supone que queda espacio en disco suficiente en /home o en su defecto en / (si /home no está montado en una partición separada). Para mover el datadir simplemente se debe detener el motor, mover el directorio a su nueva locación y dejar un enlace simbólico:

$ sudo su
# service mysql stop
# mv /var/lib/mysql /home/mysql
# ln -s /home/mysql /var/lib/mysql

Ahora sólo resta iniciar MySQL nuevamente:

# service mysql start

AppArmor

En caso de distribuciones Ubuntu con AppArmor, antes de iniciar nuevamente el servidor MySQL es necesario habilitar el acceso al nuevo directorio. Para ello, editar la configuración para el binario mysqld en el archivo /etc/apparmor.d/usr.sbin.mysqld y reemplazar las siguientes líneas:

  # Allow data dir access
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,

Por:

  # Allow data dir access
  /var/lib/mysql/ r,
  /var/lib/mysql/** rwk,
  /home/mysql/ r,
  /home/mysql/** rwk,

De forma alternativa, es posible agregar la siguiente línea en el archivo /etc/apparmor.d/tunnable/alias:

alias /var/lib/mysql/ -> /home/mysql/,

En cualquiera de los casos, es necesario reiniciar AppArmor:

# service apparmor reload

Por último, iniciar MySQL:

# service mysql start

Compartí este artículo