Prueba

Tutorial de MySQL con Docker

//Arteco - Tecnologías de la información
  • :)
  • :0
  • :D
  • ;)
  • :]
foto Ramón Arnau

Ramón Arnau

Gerente de Arteco Consulting SL

Gracias a DOCKER podemos arrancar MYSQL en un CONTENEDOR sin ningún esfuerzo y de forma limpia y aislada controlando sus recursos

Levantar una base de datos con Docker es la manera más rápida de tener un entorno de programación listo para empezar a programar en un PC doméstico, sin realizar instalaciones que dejen restos de archivos y configuraciones a lo largo de todo el disco duro, simplificando enormemente los entornos de desarrollo y producción.

¿Y cómo se hace? Pues de forma resumida, Docker es una plataforma de código abierto en forma de máquina virtual que gestiona y ejecuta contenedores que empaquetan aplicaciones. What? Veamos el detalle…

Qué es Docker

Docker es un servicio de virtualización de aplicaciones dentro de unos denominados contenedores. Esto permite que las aplicaciones se ejecuten independientemente del host que los alberga. Cuando una aplicación está virtualizada su puesta en marcha por orquestadores que monitorizan el estado de las aplicaciones y la carga que soportan, fácilmente pueden levantar o apagar instancias en la nube para tolerar altas cargas de trabajo.

Docker está disponible sin coste, para las principales plataformas de escritorio y es una de las herramientas básicas de todo programador moderno. Si quieres ampliar tus conocimientos acerca del uso de ésta, revisa nuestro tutorial de Docker.

Requisitos para MySQL con Docker

Si eres usuario de Windows o Mac necesitarás tener instalado Docker Desktop en tu pc o portátil y éste debe tener cierta capacidad y potencia. Por otro lado, en el caso de que seas usuario de Windows, deberás tener la versión Professional para poder instalar Docker. Si no es así, visita el tutorial de instalación de ubuntu, el mejor sistema operativo para programar totalmente gratis y Open Source. Si eres usuario de Ubuntu o Debian asegúrate de tener en tu sistema Docker Compose también explicado en el tutorial de instalación de Docker.

Instalar MySQL con Docker

Para arrancar una base de datos MySQL con docker el proceso no puede ser más sencillo. Basta que cojamos la plantilla del fichero de configuración de Docker Compose que dejamos a continuación e invoques al comando que realizará todo el proceso.

version: '2'
services:
    mysql:
        image: 'mysql:latest'
        restart: always
        volumes:
        - './mysql_data:/var/lib/mysql'
        environment:
        - MYSQL_ROOT_PASSWORD=secure_pass_here
        ports:
        - '3306:3306'

Guarda el fichero en local con el nombre docker-compose.yml en un directorio denominado <homeusuario>/docker/mysql si estás en Unix, o \docker\mysql si estás en Windows. La configuración **guarda los datos en el subdirectorio ./mysqldata** de forma permanentemente, puesto que si no, en cada reinicio del contenedor se perderían las bases de datos alojadas. Luego, posiciónate con un terminal de comandos en el mismo directorio que el fichero y ejecuta:

docker-compose up -d

El sistema, primero descargará la imagen de los repositorios públicos de Docker al ver que no está disponible localmente y luego procederá al arranque y a la apertura del puerto indicado en el fichero de configuración. La opción -d indica a Docker que se ejecute el servicio en segundo plano.

A partir de ese momento, utiliza tu interfaz gráfico preferido para conectar a la base de datos. Si no tienes ninguno puedes adquirir el cliente gratuito y multi base de datos DBeaver.

Verificar que el servicio MySQL está activo

Para verificar que el servicio está activo y el contenedor ejecutándose de forma normal, pruebe de ejecutar el siguiente comando de docker que muestra los contenedores en funcionamiento:

docker ps

Deberá aparecer al menos una entrada correspondiente al contenedor MySQL en estado activo como se muestra a continuación:

CONTAINER ID  IMAGE    COMMAND                 CREATED       STATUS       PORTS                               NAMES
327fd50443a7  mysql:5  "docker-entrypoint.s…"  29 hours ago  Up 6 hours   0.0.0.0:3306->3306/tcp, 33060/tcp   docker_mysql_1

De ser así, puede continuar con el resto de actividades, puesto que como se indica en el fragmento de texto anterior, el contenedor se encuentra ejecutándose (status up) y escuchando en el puerto 3306.

Conectar MySQL con DBeaver

Si tenemos el cliente SQL DBeaver, una vez arrancado el contenedor, podremos conectarnos con este cliente multi plataforma ingresando los siguientes datos:

Seleccionar nueva conexión para MySQL 8+
Server host: localhost
Port: 3306
User name: root
Password: secure_pass_here

A continuación darle «Probar conexión» y si todo ha ido bien, «Finalizar». A partir de ese momento el cliente gráfico SQL podrá abrir una conexión con el contenedor mientras éste esté en ejecución.

Si no tienes mucha experiencia en el manejo de bases de datos como MySQL te recomendamos que realices una lectura del tutorial de SQL para principiantes.

Crear usuario MySQL

