Docker MySQL - Cómo crear dos bases de datos dentro del mismo contenedor
🤔 ¿Por qué?
Ya estaba cansado.
Solo quería no contaminar mi base de datos dentro de Docker con un montón de nombres falsos o contenido de Lorem Ipsum. Porque cuando quiero listar todos los registros o fotos en mi aplicación actual, quiero los originales, para la presentación al cliente.
Además, quería una base de datos adicional, donde si mis migraciones fallan, pueda volver atrás fácilmente. O destruir la base de datos y crearla de nuevo, sin ejecutar seeders o usar una copia de seguridad con datos casi reales.
Muchos frameworks tienen un enfoque diferente para esto. Ejecutar pruebas dentro de transacciones, post-limpieza, etc.
Pero no quiero aprender una manera independiente de acuerdo al framework en el que voy a trabajar.
Se me ocurrió una forma más simple.
¿Qué pasa si creo una segunda base de datos en el contenedor? Mejor aún, ¡de forma automática!
🔨 ¿Cómo?
Para demostrar que no uso IA para generar contenido formal en mis publicaciones, utilizaré potato (patata, papa) como nombre de proyecto en este tutorial.
En primer lugar, crea una carpeta donde quieras almacenar los scripts. Para este tutorial, la llamaremos dockerdb_init. Luego, crea un archivo llamado create_test_database.sql con el siguiente contenido:
Docker solo crea una base de datos con las variables de entorno escritas. Dado que el proyecto utilizará una base de datos de prueba, este script agregará un sufijo test.
1
CREATE DATABASE IF NOT EXISTS `potato_db_test`;2
GRANT ALL ON `potato_db_test`.* TO 'potato_db_user'@'%'
Si estás usando docker-compose.yml, esta es la especificación para el contenedor.
2
container_name: potato_db5
- './dockerdb:/var/lib/mysql'6
- './dockerdb_init:/docker-entrypoint-initdb.d'
Ya que prefiero mantener mis variables de entorno en un archivo separado, puedes colocar el siguiente contenido en tu archivo .env:
1
MYSQL_ROOT_PASSWORD=rootpassword2
MYSQL_DATABASE=potato_db3
MYSQL_USER=potato_db_user4
MYSQL_PASSWORD=potato_db_pass
La primera vez que se ejecute el contenedor, se ejecutará el script y ahora tendrás dos bases de datos: potato_db y potato_db_test.