Si trabajas con MySQL en un entorno Linux, es fundamental saber dónde se almacenan físicamente los archivos de tus bases de datos. Esta información es crucial para tareas como realizar copias de seguridad, migrar datos, solucionar problemas de espacio en disco o simplemente entender la estructura del sistema de archivos de tu servidor. Aunque la ubicación por defecto es estándar, puede variar, y conocer los métodos para verificarla y cambiarla te dará un control total sobre tus datos.

En este artículo, exploraremos la ubicación típica de los archivos de datos de MySQL en sistemas Linux, te mostraremos cómo confirmarla utilizando la línea de comandos y explicaremos el proceso para modificar esta ruta si tus necesidades lo requieren. Preparado para sumergirte en el corazón del almacenamiento de datos de MySQL?
- La Ubicación Predeterminada: /var/lib/mysql
- Verificando la Ruta Actual del Directorio de Datos
- Accediendo al Directorio de Datos
- Cambiando la Ubicación del Directorio de Datos (datadir)
- Paso 1: Detener el Servicio MySQL
- Paso 2: Copiar los Datos al Nuevo Directorio
- Paso 3: Actualizar el Archivo de Configuración
- Paso 4: Ajustar Permisos del Nuevo Directorio
- Paso 5: Configurar SELinux/AppArmor (si están activos)
- Paso 6: Iniciar el Servicio MySQL
- Paso 7: Verificar el Nuevo datadir en MySQL
- Preguntas Frecuentes (FAQ)
- ¿Qué archivos se encuentran en el directorio de datos?
- ¿Puedo simplemente mover los archivos manualmente sin detener MySQL?
- ¿Necesito hacer una copia de seguridad antes de cambiar el datadir?
- ¿Qué pasa si cambio el datadir pero no muevo los archivos?
- ¿Es seguro tener el datadir en un disco de red (NFS, SMB)?
- ¿Cómo afecta SELinux o AppArmor al cambio de datadir?
- Conclusión
La Ubicación Predeterminada: /var/lib/mysql
En la mayoría de las instalaciones estándar de MySQL en distribuciones Linux, como Ubuntu, Debian, CentOS o Fedora, los archivos que componen tus bases de datos residen en un directorio específico dentro del sistema de archivos. Siguiendo las convenciones del Filesystem Hierarchy Standard (FHS), que dicta dónde deben ubicarse los diferentes tipos de archivos en sistemas tipo Unix, los datos variables de las aplicaciones suelen ir en el directorio /var. Dentro de /var/lib, se almacenan los archivos de estado variable para programas y servicios. Por lo tanto, la ubicación por defecto para los datos de MySQL es típicamente /var/lib/mysql.

