Saltar a contenido

Entorno

En esta páginas vamos a agrupar las herramientas que vamos a utilizar en el curso, con las instrucciones o comandos necesarios para su puesta en marcha.

Herramientas

Las herramientas que vamos a utilizar a lo largo del curso son:

Docker

En este módulo vamos a utilizar Docker como herramienta para probar las bases de datos. En pocas palabras, Docker permite lanzar contenedores que contienen los servicios que necesitemos. En este módulo no vamos a aprender a crear contenedores, sólo a lanzar contenedores ya existentes.

Para ello, el primer paso es instalar Docker Desktop en tu ordenador.

MariaDB

MariaDB es un SGBD relacional basado en MySQL, ampliamente utilizado en el desarrollo de aplicaciones web y multiplataforma.

MariaDB dispone de un interfaz basada en páginas web llamada PhpMyAdmin, que a través de un servidor web, por ejemplo Apache, permite administrar las bases de datos de un servidor desde cualquier equipo de la red.

Este software dispone de opciones para realizar prácticamente cualquier operación que se pueda realizar vía SQL. Permite gestionar las bases de datos de un servidor, crear, borrar y modificar tablas, lanzar comandos SQL, exportar e importar información, recopilar estadísticas, hacer copias de seguridad, etc. Además dispone de un pequeño diseñador que permite gestionar las relaciones de las tablas.

Para lanzar tanto MariaDB com PhpMyAdmin mediante Docker, el primer paso es crear la definición de los dos contenedores en un archivo Docker Compose, el cual hemos llamado docker-compose-mariadb.yml), donde además de la definición de ambos contenedores, configuraremos el usuario para acceder al SBGD, así como el volumen para los datos:

docker-compose-mariadb.yml
services:
  mariadb:
    image: mariadb:latest
    container_name: mdb
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=pruebas
      - MYSQL_USER=s8a
      - MYSQL_PASSWORD=s8a
    volumes:
      - mariabd_data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin
    container_name: phpma
    ports:
      - 8080:80
    environment:
      - PMA_HOST=mariadb
    depends_on:
      - mariadb

volumes:
  mariabd_data:

Para lanzar los contenedores, utilizaremos el siguiente comando:

docker compose -p mariadb-s8a -f docker-compose-mariadb.yml up -d 

Cliente mariadb

Primero nos conectamos al contenedor (el cual en el archivo docker-compose hemos llamado mdb):

docker exec -it mdb bash