La creación de un usuario, diferente al administrador de sistemas (root), es un paso importante, ya que si cometemos un error ejecutando sentencias SQL o si la aplicación hace lo que no esperamos, no se vea afectado más allá del alcance que pueda tener este usuario. Para ello se suele crear siempre un usuario por cada base de datos que almacena el sistema gestor MySQL. Así todas las aplicaciones podrán funcionar de forma aislada sin interferir unas con otras. Esta manera de actuar es la más recomendada.

Para crear un usuario en MySQL necesitamos saber el nombre de usuario, la contraseña y la ip desde la que estará permitido su acceso (o si se debe dejar abierto desde cualquier dirección). Una vez tengamos claros estos parámetros, abriremos una conexión desde la forma que más nos guste y ejecutaremos la siguiente sentencia:

create user 'pepito'@'%' identified by 'pepitoPass';

El carácter ‘%’ indica que el usuario ‘pepito’ se podrá conectar desde cualquier IP, de no ser así se debe sustituir el porcentaje por la IP correspondiente, manteniendo las comillas o haber usado como host ‘localhost’ permitiendo únicamente las conexiones locales.

Cambiar contraseña en MySQL

Para cambiar la clave de un usuario en MySQL necesitamos saber a qué usuario debemos referirnos y desde dónde se va a conectar, o desde dónde está permitido que conecte, la tupla de usuario@host es necesario para identificar la línea que se desea modificar.

ALTER USER 'pepito'@'%' IDENTIFIED BY 'securePepitoPass';

Esta sentencia, supone que el usuario tenía previamente acceso desde cualquier dirección de internet.

Borrar un usuario en MySQL

Para borrar un usuario, de nuevo necesitamos la pareja usuario y host. La operación no se puede deshacer, en todo caso, si nos hemos equivocado podremos crear de nuevo el mismo usuario. De hacerlo así ni la base de datos ni los permisos que tuviera se verían afectados.

drop user 'pepito'@'%';

Crear base de datos MySQL

La creación de una base de datos en MySQL es una de las operaciones más sencillas de realizar, sólo requiere el nombre de la base de datos:

create database pepito_app;

Dar permisos a un usuario en MySQL

Una vez creado el usuario y la base de datos dentro del contenedor que ejecuta el sistema gestor SQL el siguiente paso es otorgar permisos al usuario sobre dicha base de datos. Hay toda una gama amplia de permisos que pueden tener los usuarios, para afinar con mucha precisión qué puede hacer cada uno de ellos y que estará prohibido. Esta granularidad ofrece mucho control y seguridad sobre los datos que se almacenan. Por ejemplo, algunos de los permisos que se usan con frecuencia son:

  • ALL, otorga todos los permisos sobre la base de datos
  • ALTER, permite modificar tablas, secuencias, etc…
  • CREATE, permite crear tablas, secuencias, etc…
  • DROP, permite borrar tablas, secuencias, etc…
  • DELETE, permite borrar registros en tablas
  • INSERT, permite insertar registros tablas
  • UPDATE, permite actualizar registros en tablas
  • SELECT, permite consultar tablas, secuencias, etc…

En la mayoría de las ocasiones, si tenemos un usuario por base de datos, será suficiente con dar el permiso ALL, o como mínimo los necesarios para manejar los registros de la base de datos. Sea como fuere, para dar permisos a un usuario sobre una base de datos deberíamos escribir la siguiente sentencia SQL:

grant all privileges on pepito_app.\* to 'pepito'@'%';
flush privileges;

Estas dos sentencias primero asignan todos los permisos sobre todos los objetos (.*) de la base de datos pepito_app y luego actualizan las cachés de MySQL para que vuelva a recargar la configuración de los permisos. Éstos se cachean para aumentar la velocidad con la que se resuelven los accesos sin tener que leer cada vez las tablas de configuración.

Revocar permisos a un usuario en MySQL

La eliminación de permisos sobre un usuario se hace de forma análoga a la dotación de acceso, pero en este caso se usa la palabra clave revoke de la siguiente manera:

revoke insert on pepito_app.\* from 'pepito'@'%';

Recuérdese que después de cada cambio de privilegios se debe actualizar la caché con:

flush privileges;

Borrar base de datos en MySQL

Si la creación es una de las operaciones más sencillas de realizar, el borrado será similar:

drop database pepito_app;

Todas las tablas, secuencias, índices y datos de la base de datos se eliminarán de forma permanente e irrevocable del sistema gestor. ¡Asegúrate de que introduces el nombre correcto de la base de datos!

Conclusiones

Cómo hemos aprendido, si quieres comenzar a programar de forma rápida y eficiente sin lidiar con instalaciones complicadas, Docker es la solución. Levantar una base de datos con Docker te permite tener un entorno de programación listo en minutos, sin preocuparte por dejar restos de archivos y configuraciones en tu disco duro. Entra en Arteco consulting SL y descubre este y mucho más contenido relacionado con el mundo de la programación web.

Mantente Conectado

Newsletter

¡Mantente al día con lo último en tecnología y negocios! Suscríbete a nuestra newsletter y recibe actualizaciones exclusivas directamente en tu correo.

Reunión Online

No dejes pasar la oportunidad de explorar nuevas posibilidades. ¡Agenda una reunión online con nosotros hoy y comencemos a construir juntos el futuro de tu negocio!

  • :)
  • :0
  • :D
  • ;)
  • :]