Este directorio contiene subdirectorios para cada base de datos que hayas creado (excepto las bases de datos del sistema como information_schema o performance_schema, que son virtuales o tienen una estructura diferente). Dentro de cada subdirectorio de base de datos, encontrarás los archivos correspondientes a las tablas (como .frm para la estructura, .ibd o .MYD/.MYI dependiendo del motor de almacenamiento como InnoDB o MyISAM) y otros archivos relacionados con el estado de la base de datos.
Verificando la Ruta Actual del Directorio de Datos
Es posible que la ubicación por defecto haya sido modificada durante la instalación o por un administrador anterior. Para estar completamente seguro de dónde se encuentran tus datos, puedes consultar la configuración activa de MySQL. La ruta del directorio de datos se define mediante el parámetro datadir en el archivo de configuración de MySQL.
Método 1: Consultar Archivos de Configuración
Los archivos de configuración de MySQL pueden estar dispersos en varios lugares, pero el principal suele encontrarse en /etc/mysql/ o /etc/my.cnf, o dentro de directorios incluidos como /etc/mysql/conf.d/ o /etc/mysql/mysql.conf.d/. Puedes usar la herramienta grep para buscar el parámetro datadir en estos archivos.
Un comando común para buscar en los directorios de configuración de MySQL es:
$ sudo grep -R 'datadir' /etc/mysql/
Este comando buscará recursivamente el término 'datadir' en todos los archivos dentro de /etc/mysql/. La opción -R indica búsqueda recursiva. La salida te mostrará la línea exacta donde se define datadir y el archivo al que pertenece. Por ejemplo, podría mostrar algo como:
/etc/mysql/mysql.conf.d/mysqld.cnf:datadir = /var/lib/mysql
Esto confirma que la ruta actual del directorio de datos es /var/lib/mysql y que está definida en el archivo /etc/mysql/mysql.conf.d/mysqld.cnf.
Método 2: Consultar MySQL en Tiempo de Ejecución
También puedes preguntar directamente al servidor MySQL cuál es su directorio de datos configurado. Esto se puede hacer de varias maneras, una de las cuales es usar el comando mysqld con opciones que muestran la configuración compilada y los valores por defecto.
Un comando útil para esto es:
$ mysqld --verbose --help | grep ^datadir
Este comando ejecuta el binario del servidor MySQL con opciones para mostrar información detallada (--verbose --help) y luego filtra la salida para encontrar la línea que comienza con 'datadir'. La salida debería ser similar a:
datadir /var/lib/mysql
Esto te da el valor actual que el servidor MySQL está utilizando para su directorio de datos.
Accediendo al Directorio de Datos
Una vez que has identificado la ruta del directorio de datos (probablemente /var/lib/mysql), puedes navegar a él usando el comando cd. Sin embargo, debido a que este directorio contiene archivos críticos del sistema que pertenecen al usuario mysql (el usuario bajo el cual se ejecuta el servicio MySQL), necesitarás permisos elevados para acceder y listar su contenido.
Intenta navegar al directorio:
$ cd /var/lib/mysql
Es muy probable que obtengas un error de 'Permiso denegado' si tu usuario actual no tiene los permisos necesarios. Para superar esto, debes usar sudo para ejecutar comandos con privilegios de superusuario.
Para listar el contenido del directorio, usa ls con sudo:
$ sudo ls -l /var/lib/mysql
Si necesitas interactuar más a fondo dentro de ese directorio (por ejemplo, para examinar archivos específicos, aunque no se recomienda manipular estos archivos directamente a menos que sepas exactamente lo que estás haciendo), puedes iniciar una sesión de superusuario con sudo su:
$ sudo su
Una vez que eres root (verás que tu prompt cambia, a menudo terminando en #), puedes navegar al directorio sin problemas de permisos:
# cd /var/lib/mysql
Y listar su contenido:
# ls -l
Verás una lista de directorios (uno por cada base de datos) y archivos de sistema de MySQL (como logs binarios, archivos de estado, etc.).
Cambiando la Ubicación del Directorio de Datos (datadir)
Existen varias razones por las que podrías querer cambiar la ubicación por defecto del directorio de datos de MySQL:
- Espacio en Disco: El disco donde se encuentra
/varpuede quedarse sin espacio, mientras que tienes otro disco o partición con mucho espacio libre. - Rendimiento: Mover los datos a un disco más rápido (como un SSD) puede mejorar el rendimiento de la base de datos.
- Seguridad: Aunque menos común, podrías querer aislar los datos de MySQL en una partición separada por razones de seguridad o cumplimiento.
- Organización: Preferencia personal o estándares de la organización para la ubicación de datos de aplicaciones.
Cambiar el datadir requiere modificar el archivo de configuración de MySQL y mover los archivos de datos existentes a la nueva ubicación.
Paso 1: Detener el Servicio MySQL
Antes de hacer cualquier cambio, es crucial detener el servicio MySQL para asegurar la consistencia de los datos y evitar que el servidor escriba en el directorio antiguo mientras lo mueves.
$ sudo systemctl stop mysql
Verifica el estado para asegurarte de que se detuvo correctamente:
$ sudo systemctl status mysql
Paso 2: Copiar los Datos al Nuevo Directorio
Crea el nuevo directorio donde deseas almacenar los datos. Asegúrate de que sea accesible y tenga espacio suficiente.
$ sudo mkdir /nueva/ruta/para/mysql
Ahora, copia todo el contenido del directorio de datos antiguo (/var/lib/mysql) al nuevo directorio. Es importante usar una herramienta como rsync con las opciones correctas para preservar permisos, propietarios y enlaces simbólicos.
$ sudo rsync -av /var/lib/mysql/ /nueva/ruta/para/mysql/
La opción -a es un archivo que copia de forma recursiva y preserva permisos, tiempos, grupos, propietarios y enlaces simbólicos. La opción -v muestra el progreso.
Después de copiar, es una buena práctica verificar que los archivos se copiaron correctamente.
Paso 3: Actualizar el Archivo de Configuración
Ahora debes editar el archivo de configuración de MySQL para apuntar al nuevo directorio. Como vimos antes, este archivo suele estar en /etc/mysql/mysql.conf.d/mysqld.cnf o similar. Usa un editor de texto con privilegios de superusuario:
$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Dentro del archivo, busca la sección [mysqld]. Debería haber una línea que comienza con datadir. Cambia la ruta existente a la nueva ruta donde copiaste los datos.
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /nueva/ruta/para/mysql
log-error = /var/log/mysql/error.log
# ... otras configuraciones ...
Si la línea datadir no existe, agrégala bajo la sección [mysqld]. Guarda los cambios y cierra el editor.
Paso 4: Ajustar Permisos del Nuevo Directorio
Es fundamental que el nuevo directorio y su contenido pertenezcan al usuario y grupo bajo el cual se ejecuta el servicio MySQL, que generalmente es mysql.
$ sudo chown -R mysql:mysql /nueva/ruta/para/mysql
La opción -R aplica el cambio de propietario recursivamente a todo el contenido del directorio.
Paso 5: Configurar SELinux/AppArmor (si están activos)
Si tu sistema utiliza SELinux o AppArmor (común en Ubuntu y Debian), es posible que necesites configurar políticas para permitir que el proceso mysqld acceda al nuevo directorio. Los pasos exactos varían según si usas SELinux o AppArmor y la distribución específica.
Para AppArmor en Ubuntu, podrías necesitar editar el perfil de AppArmor para MySQL (generalmente en /etc/apparmor.d/usr.sbin.mysqld) y agregar reglas para permitir el acceso al nuevo directorio, y luego recargar el perfil.
Para SELinux, podrías necesitar restaurar el contexto de seguridad por defecto para MySQL en el nuevo directorio:
$ sudo restorecon -Rv /nueva/ruta/para/mysql
Si esto no es suficiente, podría ser necesario crear una política de SELinux personalizada o cambiar el contexto de seguridad del nuevo directorio para que coincida con el esperado por MySQL. Consultar los logs de auditoría de SELinux (/var/log/audit/audit.log) puede ayudar a diagnosticar problemas.
Paso 6: Iniciar el Servicio MySQL
Una vez que la configuración y los permisos están correctos, intenta iniciar el servicio MySQL.
$ sudo systemctl start mysql
Verifica el estado para asegurarte de que inició sin errores:
$ sudo systemctl status mysql
También revisa el archivo de log de errores de MySQL (la ruta se encuentra en el archivo de configuración, a menudo /var/log/mysql/error.log) para cualquier mensaje de error relacionado con el directorio de datos.
Paso 7: Verificar el Nuevo datadir en MySQL
Finalmente, conéctate a la base de datos y verifica que el servidor está utilizando la nueva ruta:
$ mysql -u tu_usuario -p
Una vez dentro del cliente MySQL, ejecuta la siguiente consulta:
SHOW VARIABLES LIKE 'datadir';
La salida debería mostrar la nueva ruta que configuraste.
Si todo funciona correctamente, y estás seguro de que los datos se están leyendo y escribiendo en la nueva ubicación, puedes considerar eliminar el directorio de datos antiguo para liberar espacio, pero es prudente mantenerlo como respaldo temporal hasta que estés completamente seguro de que la migración fue exitosa.
Preguntas Frecuentes (FAQ)
Aquí respondemos algunas preguntas comunes sobre la ubicación de los datos de MySQL en Linux.
¿Qué archivos se encuentran en el directorio de datos?
El directorio de datos contiene subdirectorios para cada base de datos. Dentro de ellos, encontrarás archivos que representan tus tablas. Para tablas InnoDB, verás archivos .ibd (un archivo por tabla por defecto, aunque esto es configurable). Para tablas MyISAM, verás archivos .frm (formato/estructura), .MYD (datos) y .MYI (índices). También hay archivos de log binario (si están habilitados), archivos de log de errores, archivos de estado del servidor y, en el directorio raíz del datadir, archivos del espacio de tablas del sistema InnoDB (como ibdata1).
¿Puedo simplemente mover los archivos manualmente sin detener MySQL?
No, bajo ninguna circunstancia debes intentar mover o copiar los archivos del directorio de datos de MySQL mientras el servidor está en funcionamiento. Esto resultará en corrupción de datos, bases de datos inconsistentes y fallos del servidor. Siempre detén el servicio MySQL antes de manipular su directorio de datos.
¿Necesito hacer una copia de seguridad antes de cambiar el datadir?
Sí, es altamente recomendable realizar una copia de seguridad completa de tus bases de datos antes de intentar cambiar el datadir. Aunque el proceso de copiar los archivos debería ser seguro si se detiene el servidor, tener un respaldo te protege contra errores humanos, problemas de permisos inesperados, fallos de hardware o problemas con SELinux/AppArmor que podrían impedir que MySQL se inicie correctamente en la nueva ubicación.
¿Qué pasa si cambio el datadir pero no muevo los archivos?
Si cambias el parámetro datadir en el archivo de configuración y reinicias MySQL sin haber copiado los archivos de datos existentes a la nueva ubicación, MySQL iniciará con un directorio de datos vacío en la nueva ruta. Tus bases de datos y tablas existentes no estarán accesibles. Es crucial que los datos se copien a la nueva ubicación ANTES de iniciar MySQL con la nueva configuración.
¿Es seguro tener el datadir en un disco de red (NFS, SMB)?
Generalmente, no se recomienda almacenar el directorio de datos de MySQL en sistemas de archivos de red como NFS o SMB debido a problemas de latencia, rendimiento, bloqueo de archivos y consistencia de caché. Puede funcionar para configuraciones no críticas o de prueba, pero para entornos de producción, es mejor usar almacenamiento local (discos duros, SSDs) o sistemas de almacenamiento compartido diseñados específicamente para bases de datos (como Fibre Channel SANs o iSCSI con sistemas de archivos apropiados).
¿Cómo afecta SELinux o AppArmor al cambio de datadir?
SELinux y AppArmor son mecanismos de seguridad que restringen lo que los procesos (como mysqld) pueden hacer y a qué archivos pueden acceder. Si mueves el directorio de datos a una ubicación que no está permitida por la política de seguridad activa, SELinux o AppArmor impedirán que MySQL acceda a los archivos, lo que causará que el servidor no pueda iniciar o funcione incorrectamente. Debes asegurarte de que la política de seguridad permita el acceso al nuevo directorio de datos.
Conclusión
Saber dónde se almacenan los archivos de tus bases de datos MySQL en Linux es una habilidad esencial para cualquier administrador de sistemas o desarrollador que trabaje con este popular sistema de gestión de bases de datos. La ubicación por defecto es /var/lib/mysql, pero siempre puedes verificarla consultando el parámetro datadir en los archivos de configuración o a través del propio servidor MySQL.
Cambiar la ubicación del directorio de datos es un proceso que implica detener el servicio, copiar los datos, modificar el archivo de configuración, ajustar permisos y potencialmente configurar SELinux o AppArmor, seguido de un reinicio del servicio. Realizar estos pasos correctamente asegura que tus datos estén seguros y accesibles en su nueva ubicación, permitiéndote optimizar el uso del espacio en disco o mejorar el rendimiento.
Con esta información, tienes el conocimiento necesario para localizar y gestionar la ubicación física de tus valiosos datos de MySQL en sistemas Linux.
Si quieres conocer otros artículos parecidos a ¿Dónde MySQL Guarda tus Datos en Linux? puedes visitar la categoría MySQL.

Aprende mas sobre MySQL