Mover el directorio de datos de MySql

A partir de los hitos que día a día superamos en la evolución del desarrollo de la herramienta de Escucha Activa, me gustaría ir compartiendo los problemas, trucos y en general el conocimiento que vamos adquiriendo de todos los elementos que envuelven a un desarrollo de esta envergadura.

El siguiente tiene que ver con la posibilidad/necesidad de mover el directorio de datos de MySql, algo que siguiendo los siguientes pasos es relativamente sencillo, pero que los problemas que nos encontramos hasta unir toda la información siguiente no fueron pocos, sobre todo los relacionados con el paso 5.

La instalación por defecto de MySql en un sistema Linux, al igual que la mayoría de aplicaciones, se realiza sobre la partición principal (/). En el caso de MySql los directorios de datos también se almacenan bajo esta partición y esto en algunos casos en los que esta partición dispone de un espacio de almacenamiento muy limitado es bastante peligroso puesto que el sistema rápidamente puede quedarse sin espacio, según vaya creciendo la información almacenada en la bbdd, y provocar inconsistencia de datos, corrupción de tablas e incluso la caida repetida del sistema por falta de espacio.

Este fue nuestro caso en nuestra primera instancia almacenada en los servidores Amazon AWS EC2, dónde por ejemplo las instancias pequeñas dividen el espacio de 160Gb de HDD en una partición principal con aproximadamente 8Gb y una partición montada sobre /mnt con el resto.

Por lo tanto se recomienda mover el directorio de datos de MySql de la partición principal a la partición montada sobre /mnt. Para hacerlo seguir los siguientes pasos:

1. Se hace una copia de las tablas de MySql

2. Se para el servicio

service mysql stop

3. Se copia todo el contenido del directorio de datos:

rsync -av /var/lib/mysql /mnt

4. Se modifica la ruta de la configuración de mysql al directorio de datos, editando el fichero my.cnf

vi /etc/mysql/my.cnf

Y se modifica la siguiente línea:

datadir = /mnt/mysql #Antes era /var/lib/mysql

5. Se modifican los permisos de acceso de mysql al anterior directorio, editando el fichero /etc/apparmor.d/usr.sbin.mysqld

vi /etc/apparmor.d/usr.sbin.mysqld

Y añadimos las siguientes líneas:

/mnt/mysql/ r,
/mnt/mysql/** rwk,

6. Se inicia el servidor MySql

service mysql start

Y con esto tendríamos los datos fuera de la partición principal. Muy importante el paso 5 que no está muy documentado y sin el cual obtendremos el siguiente error al intentar arrancar MySql sin éxito:


111030 12:09:35 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
111030 12:09:35 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
111030 12:09:36 InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.

Submit a Comment

Your email address will not be published. Required fields are marked *