Cambiar la ubicación del directorio de datos de MySQL en Ubuntu

Por defecto MySQL almacena los datos en /var/lib/mysql, que es un lugar perfectamente apropiado. Sin embargo, hay ocasiones que por problemas de espacio en / o por cualquier otro motivo necesitamos mover éste directorio a otra ubicación distinta. En mi caso la razón de necesitar mover el directorio de datos es porque actualmente estoy trabajando con una instancia de Amazon EC2 que solo cuenta con 8GB de espacio en el volumen principal, y como no quiero llevarme ninguna sorpresa en un futuro cuando la base de datos empiece a crecer he decidido moverla a otro volumen distinto que cuenta con 30GB de capacidad.

El volumen al que voy a mover el directorio de datos de MySQL se encuentra montado en /mnt/volume-01, por lo que para seguir este tutorial solo necesitareis sustituir la ruta de mi volumen por la ruta dónde queráis mover el directorio de datos.

IMPORTANTE
Este método solo es recomendable si estamos ejecutando una única instancia de MySQL.

Antes de empezar recomiendo hacer una copia de seguridad de nuestra base de datos para evitar perder los datos. Es un proceso muy sencillo y sin riesgos, pero más vale prevenir que curar.

Paso 1 – Comprobar la ubicación del directorio de datos de MySQL

Como ya he dicho antes, MySQL suele almacenar los datos por defecto en /var/lib/mysql, pero para asegurar lo mejor es conectarnos al servidor de MySQl y comprobarlo:

mysql -u [username] -p

Una vez dentro ejecutamos la siguiente consulta para ver dónde se encuentra el directorio de datos de nuestro MySQL:

mysql> select @@datadir;
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

En mi caso el directorio de datos se encuentra en su ubicación por defecto, pero si se encontrase en otra ruta diferente solo tendríamos que seguir el tutorial sustituyendo esta ruta por la nuestra.

Paso 2 – Mover el directorio de datos a su nueva ubicación

Una vez conocemos la ubicación de nuestro directorio de datos el siguiente paso es moverlo a su nueva ubicación, en mi caso a /mnt/volume-01. Pero antes antes de ponernos manos a la obra necesitamos parar MySQL:

sudo systemctl stop mysql

Para comprobar que hemos parado MySQL ejecutamos el siguiente comando:

sudo systemctl status mysql

La salida del comando anterior es la siguiente, y nos deberemos fijar en la última línea, que debe indicar que MySQl está parado (Stopped):

mysql.service - MySQL Community Server
 Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en
 Active: inactive (dead) since Sat 2017-01-21 10:45:06 CET; 1s ago
 Process: 1223 ExecStartPost=/usr/share/mysql/mysql-systemd-start post (code=ex
 Process: 1222 ExecStart=/usr/sbin/mysqld (code=exited, status=0/SUCCESS)
 Process: 1171 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exit
 Main PID: 1222 (code=exited, status=0/SUCCESS)

Jan 20 18:14:31 ip-172-31-30-115 systemd[1]: Starting MySQL Community Server...
Jan 20 18:14:32 ip-172-31-30-115 systemd[1]: Started MySQL Community Server.
Jan 21 10:45:04 ip-172-31-30-115 systemd[1]: Stopping MySQL Community Server...
Jan 21 10:45:06 ip-172-31-30-115 systemd[1]: Stopped MySQL Community Server.

Una vez hayamos comprobado que el servidor esté parado es momento de mover el directorio de datos a su nueva ubicación:

sudo mv /var/lib/mysql /mnt/volume-01/mysql

Es importante mover y no copiar el directorio para evitar perder los permisos o el propietario del mismo.

El siguiente paso es crear un enlace simbólico de la nueva ubicación del directorio de datos a /var/lib/mysql:

sudo ln -s /mnt/volume-01/mysql /var/lib/mysql

Con este paso nos evitamos tener que editar varios ficheros de configuración del sistema indicando la nueva ubicación del directorio de datos, ya que tanto para MySQL como para el resto de nuestro sistema “el directorio de datos va a seguir estando en su ubicación original”.

Paso 3 – Configurar reglas del control de acceso de AppArmor

Para evitar problemas por haber movido el directorio de datos necesitaremos crear un alias en AppArmor indicando la nueva ubicación del mismo. Para ello editamos el fichero de alias de AppArmor:

sudo vim /etc/apparmor.d/tunables/alias

Y añadimos la siguiente línea al final del fichero:

alias /var/lib/mysql/ -> /mnt/volume-01/mysql/,

Por último reiniciamos AppArmor para que coja los nuevos cambios:

sudo systemctl restart apparmor

Paso 4 – Arrancar Mysql

El último paso que nos queda para finalizar es volver a arrancar el servidor de MySQL:

sudo systemctl start mysql

Y comprobar que ha arrancado correctamente:

sudo systemctl status mysql

En la última línea debería de aparecer que el servidor se encuentra iniciado (Started):

. . . 
Jan 21 11:00:15 ip-172-31-30-115 systemd[1]: Started MySQL Community Server.
. . .

Por último solo nos queda comprobar que todo sigue funcionando correctamente. Para ello podemos conectarnos a MySQL y realizar alguna consulta sobre una base de datos existente o crear una nueva para comprobar que MySQL es capaz de acceder a la nueva ubicación del directorio de datos sin problemas.

Fuente original (Inglés)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *