1.
COMANDOS DE CONEXIÓN Y ADMINISTRACIÓN DEL SISTEMA
mysql - Cliente de línea de comandos principal
Uso: Conectarse a MySQL y ejecutar comandos SQL
# Conectar como usuario jpauli (pedirá contraseña)
mysql -u jpauli -p
# Conectar a una base de datos específica
mysql -u jpauli -p mi_base_datos
# Conectar a servidor remoto
mysql -u jpauli -p -h localhost -P 3306 mi_base_datos
# Conectar y ejecutar archivo SQL
mysql -u jpauli -p mi_base_datos < script.sql
# Conectar sin contraseña (si está configurado)
mysql -u jpauli mi_base_datos
# Ejecutar comando directo sin entrar al cliente
mysql -u jpauli -p -e "SHOW DATABASES;"
mysqladmin - Herramienta de administración
Uso: Administrar servidor MySQL desde línea de comandos
# Verificar si el servidor está corriendo
mysqladmin -u jpauli -p ping
# Ver estado del servidor
mysqladmin -u jpauli -p status
# Ver variables del sistema
mysqladmin -u jpauli -p variables
# Ver procesos activos
mysqladmin -u jpauli -p processlist
# Crear base de datos
mysqladmin -u jpauli -p create mi_nueva_db
# Eliminar base de datos
mysqladmin -u jpauli -p drop mi_base_datos
# Cambiar contraseña de usuario
mysqladmin -u jpauli -p password nueva_contraseña
# Refrescar privilegios
mysqladmin -u jpauli -p flush-privileges
# Parar el servidor (requiere privilegios)
mysqladmin -u root -p shutdown
mysqlshow - Mostrar información de bases de datos
Uso: Ver información sobre bases de datos, tablas y columnas
# Mostrar todas las bases de datos
mysqlshow -u jpauli -p
# Mostrar tablas de una base de datos
mysqlshow -u jpauli -p mi_base_datos
# Mostrar columnas de una tabla
mysqlshow -u jpauli -p mi_base_datos empleados
# Mostrar información detallada
mysqlshow -u jpauli -p --status mi_base_datos
2. COMANDOS DENTRO DEL CLIENTE MYSQL
Comandos de información y navegación
SHOW DATABASES - Listar bases de datos
Uso: Ver todas las bases de datos disponibles
SHOW DATABASES;
-- Muestra todas las BD a las que jpauli tiene acceso
USE - Seleccionar base de datos
Uso: Cambiar a una base de datos específica
USE mi_base_datos;
USE empresa_jpauli;
SHOW TABLES - Listar tablas
Uso: Ver todas las tablas en la base de datos actual
SHOW TABLES;
-- Ver tablas con patrón
SHOW TABLES LIKE 'emp%';
-- Ver información detallada de tablas
SHOW TABLE STATUS;
DESCRIBE / DESC - Describir estructura de tabla
Uso: Mostrar información sobre columnas de una tabla
DESCRIBE empleados;
DESC empleados;
-- Información más detallada
SHOW COLUMNS FROM empleados;
-- Ver solo columnas específicas
SHOW COLUMNS FROM empleados LIKE 'email%';
SHOW - Comandos de información general
Uso: Obtener información del sistema y configuración
-- Ver usuarios
SELECT User, Host FROM mysql.user;
-- Ver privilegios del usuario actual
SHOW GRANTS;
-- Ver privilegios de usuario específico
SHOW GRANTS FOR 'jpauli'@'localhost';
-- Ver motores de almacenamiento
SHOW ENGINES;
-- Ver variables del sistema
SHOW VARIABLES;
SHOW VARIABLES LIKE 'version%';
-- Ver status del servidor
SHOW STATUS;
-- Ver procesos activos
SHOW PROCESSLIST;
-- Ver índices de una tabla
SHOW INDEX FROM empleados;
Comandos de archivos y utilidades
source - Ejecutar archivo SQL
Uso: Ejecutar comandos desde un archivo
source /home/jpauli/scripts/crear_tablas.sql;
\. /home/jpauli/scripts/datos_iniciales.sql
tee - Registrar salida en archivo
Uso: Guardar comandos y resultados en archivo
tee /home/jpauli/session_log.txt;
-- Todos los comandos se guardarán en el archivo
SHOW DATABASES;
SELECT * FROM empleados;
notee; -- Detener el registro
system - Ejecutar comandos del sistema
Uso: Ejecutar comandos de shell desde MySQL
system ls -la /home/jpauli/backups/;
\! pwd
3. COMANDOS SQL - DEFINICIÓN DE DATOS (DDL)
CREATE DATABASE - Crear bases de datos
Uso: Crear nuevas bases de datos con opciones específicas
-- Base de datos básica
CREATE DATABASE empresa_jpauli;
-- Con conjunto de caracteres específico
CREATE DATABASE tienda_jpauli
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- Con todas las opciones
CREATE DATABASE sistema_jpauli
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci
COMMENT 'Base de datos principal de jpauli';
CREATE TABLE - Crear tablas
Uso: Definir estructura de tablas
-- Tabla básica
CREATE TABLE empleados (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE,
salario DECIMAL(10,2),
fecha_ingreso DATE DEFAULT (CURRENT_DATE),
activo BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Tabla con motor específico y opciones
CREATE TABLE departamentos (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
jefe_id INT,
presupuesto DECIMAL(15,2),
FOREIGN KEY (jefe_id) REFERENCES empleados(id) ON DELETE SET NULL,
INDEX idx_nombre (nombre)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Tabla temporal
CREATE TEMPORARY TABLE temp_empleados (
id INT,
nombre VARCHAR(100),
salario DECIMAL(10,2)
);
ALTER TABLE - Modificar tablas
Uso: Cambiar estructura de tablas existentes
-- Agregar columna
ALTER TABLE empleados ADD COLUMN telefono VARCHAR(15);
-- Agregar columna con posición específica
ALTER TABLE empleados ADD COLUMN direccion TEXT AFTER email;
-- Modificar columna
ALTER TABLE empleados MODIFY COLUMN salario DECIMAL(12,2);
ALTER TABLE empleados CHANGE COLUMN telefono celular VARCHAR(20);
-- Eliminar columna
ALTER TABLE empleados DROP COLUMN telefono;
-- Agregar índice
ALTER TABLE empleados ADD INDEX idx_email (email);
-- Agregar clave foránea
ALTER TABLE empleados ADD CONSTRAINT fk_departamento
FOREIGN KEY (departamento_id) REFERENCES departamentos(id);
-- Eliminar restricción
ALTER TABLE empleados DROP FOREIGN KEY fk_departamento;
-- Cambiar motor de almacenamiento
ALTER TABLE empleados ENGINE=MyISAM;
-- Renombrar tabla
ALTER TABLE empleados RENAME TO trabajadores;
DROP - Eliminar objetos
Uso: Eliminar bases de datos, tablas, etc.
-- Eliminar tabla
DROP TABLE empleados;
-- Eliminar tabla si existe
DROP TABLE IF EXISTS temporal;
-- Eliminar base de datos
DROP DATABASE mi_base_datos;
-- Eliminar base de datos si existe
DROP DATABASE IF EXISTS test_db;
-- Eliminar índice
DROP INDEX idx_email ON empleados;
CREATE INDEX - Crear índices
Uso: Mejorar rendimiento de consultas
-- Índice simple
CREATE INDEX idx_apellido ON empleados(apellido);
-- Índice compuesto
CREATE INDEX idx_nombre_dept ON empleados(nombre, departamento_id);
-- Índice único
CREATE UNIQUE INDEX idx_codigo ON empleados(codigo_empleado);
-- Índice de texto completo
CREATE FULLTEXT INDEX idx_descripcion ON productos(descripcion);
-- Índice con longitud específica
CREATE INDEX idx_email_partial ON empleados(email(10));
4. COMANDOS SQL - MANIPULACIÓN DE DATOS (DML)
INSERT - Insertar datos
Uso: Agregar nuevos registros
-- Inserción básica
INSERT INTO empleados (nombre, email, salario)
VALUES ('Juan Pauli', '[email protected]', 50000.00);
-- Inserción múltiple
INSERT INTO empleados (nombre, email, salario) VALUES
('María García', '[email protected]', 55000.00),
('Carlos López', '[email protected]', 48000.00),
('Ana Rodríguez', '[email protected]', 52000.00);
-- Inserción desde consulta
INSERT INTO empleados_backup (nombre, email, salario)
SELECT nombre, email, salario FROM empleados WHERE departamento_id = 1;
-- Inserción con ON DUPLICATE KEY UPDATE
INSERT INTO empleados (id, nombre, email, salario)
VALUES (1, 'Juan Pauli', '
[email protected]', 55000.00)
ON DUPLICATE KEY UPDATE salario = VALUES(salario);
-- Inserción ignorando duplicados
INSERT IGNORE INTO empleados (email, nombre)
VALUES ('
[email protected]', 'Juan Pauli');
SELECT - Consultar datos
Uso: Recuperar información de las tablas
-- Consulta básica
SELECT * FROM empleados;
-- Consulta con filtros
SELECT nombre, salario FROM empleados
WHERE salario > 50000 AND departamento_id = 1;
-- Con ordenamiento y límite
SELECT nombre, email, salario FROM empleados
ORDER BY salario DESC, nombre ASC
LIMIT 10 OFFSET 5;
-- Con agrupación
SELECT departamento_id, COUNT(*) as total, AVG(salario) as salario_promedio
FROM empleados
GROUP BY departamento_id
HAVING COUNT(*) > 5;
-- Consulta con JOIN
SELECT e.nombre, d.nombre as departamento, e.salario
FROM empleados e
INNER JOIN departamentos d ON e.departamento_id = d.id
WHERE e.salario > 45000;
-- Subconsultas
SELECT nombre, salario FROM empleados
WHERE salario > (SELECT AVG(salario) FROM empleados);
-- UNION
SELECT nombre, 'Empleado' as tipo FROM empleados
UNION
SELECT nombre, 'Cliente' as tipo FROM clientes;
-- Funciones de ventana (MySQL 8.0+)
SELECT nombre, salario,
RANK() OVER (ORDER BY salario DESC) as ranking_salario
FROM empleados;
UPDATE - Actualizar datos
Uso: Modificar registros existentes
-- Actualización básica
UPDATE empleados
SET salario = 55000.00
WHERE nombre = 'Juan Pauli';
-- Actualización múltiple
UPDATE empleados
SET salario = salario * 1.10,
updated_at = NOW()
WHERE departamento_id = 1;
-- Actualización con JOIN
UPDATE empleados e
JOIN departamentos d ON e.departamento_id = d.id
SET e.salario = e.salario * 1.05
WHERE d.nombre = 'Ventas';
-- Actualización con LIMIT
UPDATE empleados
SET activo = FALSE
WHERE ultimo_acceso < DATE_SUB(NOW(), INTERVAL 1 YEAR)
LIMIT 100;
DELETE - Eliminar datos
Uso: Remover registros de las tablas
-- Eliminación básica
DELETE FROM empleados WHERE nombre = 'Juan Pauli';
-- Eliminación con condiciones múltiples
DELETE FROM empleados
WHERE salario < 30000 AND fecha_ingreso < '2020-01-01';
-- Eliminación con JOIN
DELETE e FROM empleados e
JOIN departamentos d ON e.departamento_id = d.id
WHERE d.activo = FALSE;
-- Eliminación con LIMIT
DELETE FROM logs
WHERE fecha < DATE_SUB(NOW(), INTERVAL 30 DAY)
LIMIT 1000;
-- Vaciar tabla completamente (más rápido que DELETE)
TRUNCATE TABLE tabla_temporal;
5. COMANDOS DE BACKUP Y RESTAURACIÓN
mysqldump - Realizar backups
Uso: Crear respaldos de bases de datos
# Backup completo de base de datos
mysqldump -u jpauli -p empresa_jpauli > backup_empresa.sql
# Backup con estructura y datos
mysqldump -u jpauli -p --routines --triggers empresa_jpauli > backup_completo.sql
# Backup solo estructura (sin datos)
mysqldump -u jpauli -p --no-data empresa_jpauli > estructura_empresa.sql
# Backup solo datos
mysqldump -u jpauli -p --no-create-info empresa_jpauli > datos_empresa.sql
# Backup de tabla específica
mysqldump -u jpauli -p empresa_jpauli empleados > backup_empleados.sql
# Backup de múltiples bases de datos
mysqldump -u jpauli -p --databases empresa_jpauli tienda_jpauli > backup_multiple.sql
# Backup de todas las bases de datos
mysqldump -u jpauli -p --all-databases > backup_completo.sql
# Backup comprimido
mysqldump -u jpauli -p empresa_jpauli | gzip > backup_empresa.sql.gz
# Backup con bloqueo mínimo
mysqldump -u jpauli -p --single-transaction --routines --triggers empresa_jpauli > backup_empresa.sq
Restaurar backups
Uso: Restaurar bases de datos desde backups
# Restaurar base de datos completa
mysql -u jpauli -p empresa_jpauli < backup_empresa.sql
# Restaurar creando la base de datos
mysql -u jpauli -p -e "CREATE DATABASE nueva_empresa;"
mysql -u jpauli -p nueva_empresa < backup_empresa.sql
# Restaurar desde archivo comprimido
gunzip < backup_empresa.sql.gz | mysql -u jpauli -p empresa_jpauli
# Restaurar solo tabla específica
mysql -u jpauli -p empresa_jpauli < backup_empleados.sql
mysqlimport - Importar datos desde archivos
Uso: Importar datos desde archivos de texto
# Importar archivo CSV
mysqlimport -u jpauli -p --fields-terminated-by=',' --lines-terminated-by='\n' empresa_jpauli emplea
# Importar con opciones específicas
mysqlimport -u jpauli -p --fields-terminated-by=';' --fields-enclosed-by='"' --ignore-lines=1 empre
# Importar reemplazando datos existentes
mysqlimport -u jpauli -p --replace empresa_jpauli empleados.txt
6. COMANDOS DE USUARIOS Y PRIVILEGIOS
Gestión de usuarios
Uso: Crear y administrar usuarios de MySQL
-- Crear usuario
CREATE USER 'jpauli'@'localhost' IDENTIFIED BY 'contraseña_segura';
CREATE USER 'jpauli'@'%' IDENTIFIED BY 'contraseña_segura'; -- Acceso desde cualquier host
-- Cambiar contraseña
ALTER USER 'jpauli'@'localhost' IDENTIFIED BY 'nueva_contraseña';
SET PASSWORD FOR 'jpauli'@'localhost' = PASSWORD('nueva_contraseña');
-- Eliminar usuario
DROP USER 'jpauli'@'localhost';
-- Ver usuarios existentes
SELECT User, Host FROM mysql.user;
Gestión de privilegios
Uso: Asignar y revocar permisos
-- Otorgar todos los privilegios en una base de datos
GRANT ALL PRIVILEGES ON empresa_jpauli.* TO 'jpauli'@'localhost';
-- Otorgar privilegios específicos
GRANT SELECT, INSERT, UPDATE, DELETE ON empresa_jpauli.empleados TO 'jpauli'@'localhost';
-- Otorgar privilegios solo de lectura
GRANT SELECT ON empresa_jpauli.* TO 'jpauli'@'localhost';
-- Otorgar privilegios con opción de otorgar a otros
GRANT SELECT, INSERT ON empresa_jpauli.* TO 'jpauli'@'localhost' WITH GRANT OPTION;
-- Revocar privilegios
REVOKE INSERT, UPDATE ON empresa_jpauli.empleados FROM 'jpauli'@'localhost';
-- Ver privilegios
SHOW GRANTS FOR 'jpauli'@'localhost';
-- Aplicar cambios de privilegios
FLUSH PRIVILEGES;
7. COMANDOS DE MONITOREO Y ADMINISTRACIÓN
Monitoreo de rendimiento
Uso: Supervisar actividad y rendimiento del servidor
-- Ver conexiones activas
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;
-- Ver estado del servidor
SHOW STATUS;
SHOW STATUS LIKE 'Connections';
SHOW STATUS LIKE 'Threads_connected';
-- Ver variables de configuración
SHOW VARIABLES;
SHOW VARIABLES LIKE 'max_connections';
-- Ver motores de almacenamiento
SHOW ENGINES;
-- Ver tamaño de bases de datos
SELECT table_schema AS "Database",
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)"
FROM information_schema.tables
GROUP BY table_schema;
-- Ver tamaño de tablas
SELECT table_name AS "Table",
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)"
FROM information_schema.tables
WHERE table_schema = 'empresa_jpauli'
ORDER BY (data_length + index_length) DESC;
-- Ver fragmentación de tablas
SELECT table_name,
ROUND(data_free / 1024 / 1024, 2) AS data_free_MB
FROM information_schema.tables
WHERE table_schema = 'empresa_jpauli' AND data_free > 0;
Optimización y mantenimiento
Uso: Mantener y optimizar bases de datos
-- Analizar tabla
ANALYZE TABLE empleados;
-- Optimizar tabla
OPTIMIZE TABLE empleados;
-- Reparar tabla
REPAIR TABLE empleados;
-- Verificar tabla
CHECK TABLE empleados;
-- Ver planes de ejecución
EXPLAIN SELECT * FROM empleados WHERE departamento_id = 1;
EXPLAIN FORMAT=JSON SELECT * FROM empleados WHERE salario > 50000;
-- Activar profiling
SET profiling = 1;
SELECT * FROM empleados WHERE departamento_id = 1;
SHOW PROFILES;
SHOW PROFILE FOR QUERY 1;
8. COMANDOS DE TRANSACCIONES
Control de transacciones
Uso: Manejar transacciones para integridad de datos
-- Iniciar transacción
START TRANSACTION;
-- o
BEGIN;
-- Operaciones dentro de la transacción
INSERT INTO empleados (nombre, email) VALUES ('Test User', '
[email protected]');
UPDATE empleados SET salario = salario * 1.05 WHERE departamento_id = 1;
-- Confirmar cambios
COMMIT;
-- O deshacer cambios
ROLLBACK;
-- Punto de guardado (savepoint)
START TRANSACTION;
INSERT INTO empleados (nombre, email) VALUES ('Usuario1', '
[email protected]');
SAVEPOINT sp1;
INSERT INTO empleados (nombre, email) VALUES ('Usuario2', '
[email protected]');
ROLLBACK TO sp1; -- Solo deshace hasta el savepoint
COMMIT;
-- Configurar autocommit
SET autocommit = 0; -- Desactivar autocommit
SET autocommit = 1; -- Activar autocommit (por defecto)
9. COMANDOS DE CONFIGURACIÓN Y UTILIDADES
Variables de entorno útiles
# Configurar variables para usuario jpauli
export MYSQL_USER=jpauli
export MYSQL_DATABASE=empresa_jpauli
export MYSQL_HOST=localhost
export MYSQL_PORT=3306
# Archivo de configuración ~/.my.cnf
[client]
user=jpauli
password=tu_contraseña
host=localhost
database=empresa_jpauli
Comandos de configuración específicos de MySQL
-- Ver zona horaria
SELECT @@time_zone;
-- Cambiar zona horaria de sesión
SET time_zone = 'America/New_York';
-- Ver modo SQL
SELECT @@sql_mode;
-- Cambiar modo SQL
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO';
-- Ver información del servidor
SELECT VERSION();
SELECT CONNECTION_ID();
SELECT DATABASE();
SELECT USER();
-- Configurar timeouts
SET SESSION wait_timeout = 3600;
SET SESSION interactive_timeout = 3600;
10. COMANDOS AVANZADOS Y FUNCIONES ESPECIALES
Funciones de fecha y hora
-- Fecha y hora actual
SELECT NOW(), CURDATE(), CURTIME();
-- Formatear fechas
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
-- Operaciones con fechas
SELECT DATE_ADD(NOW(), INTERVAL 30 DAY);
SELECT DATE_SUB(NOW(), INTERVAL 1 YEAR);
SELECT DATEDIFF('2024-12-31', '2024-01-01');
-- Extraer partes de fecha
SELECT YEAR(NOW()), MONTH(NOW()), DAY(NOW());
Funciones de cadena
-- Manipulación de strings
SELECT CONCAT('Hola ', 'jpauli');
SELECT UPPER('texto'), LOWER('TEXTO');
SELECT LENGTH('jpauli'), CHAR_LENGTH('jpauli');
SELECT SUBSTRING('jpauli', 2, 3);
SELECT REPLACE('[email protected]', 'old', 'new');
-- Búsqueda en texto
SELECT * FROM empleados WHERE email LIKE '%jpauli%';
SELECT * FROM empleados WHERE nombre REGEXP '^[A-J]';
Funciones numéricas y agregadas
-- Funciones matemáticas
SELECT ROUND(3.14159, 2), CEIL(3.1), FLOOR(3.9);
SELECT ABS(-5), POWER(2, 3), SQRT(16);
-- Funciones agregadas
SELECT COUNT(*), SUM(salario), AVG(salario), MIN(salario), MAX(salario)
FROM empleados;
-- Funciones de ventana (MySQL 8.0+)
SELECT nombre, salario,
ROW_NUMBER() OVER (ORDER BY salario DESC) as numero_fila,
RANK() OVER (ORDER BY salario DESC) as ranking
FROM empleados;
CONSEJOS PRÁCTICOS PARA USUARIO JPAULI
1. Crear alias útiles en ~/.bashrc:
alias myconn='mysql -u jpauli -p empresa_jpauli'
alias mybackup='mysqldump -u jpauli -p --single-transaction --routines --triggers'
alias mystatus='mysqladmin -u jpauli -p status'
2. Archivo de configuración ~/.my.cnf:
[client]
user=jpauli
password=tu_contraseña_segura
host=localhost
port=3306
default-character-set=utf8mb4
[mysql]
database=empresa_jpauli
prompt=MySQL [\\d]>\\_
auto-rehash=FALSE
3. Scripts útiles de mantenimiento:
-- Script de mantenimiento diario
ANALYZE TABLE empleados, departamentos;
OPTIMIZE TABLE logs WHERE fecha < DATE_SUB(NOW(), INTERVAL 30 DAY);
-- Backup automático con fecha
-- En script bash:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
mysqldump -u jpauli -p empresa_jpauli > /home/jpauli/backups/backup_$DATE.sql
4. Consultas útiles de monitoreo:
-- Ver tablas más grandes
SELECT table_name,
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)'
FROM information_schema.tables
WHERE table_schema = 'empresa_jpauli'
ORDER BY (data_length + index_length) DESC;
-- Ver consultas lentas (si está habilitado el slow query log)
SELECT * FROM mysql.slow_log ORDER BY start_time DESC LIMIT 10;