A continuación, con el cliente del SGBD, nos conectamos al servidor (al ser localhost no hace falta que lo indiquemos) pasándole el usuario (-u nomusuario) y la contraseña (-pcontraseña)`:

mariadb -u s8a -ps8a pruebas

Y obtendremos información como que nos hemos conectado correctamente, y en la última línea muestra que ha conectado con la bd pruebas:

root@e6dbf61ca4db:/# mariadb -u s8a -ps8a pruebas
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 11.4.2-MariaDB-ubu2404 mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [pruebas]>

Si quieres más información sobre como conectar con MariaDB y todos los parámetros disponibles, consulta la documentación oficial.

s8a superusuario

Si queremos evitar usar el usuario root para crear bases de datos e importar esquemas, es muy cómodo configurar el usuario que hemos creado para que pueda acceder a todos los recursos. Para ello, una vez hemos entrado con root:

mariadb -u root -proot

Le damos todos permisos a todos los recursos al usuario s8a:

GRANT ALL PRIVILEGES ON *.* TO 's8a'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

La gestión de permisos la estudiaremos en la unidad 9.- Lenguaje SQL: Control de Datos DCL y Transacciones TCL.

Login en PhpMyAdmin

PhpMyAdmin

Para acceder a la interfaz gráfica de PhpMyAdmin, desde nuestro navegador web, nos conectamos a http://localhost:8080, donde veremos el interfaz de login, y entramos con el usuario s8a y la contraseña s8a que habíamos configurado previamente en la definición del contenedor.

Una vez dentro, en el menú lateral veremos las bases de datos a las cuales tenemos acceso, así como, una vez seleccionada una en concreto, las tablas con sus columnas e índices, y en la parte derecha, las diferentes opciones mediante el menú superior (desde herramientas para insertar o buscar registros, como importar o exportar los datos u obtener una representación gráfica del modelo físico):

Estructura de una tabla en PhpMyAdmin

Aprendiendo PhpMyAdmin

Aunque en la red existen multitud de recursos con artículos y tutoriales sobre PhpMyAdmin, a lo largo del curso iremos utilizando la herramienta y viendo las posibilidades que ofrece conforme las vayamos necesitando.

PostgreSQL

PostgreSQL es un SGBD relacional que sigue un modelo cliente-servidor, soportando accesos concurrentes de múltiples usuarios.

Por ello, necesitamos lanzar un contenedor con el servidor al cual nos conectaremos desde el cliente por línea de comandos psql o desde el cliente gráfico PgAdmin. Por ello, en el fichero de configuración docker-compose-postgres.yml de Docker Compose tenemos dos servicios:

docker-compose-postgres.yml
services:
  db:
    image: postgres
    container_name: pg
    restart: always
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=s8a
      - POSTGRES_PASSWORD=s8a
      - POSTGRES_DB=pruebas
    volumes:
      - pg-data:/var/lib/postgresql/data
  pgadmin:
    image: dpage/pgadmin4
    container_name: pgadmin
    restart: always
    ports:
      - "5050:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@s8a.com
      PGADMIN_DEFAULT_PASSWORD: admin
    volumes:
      - pgadmin-data:/var/lib/pgadmin

volumes:
  pg-data:
  pgadmin-data:

Tras crear este archivo en nuestro sistema, podemos crear los contenedores mediante:

docker compose -p pg-s8a -f docker-compose-postgres.yml up -d 

Cliente psql

Primero nos conectamos al contenedor (el cual en el archivo docker-compose hemos llamado pg):

docker exec -it pg bash

A continuación, con el cliente del SGBD, nos conectamos al servidor (al ser localhost no hace falta que lo indiquemos) pasándole el usuario (-U nomusuario) y luego rellenando la contraseña (s8a):

psql -U s8a pruebas

Obteniendo información de la versión instalada y en la última línea muestra que ha conectado con la bd pruebas:

root@6475b31d89f4:/# psql -U s8a pruebas
psql (16.4 (Debian 16.4-1.pgdg120+1))
Type "help" for help.

pruebas=#

PgAdmin

Una vez arrancados los contenedores, accederemos a http://localhost:5050/ y tras introducir los datos del usuario administrador (admin@s8a.com / admin), veremos el interfaz de inicio de la herramienta de administración PgAdmin.

El siguiente paso es crear la conexión con el servidor. Para ello, creamos un nuevo servidor mediante la opción Agregar un nuevo servidor y en los datos de configuración, indicamos los mismos datos que hemos utilizado al definir el contenedor (en el nombre del servidor podemos poner el nombre del contenedor o su identificador pg, así como el usuario s8a y la contraseña s8a):

Conectando con el servidor en PgAdmin

Error - role does not exists

Si al crear la conexión al servidor recibís algún tipo de error similar a "rol inexistente", es probable que los volúmenes y las versiones de los contenedores no concuerden. Si es así, elimina los contenedores y los volúmenes, y vuelve a ejecutar el script de Docker Compose.

Una vez dentro, tendremos un cuadro de mandos para monitorizar el SGBD, así como poder navegar por las estructuras de la base de datos:

Estructura de una tabla en PgAdmin

AWS RDS

Además de utilizar ambos SGBD en local, podemos hacer uso de servicios en el cloud como AWS RDS.

DBeaver

Además de utilizar los clientes propios de cada SGBD, así como herramientas web específicas, es muy común utilizar un cliente gráfico multisolución como DBeaver.

El primer paso es crear la conexión al SGBD, mediante la opción del menú y tras seleccionar el SGBD, indicaremos los datos de la conexión. En este caso, como ya no lo hacemos desde dentro del contenedor, el host siempre será localhost, y los usuarios, los indicados anteriormente.

Interfaz de DBeaver para PostgreSQL