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;"
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»
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.
¿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.
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.
Me funcionó tambien con los pasos de arriba y cambiando los permisos de la carpeta.
Los comentarios están cerrados.