Saltar a contenido

MySQL

1. MySQL

1.1 Crear el archivo docker-compose.yml

cat > ~/ia-lab/services/motores-bd/mysql/docker-compose.yml << 'EOF'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql-server
    restart: unless-stopped
    env_file:
      - .env
    ports:
      - "3306:3306"
    volumes:
      - ../../../data/mysql:/var/lib/mysql
      - /mnt/d/academia/bd:/backups
    command: >
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
      --bind-address=0.0.0.0
    networks:
      - ia-lab-network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

networks:
  ia-lab-network:
    external: true
EOF

Habilitar UFW y permitir el puerto 3306 (MySQL) en el host:

sudo ufw allow 3306/tcp
sudo ufw enable
sudo ufw status

1.2 Crear el archivo .env

cat > ~/ia-lab/services/motores-bd/mysql/.env << 'EOF'
TZ=America/Bogota
MYSQL_ROOT_PASSWORD=MiNiCo57**
MYSQL_DATABASE=tecnogua
EOF

Editar la clave del .env en clase:

cd ~/ia-lab/services/motores-bd/mysql
sudo nano .env

Cambiar:

MYSQL_ROOT_PASSWORD=123456
Ctrl + o  ==>  para guardar
Ctrl + x  ==>  para salir

1.3 Crear README.md

cat > ~/ia-lab/services/motores-bd/mysql/README.md << 'EOF'
# MySQL 8.0 - Motor de Base de Datos

> **Acceso remoto habilitado.** Puerto expuesto en `0.0.0.0:3306`.
> **Usuario por defecto:** `root`
> **Base de datos inicial:** `tecnogua`
> **Password:** `MiNiCo57**`

---

## Conectar desde WSL (local)

```bash
sudo docker exec -it mysql-server mysql -u root -p
# Password: MiNiCo57**

1.4 Levantar MySQL

cd ~/ia-lab/services/motores-bd/mysql 
sudo docker compose up -d

Verificar que está corriendo:

sudo docker ps | grep mysql-server sudo docker logs mysql-server --tail 20

1.5 Conectar localmente a MySQL

sudo docker exec -it mysql-server mysql -u root -p

Ya dentro del motor:

Crear una base de datos

CREATE DATABASE nombre_bd CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

En clase (distinta a tecnogua, que ya crea el contenedor):

CREATE DATABASE bd_clase1 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Listar todas las bases de datos

SHOW DATABASES;

Eliminar una base de datos

DROP DATABASE nombre_bd;

Entrar a una base de datos

USE nombre_bd;

En clase:

USE bd_clase1;

Listar las tablas

SHOW TABLES;

Listar los campos de una tabla

DESCRIBE nombre_tabla;

O también:

SHOW COLUMNS FROM nombre_tabla;

Salir del motor

EXIT;

1.6 Crear un usuario PROPIO con ACCESO REMOTO

Conectate primero como root, luego ejecuta.

Parte explicativa. Reemplaza usuario, password y nombre_bd por tus valores:

-- Crear la base de datos
CREATE DATABASE nombre_bd CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Crear usuario propio con acceso desde CUALQUIER equipo (%)
CREATE USER 'usuario'@'%' IDENTIFIED BY 'password';

-- Dar permisos sobre la base de datos
GRANT ALL PRIVILEGES ON nombre_bd.* TO 'usuario'@'%';
FLUSH PRIVILEGES;

Aplicado en clase. Copiar y pegar (Usuario: admin / Contraseña: 123456):

CREATE USER 'admin'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';
FLUSH PRIVILEGES;

1.7 Conectar remotamente desde cualquier equipo

** Hacerlo desde DBEAVER **

Reemplaza los valores correspondientes en Host

En el terminal de wsl-ubuntu

ip a

Luego, buscar la IP a la linea de Eth0

y esa direccion colocarla en Host

  • Host: IP_SERVIDOR
  • Port: 3306
  • User: root
  • Password: MiNiCo57**
  • Database: tecnogua

1.8 Backup de una base de datos

sudo docker exec mysql-server mysqldump -u root -pMiNiCo57** tecnogua > /mnt/d/academia/bd/backup_tecnogua_$(date +%Y%m%d).sql

1.9 Variables clave del .env

Variable Descripcion
TZ Zona horaria
MYSQL_ROOT_PASSWORD Password del usuario root (MiNiCo57**)
MYSQL_DATABASE Base de datos inicial (tecnogua)