Cambiar el directorio de datos de MySQL o MariaDB en CentOS 7

Además de ejecutar mysql_secure_installation luego de instalar el servidor de base de datos, hay otro punto importante que quizás queramos tener en cuenta. Los datos que guardamos ocupan espacio de disco, por defecto en el directorio /var/lib/mysql. Si nosotros disponemos de una unidad de red podemos cambiar el directorio de datos al punto de montaje correspondiente. Sin ir más lejos, una unidad Samba nos serviría para cumplir con este objetivo. Debemos tener cuidado de que el crecimiento esperado de las bases de datos en /var no interfiera con otros servicios que utilizan el mismo filesystem.

Cambiar el directorio de datos

Para cambiar el directorio de datos de MySQL o MariaDB en CentOS 7, debemos seguir estos pasos:

Paso 1 – Verificar el directorio de datos actual. En la Fig. 1 vemos que se trata de /var/lib/mysql:

mysql -u root -p -e "SELECT @@datadir;"
Cambiar el directorio de datos de MySQL o MariaDB
Figura 1 – Cambiar el directorio de datos de MySQL o MariaDB

Paso 2 – Detener el servicio y asegurarnos de que no continúe ejecutándose:

systemctl stop mariadb
systemctl is-active mariadb

El comando anterior debe devolver la palabra inactive como salida si el servicio está en efecto detenido.

Paso 3 – Copiar los datos al nuevo directorio

Ahora podemos copiar los datos presentes en /var/lib/mysql al nuevo directorio de datos (/mnt/datos-mysql, por ejemplo):

cp -R -p /var/lib/mysql/* /mnt/datos-mysql

Paso 4 – Editar el archivo de configuración /etc/my.cnf de la siguiente manera. Bajo las secciones indicadas deberemos agregar las líneas que aparecen a continuación:

[mysql]
datadir=/mnt/mysql-data
socket=/mnt/mysql-data/mysql.sock

y

[client]
port=3306
socket=/mnt/mysql-data/mysql.sock

Paso 5 – Agregar el contexto de SELinux necesario para que podamos almacenar los archivos de las bases de datos en /mnt/datos-mysql, y luego reiniciar el servicio. También podemos verificar que el directorio de datos haya cambiado utilizando el mismo comando que en el Paso 1.

semanage fcontext -a -t mysqld_db_t "/mnt/mysql-data(/.*)?"
restorecon -R /mnt/mysql-data
systemctl start mariadb
mysql -u root -p -e "SELECT @@datadir;"

¡Eso es todo! En solamente 5 pasos habremos cambiado el directorio de datos de MySQL o MariaDB.

Nos leemos en el próximo post.

4 comentarios en «Cambiar el directorio de datos de MySQL o MariaDB en CentOS 7»

  1. no me funciona ningun metodo de cambio de directorio de mariadb en centos 7, ninguno!!!!
    He probado todos los pasos y al momento de hacer start al mariadb aparece un error.
    Mi nuevo directorio es: /datab/mysql

    # systemctl start mariadb
    Job for mariadb.service failed because the control process exited with error code. See «systemctl status mariadb.service» and «journ
    alctl -xe» for details.

    #systemctl status mariadb
    mariadb.service – MariaDB database server
    Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
    Active: failed (Result: exit-code) since mar 2017-03-28 14:12:23 -03; 1min 59s ago
    Process: 2957 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=1/FAILURE)
    Process: 2956 ExecStart=/usr/bin/mysqld_safe –basedir=/usr (code=exited, status=0/SUCCESS)
    Process: 2927 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS)
    Main PID: 2956 (code=exited, status=0/SUCCESS)

    mar 28 14:12:22 microserver systemd[1]: Starting MariaDB database server…
    mar 28 14:12:22 microserver mysqld_safe[2956]: 170328 14:12:22 mysqld_safe Logging to ‘/var/log/mariadb/mariadb.log’.
    mar 28 14:12:22 microserver mysqld_safe[2956]: 170328 14:12:22 mysqld_safe Starting mysqld daemon with databases from /datab/mysql
    mar 28 14:12:23 microserver systemd[1]: mariadb.service: control process exited, code=exited status=1
    mar 28 14:12:23 microserver systemd[1]: Failed to start MariaDB database server.
    mar 28 14:12:23 microserver systemd[1]: Unit mariadb.service entered failed state.
    mar 28 14:12:23 microserver systemd[1]: mariadb.service failed.

    Ayuda por favor.

  2. ¿Qué te devuelve el siguiente comando luego de intentar iniciar el servicio? journalctl -xe
    Asumiendo que estás utilizando CentOS 7 o alguna otra distribución con SELinux habilitado, ¿estás seguro que no omitiste el Paso 5 de este post?
    Probá en deshabilitar SELinux con setenforce 0 y volvé a intentar iniciar mariadb.
    Comentame cómo te fue.

    1. Hola, he podido resolver el problema.
      En el paso 5, justo después de realizar el semanage y el restorecon, se debe realizar (antes de levantar mariadb) el cambio de propietario de la carpeta nueva:

      chown -R mysql:mysql /mnt/mysql-data

      con esto ya se puede levantar el server, continuando con el systemctl start mariadb y la comprobación del @@datadir;

      Saludos.

Deja una respuesta

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