Solución de la comunidad

Instalar MySQL en CasaOS con almacenamiento persistente de Docker

A 2023 CasaOS tutorial introduced MySQL installation; current Docker Official Image guidance now defines versions, persistence, and initialization variables.

Instala MySQL en CasaOS con la imagen oficial de Docker, un volumen persistente /var/lib/mysql y una etiqueta de versión explícita. No dependas de una captura de pantalla antigua de 2023 ni de una etiqueta flotante latest para una base de datos que te importe.

En septiembre de 2026, la imagen oficial de Docker publica MySQL 8.4 LTS, además de las líneas más recientes 9.x y de innovación. Para servicios autoalojados de larga duración, 8.4 es una base de compatibilidad sensata, a menos que tu aplicación admita explícitamente una versión principal más reciente.

Usa la imagen oficial de MySQL

La imagen oficial de MySQL para Docker actual es mantenida por la comunidad de Docker y el equipo de MySQL.

Elige deliberadamente una etiqueta de versión

Usa una etiqueta de versión principal/LTS fijada, como:

mysql:8.4

en lugar de seguir ciegamente latest, que puede pasar a una versión principal más reciente con cambios de compatibilidad.

Configuración persistente de CasaOS

  • Imagen: mysql:8.4
  • Puerto del contenedor: 3306
  • Volumen persistente: ruta de AppData del host → /var/lib/mysql
  • MYSQL_ROOT_PASSWORD: contraseña raíz de arranque segura
  • Opcional: MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD

No expongas el puerto 3306 a Internet

Si otra aplicación Docker en el mismo host necesita MySQL, coloca ambos servicios en una red Docker compartida y usa el nombre del servicio. A menudo no necesitas publicar el puerto 3306 en absoluto.

Crea un usuario de aplicación en lugar de usar root

Usa MYSQL_DATABASE, MYSQL_USER, y MYSQL_PASSWORD durante la primera inicialización para crear una base de datos y una cuenta específicas para la aplicación.

Reserva root para la administración y la recuperación.

Comprende primero las variables de entorno de la primera ejecución

La imagen oficial inicializa la base de datos únicamente cuando el directorio de datos está vacío. Cambiar posteriormente las variables de entorno de arranque no reescribe automáticamente las cuentas ni las bases de datos existentes.

Realiza copias de seguridad con volcados lógicos

Para realizar copias de seguridad portátiles, usa mysqldump o el patrón documentado de volcado y restauración de la imagen oficial, en lugar de copiar archivos activos de la base de datos mientras MySQL está escribiendo.

Conecta phpMyAdmin u otra aplicación por nombre de servicio

En una red Docker compartida, una aplicación web puede conectarse a MySQL usando un nombre de servicio o de contenedor, como mysql. Dentro de otro contenedor, localhost se refiere a ese mismo contenedor.

La guía de redes de Docker explica ese modelo de red de contenedores.

Comprueba el estado de MySQL antes de conectar otras aplicaciones

Después del primer inicio, no conectes inmediatamente las aplicaciones de producción a la base de datos. Comprueba los registros del contenedor y verifica que MySQL haya completado la inicialización en lugar de permanecer en un ciclo de reinicio.

docker logs mysql
docker exec -it mysql mysqladmin -uroot -p ping

Un servidor en buen estado debería responder después de que finalice la configuración inicial de la base de datos. El primer arranque puede tardar más porque la imagen crea las tablas del sistema, los usuarios y la base de datos solicitada.

Planifica el juego de caracteres y la zona horaria antes de importar los datos

Las aplicaciones pueden tener requisitos específicos de intercalación, juego de caracteres o zona horaria. Si vas a migrar una base de datos existente, compara la versión principal de MySQL y la configuración del servidor anterior antes de importarla.

No supongas que una aplicación probada con MySQL 8.0 será compatible automáticamente con MySQL 9.x simplemente porque el contenedor se inicia. Fija la versión principal que requiera el proveedor de la aplicación.

Separa el almacenamiento de la base de datos de las carpetas compartidas generales

Los archivos de datos de MySQL deben almacenarse en un almacenamiento local fiable, con permisos coherentes y baja latencia. No los coloques /var/lib/mysql en un montaje SMB poco fiable o una unidad extraíble solo porque tenga más capacidad.

Si el host de CasaOS tiene un SSD y un conjunto de discos duros de mayor capacidad, el SSD suele ser una mejor ubicación para la base de datos, mientras que los volcados programados pueden copiarse al almacenamiento de copias de seguridad más grande.

Preguntas frecuentes

¿Debo usar mysql:latest?

Para un entorno de autoalojamiento similar a producción, prefiere una etiqueta principal/LTS elegida deliberadamente para que una extracción rutinaria no cambie inesperadamente de versión principal.

¿Dónde deben persistir los datos de MySQL?

Asigna una carpeta AppData del host a /var/lib/mysql.

¿Necesito publicar el puerto 3306?

No, si solo otros contenedores de la misma red de Docker necesitan la base de datos.

¿Puedo cambiar MYSQL_ROOT_PASSWORD más adelante editando la variable del contenedor?

No de forma fiable después de la inicialización. Administra las cuentas existentes de la base de datos desde el propio MySQL.