⚙️ Configuración de la Base de Datos y Migraciones Iniciales

⚙️ Configuración de la Base de Datos y Migraciones Iniciales

      En este nuevo paso, aprenderemos a conectar nuestro proyecto Laravel con una base de datos para almacenar información como usuarios, productos, pedidos y más. Laravel utiliza migraciones para crear y mantener las tablas dentro de la base de datos de forma organizada y controlada.

      Este proceso es fundamental, ya que una aplicación sin base de datos no puede guardar ni gestionar datos. Vamos a trabajar tanto la configuración del archivo .env como la ejecución de las migraciones iniciales que Laravel trae por defecto.

      A lo largo de este tema también abordaremos los errores más comunes de conexión con MySQL y sus soluciones, asegurando que tu entorno esté completamente funcional antes de pasar a la creación de modelos y controladores.

📋 Índice de pasos a seguir

  1. Verificar el servicio MySQL en Docker
  2. Configurar la conexión en el archivo .env
  3. Crear la base de datos del proyecto
  4. Probar la conexión desde Laravel
  5. Ejecutar las migraciones iniciales
  6. Solución de errores comunes

      Una vez completados estos pasos, tu aplicación estará lista para comenzar a construir las tablas personalizadas del sistema, como las de usuarios, productos o pedidos.

🐬 Paso 11.1: Verificar el servicio MySQL en Docker

      Antes de conectar Laravel con la base de datos, debemos asegurarnos de que el contenedor de MySQL esté ejecutándose correctamente dentro de Docker. Si el servicio MySQL no está activo o presenta errores, Laravel no podrá establecer conexión y mostrará mensajes como SQLSTATE[HY000] [2002] Connection refused o php_network_getaddresses: getaddrinfo failed.

Verificar contenedores activos

      Desde tu terminal de Ubuntu (WSL2), ejecuta el siguiente comando para ver los contenedores actualmente en ejecución:

docker ps

      Si Docker está funcionando correctamente, deberías ver una salida similar a esta:

CONTAINER ID   IMAGE                    COMMAND                  STATUS           PORTS
a8b4c12f3e91   mysql/mysql-server:8.0   "/entrypoint.sh mysq…"   Up 2 minutes     0.0.0.0:3306->3306/tcp
b2c1a6d9f8e3   sail-8.4/app             "start-container"        Up 2 minutes     0.0.0.0:80->80/tcp

      En este caso, el contenedor mysql/mysql-server:8.0 corresponde al servicio de base de datos. Si aparece con el estado Up, significa que MySQL está en ejecución y accesible.

Reiniciar el servicio MySQL

      Si no aparece ningún contenedor de MySQL o si el estado es Exited, puedes reiniciarlo fácilmente ejecutando:

./vendor/bin/sail up -d

      Este comando inicia todos los servicios definidos en el archivo docker-compose.yml, incluyendo MySQL, Laravel y otros contenedores necesarios.

Verificar estado de salud del contenedor

      Una vez iniciado, puedes comprobar si MySQL está “sano” dentro de Docker con el siguiente comando:

docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

      Si ves algo como (healthy) al final del estado, significa que MySQL está listo para aceptar conexiones.

Errores comunes y soluciones

⚠️ Error 1: “Connection refused”

Ocurre cuando el contenedor MySQL no está en ejecución o aún no ha terminado de inicializarse.

✅ Solución:
  • Ejecuta nuevamente ./vendor/bin/sail up -d.
  • Espera unos segundos antes de intentar reconectar.
⚠️ Error 2: “Temporary failure in name resolution”

Este error indica que Laravel no puede encontrar el host MySQL definido en el archivo .env.

✅ Solución:
  • Abre el archivo .env y asegúrate de que DB_HOST sea igual a mysql (no localhost).
  • Guarda los cambios y reinicia Sail:
    ./vendor/bin/sail down && ./vendor/bin/sail up -d
⚠️ Error 3: “Access denied for user”

Ocurre si las credenciales de conexión a MySQL no coinciden con las configuradas en el archivo .env.

✅ Solución:
  • Verifica que los valores de DB_DATABASE, DB_USERNAME y DB_PASSWORD sean correctos.
  • Si cambiaste las credenciales, recuerda reiniciar Sail.

🟢 Una vez que MySQL esté corriendo correctamente dentro de Docker, podrás continuar con el siguiente paso: Configurar la conexión en el archivo .env.

🗄️ Paso 11.3: Crear la Base de Datos del Proyecto

      Ahora que tenemos el servicio MySQL funcionando correctamente con Laravel Sail y el archivo .env configurado, vamos a crear la base de datos que utilizará nuestro proyecto. Esta base de datos almacenará todas las tablas y datos del sistema: usuarios, productos, pedidos y más.

1️⃣ Verificar que los contenedores están en ejecución

Antes de acceder a MySQL, asegúrate de que los servicios de Docker y Sail estén activos. Ejecuta el siguiente comando desde la carpeta del proyecto:

./vendor/bin/sail up -d

Si todo está bien, verás mensajes indicando que los contenedores mysql y laravel.test se iniciaron correctamente. Puedes comprobar su estado con:

./vendor/bin/sail ps

2️⃣ Acceder al contenedor MySQL

Una vez que el contenedor MySQL esté en funcionamiento, accede a él usando el siguiente comando:

./vendor/bin/sail mysql -u sail -p

Te pedirá la contraseña del usuario sail, que por defecto es:

password

3️⃣ Crear la base de datos

Una vez dentro del cliente MySQL (verás el prompt mysql>), ejecuta el siguiente comando para crear la base de datos:

CREATE DATABASE laravel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

🔹 laravel es el nombre de la base de datos, y debe coincidir con la variable DB_DATABASE definida en tu archivo .env.
🔹 Usamos utf8mb4 para asegurar compatibilidad con todos los caracteres (incluidos emojis).

4️⃣ Verificar que la base de datos se creó correctamente

Para comprobar que la base de datos existe, ejecuta:

SHOW DATABASES;

Deberías ver laravel listado entre las bases de datos disponibles.

5️⃣ Salir del cliente MySQL

Cuando termines, puedes salir del cliente MySQL escribiendo:

exit;

6️⃣ Consejos y buenas prácticas

  • Usa nombres de bases de datos claros y relacionados con tu proyecto.
  • Mantén las credenciales en tu archivo .env y no las subas a repositorios públicos.
  • Si trabajas con varios entornos (local, pruebas, producción), usa bases de datos diferentes.

🟢 Con esto, la base de datos laravel está lista. Laravel podrá ahora crear las tablas automáticamente mediante las migraciones y modelos.

Publicar un comentario

0 Comentarios