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)¶
Azure Data Studio (SQL Server)¶
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 ==="