Saltar a contenido

DBA / Database Admin - Guía de Entorno

Esta guía detalla las herramientas necesarias para que Claude Code pueda ayudarte eficazmente en administración y optimización de bases de datos.

Resumen de Capacidades

Capacidad Herramientas Requeridas
Administración SQL psql, mysql, sqlcmd
NoSQL mongosh, redis-cli
Migraciones Flyway, Liquibase, Alembic
Backup/Restore pg_dump, mysqldump
Análisis de queries EXPLAIN, pg_stat_statements
GUI Clients DBeaver, pgAdmin, DataGrip

PostgreSQL

Cliente CLI

# Windows
winget install PostgreSQL.PostgreSQL  # Incluye psql

# macOS
brew install libpq
brew link --force libpq

# Linux
sudo apt install postgresql-client-16

# Verificar
psql --version

# Conexión
psql -h localhost -U postgres -d mydb
psql "postgresql://user:pass@host:5432/db?sslmode=require"

# Comandos útiles en psql
\l                    # Listar bases de datos
\c dbname             # Conectar a BD
\dt                   # Listar tablas
\d tablename          # Describir tabla
\di                   # Listar índices
\du                   # Listar usuarios
\x                    # Formato extendido
\timing               # Mostrar tiempo de ejecución
\e                    # Editar en editor externo
\i script.sql         # Ejecutar script

Herramientas de Administración

# pg_dump - Backup
pg_dump -h localhost -U postgres mydb > backup.sql
pg_dump -Fc mydb > backup.dump  # Formato comprimido
pg_dump --schema-only mydb > schema.sql

# pg_restore
pg_restore -d newdb backup.dump

# psql para restaurar SQL plano
psql -d newdb -f backup.sql

# vacuumdb - Mantenimiento
vacuumdb --all --analyze

# reindexdb
reindexdb --all

pgAdmin (GUI)

# Windows
winget install PostgreSQL.pgAdmin

# macOS
brew install --cask pgadmin4

# Docker
docker run -d -p 5050:80 \
  -e PGADMIN_DEFAULT_EMAIL=admin@admin.com \
  -e PGADMIN_DEFAULT_PASSWORD=admin \
  dpage/pgadmin4

MySQL / MariaDB

Cliente CLI

# Windows
winget install Oracle.MySQL

# macOS
brew install mysql-client

# Linux
sudo apt install mysql-client

# Conexión
mysql -h localhost -u root -p mydb

# Comandos útiles
SHOW DATABASES;
SHOW TABLES;
DESCRIBE tablename;
SHOW CREATE TABLE tablename;
SHOW PROCESSLIST;
SHOW ENGINE INNODB STATUS;
EXPLAIN SELECT ...;

Herramientas de Administración

# mysqldump - Backup
mysqldump -u root -p mydb > backup.sql
mysqldump --all-databases > full_backup.sql
mysqldump --single-transaction mydb > backup.sql  # InnoDB

# Restaurar
mysql -u root -p mydb < backup.sql

# mysqlcheck - Verificar/reparar
mysqlcheck --all-databases --check
mysqlcheck --all-databases --optimize

MongoDB

mongosh (Shell moderno)

# Windows
winget install MongoDB.Shell

# macOS
brew install mongosh

# Linux
wget -qO- https://www.mongodb.org/static/pgp/server-7.0.asc | sudo tee /etc/apt/trusted.gpg.d/server-7.0.asc
# Añadir repo y: sudo apt install mongodb-mongosh

# Conexión
mongosh "mongodb://localhost:27017"
mongosh "mongodb+srv://user:pass@cluster.mongodb.net/db"

# Comandos útiles
show dbs
use mydb
show collections
db.users.find()
db.users.find().explain("executionStats")
db.stats()
db.collection.getIndexes()

MongoDB Tools

# Instalar
# https://www.mongodb.com/try/download/database-tools

# Backup
mongodump --uri="mongodb://localhost:27017/mydb" --out=/backup

# Restore
mongorestore --uri="mongodb://localhost:27017/mydb" /backup/mydb

# Export/Import JSON
mongoexport --db=mydb --collection=users --out=users.json
mongoimport --db=mydb --collection=users --file=users.json

Redis

redis-cli

# Windows (WSL2 recomendado)
# En WSL2: sudo apt install redis-tools

# macOS
brew install redis

