Puede darse el caso en el que necesitemos mover el directorio en el cuál una base de datos MySQL almacena la información, por ejemplo, a un filesystem mas grande.
El proceso es sencillo y existen varios tutoriales para realizarlo, por ejemplo:
Sin embargo, en Centos / RHEL hay un par de detalles a tomar en cuenta, especialmente aquellos que requieren modificar el contexto de seguridad SeLinux de los directorio.
El primer paso es detener la ejecución del servicio, en mi caso el paquete instalado es mariadb-server:
systemctl stop mariadb
Mover el directorio.
Ya que detuvimos el servicio vamos a realizar una copia del directorio de datos (/var/lib/mysql en la mayoría de los casos) supongamos que el destino será /disk2/mysql:
sudo rsync -av /var/lib/mysql/ /disk2/mysql
Renombramos el directorio original para evitar que nos de un falso positivo al hacer la prueba del servicio:
sudo mv /var/lib/mysql /var/lib/mysql.bak
Configuración.
Ahora indicaremos en la configuración del servidor y del cliente la ubicación del nuevo directorio, así como el path del archivo de socket:
Editamos el archivo /etc/my.cnf.
Modificamos los parámetros datadir y socket de la siguiente manera:
[mysqld]
datadir=/disk2/mysql
socket=/disk2/mysql/mysql.sock
datadir=/disk2/mysql
socket=/disk2/mysql/mysql.sock
Editamos también el archivo /etc/my.cnf/client.cnf
[client]
port=3306
socket=/disk2/mysql.sock
port=3306
socket=/disk2/mysql.sock
Ahora nos aseguramos que mysql pueda usar en el directorio asignando el contexto de seguridad:
chcon -R -u system_u -r object_r -t mysqld_db_t /disk2/mysql/
Podemos proceder a iniciar el servicio:
systemctl start mariadb
Si todo ha salido bien, no obtendremos mensaje de error alguno y podremos acceder normalmente a nuestra base de datos, para poder validar que efectivamente el cambio esté aplicado:
$ mysql -u root -p
MariaDB [(none)] > select @@datadir;
MariaDB [(none)] > select @@datadir;
+----------------------------+
| @@datadir |
+----------------------------+
| /disk2/mysql/ |
+----------------------------+
1 row in set (0.01 sec)
Configuración Apache-PHP
Esta última parte aplica únicamente si tenemos un webserver apache ejecutando en el mismo servidor y usando la base de datos.
Es necesario decirle a apache dónde buscar el socket de la base de datos, para esto editamos los siguientes dos parámetros en el archivo /etc/php.ini
MYSQL_PDO
pdo_mysql.default_socket=/disk2/mysql/mysql.sock
MYSQL
mysql.default_socket = /disk2/mysql/mysql.sock
pdo_mysql.default_socket=/disk2/mysql/mysql.sock
MYSQL
mysql.default_socket = /disk2/mysql/mysql.sock
Reiniciamos también el webserver:
systemctl restart httpd
Listo, de este modo habremos realizado el cambio de directorio.
Comentarios