# Linux
sudo apt install redis-tools

# Conexión
redis-cli
redis-cli -h localhost -p 6379
redis-cli -u redis://user:pass@host:6379

# Comandos útiles
PING
INFO
KEYS *
GET key
SET key value
DBSIZE
FLUSHDB
MONITOR         # Ver comandos en tiempo real
SLOWLOG GET 10  # Queries lentas

Herramientas de Migración

Flyway

# Windows
winget install Redgate.Flyway

# macOS
brew install flyway

# Docker
docker run --rm flyway/flyway -url=jdbc:postgresql://host/db migrate

# Comandos
flyway migrate
flyway info
flyway validate
flyway repair
flyway clean  # ¡CUIDADO! Borra todo

Liquibase

# Windows
winget install Liquibase.Liquibase

# macOS
brew install liquibase

# Comandos
liquibase update
liquibase rollback-count 1
liquibase status
liquibase diff
liquibase generate-changelog

Alembic (Python/SQLAlchemy)

pip install alembic

alembic init alembic
alembic revision --autogenerate -m "Initial"
alembic upgrade head
alembic downgrade -1
alembic history

GUI Clients

DBeaver (Universal - Recomendado)

# Windows
winget install dbeaver.dbeaver

# macOS
brew install --cask dbeaver-community

# Soporta: PostgreSQL, MySQL, SQLite, MongoDB, Redis, Oracle, SQL Server...

DataGrip (JetBrains)

# Windows
winget install JetBrains.DataGrip

# macOS
brew install --cask datagrip

Azure Data Studio (SQL Server)

# Windows
winget install Microsoft.AzureDataStudio

# macOS
brew install --cask azure-data-studio

Análisis y Optimización

PostgreSQL

-- Activar estadísticas
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

-- Queries más lentas
SELECT query, calls, total_exec_time, mean_exec_time
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;

-- Uso de índices
SELECT schemaname, tablename, indexname, idx_scan, idx_tup_read
FROM pg_stat_user_indexes
ORDER BY idx_scan ASC;

-- Tablas sin índices
SELECT relname, seq_scan, idx_scan
FROM pg_stat_user_tables
WHERE idx_scan = 0 AND seq_scan > 1000;

-- EXPLAIN ANALYZE
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT ...;

MySQL

-- Queries lentas (activar slow_query_log)
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;

-- Status de InnoDB
SHOW ENGINE INNODB STATUS;

-- Queries por segundo
SHOW GLOBAL STATUS LIKE 'Questions';

-- EXPLAIN
EXPLAIN FORMAT=JSON SELECT ...;

Docker para Desarrollo

# docker-compose.db.yml
version: '3.8'

services:
  postgres:
    image: postgres:16
    environment:
      POSTGRES_USER: dev
      POSTGRES_PASSWORD: dev
      POSTGRES_DB: devdb
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data

  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: devdb
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

  mongodb:
    image: mongo:7
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: admin
    ports:
      - "27017:27017"
    volumes:
      - mongo_data:/data/db

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  postgres_data:
  mysql_data:
  mongo_data:

Comandos que Claude Code Ejecutará

# PostgreSQL
psql -c "SELECT version();"
psql -f script.sql
pg_dump -Fc mydb > backup.dump
pg_restore -d newdb backup.dump

# MySQL
mysql -e "SHOW DATABASES;"
mysqldump mydb > backup.sql
mysql mydb < backup.sql

# MongoDB
mongosh --eval "db.stats()"
mongodump --out=/backup
mongorestore /backup

# Redis
redis-cli PING
redis-cli INFO

# Migraciones
flyway migrate
alembic upgrade head

Verificación del Entorno

#!/bin/bash
echo "=== Verificación Entorno DBA ==="

echo -e "\n--- PostgreSQL ---"
psql --version 2>/dev/null || echo "psql no instalado"

echo -e "\n--- MySQL ---"
mysql --version 2>/dev/null || echo "mysql client no instalado"

echo -e "\n--- MongoDB ---"
mongosh --version 2>/dev/null || echo "mongosh no instalado"

echo -e "\n--- Redis ---"
redis-cli --version 2>/dev/null || echo "redis-cli no instalado"

echo -e "\n--- Migraciones ---"
flyway --version 2>/dev/null || echo "Flyway no instalado"

echo -e "\n=== Verificación Completa ==="

Recursos