Bases de datos
26.10 Diferencias de versión
26.10 mueve MySQL de 8.4 LTS a 9.7 LTS (9.7.2 en las notas de la versión) e incluye Valkey 9.1.2. Los procedimientos 26.04 siguientes no son instrucciones de migración de versiones principales. Pruebe primero la restauración de copias de seguridad independientes, los controladores de aplicaciones y la compatibilidad con SQL. Notas de la versión oficial
Este artículo se cotejó inicialmente con las notas de la versión de Ubuntu 26.04 LTS de abril de 2026. Las versiones de la base de datos y las notas de actualización aún necesitan validación página por página.
Las bases de datos son un componente central de prácticamente todas las aplicaciones y servicios web. El repositorio oficial Ubuntu proporciona paquetes de instalación para muchas bases de datos populares. Este artículo cubre cómo instalar y configurar las bases de datos más utilizadas en Ubuntu 26.04: MySQL/MariaDB, PostgreSQL, Redis y SQLite.
MySQL / MariaDB
MySQL es una de las bases de datos relacionales de código abierto más populares del mundo, mientras que MariaDB es una bifurcación comunitaria de MySQL mantenida por los desarrolladores originales de MySQL. Los dos son altamente compatibles en uso.
El repositorio oficial Ubuntu 26.04 proporciona MySQL y MariaDB. MariaDB es un reemplazo directo totalmente compatible para MySQL con mejores optimizaciones de rendimiento y una gobernanza comunitaria más abierta. Si no tiene requisitos específicos, se recomienda MariaDB. Las herramientas de línea de comandos y la sintaxis SQL son casi idénticas.
Instalando MySQL
# Install MySQL Server
sudo apt update
sudo apt install mysql-server
# Check service status
sudo systemctl status mysql
# Enable auto-start on boot
sudo systemctl enable mysqlInstalando MariaDB
# Install MariaDB Server
sudo apt update
sudo apt install mariadb-server
# Check service status
sudo systemctl status mariadb
# Enable auto-start on boot
sudo systemctl enable mariadbInicialización de seguridad
Después de la instalación, asegúrese de ejecutar el script de inicialización de seguridad para reforzar la base de datos:
# Both MySQL and MariaDB use the same command
sudo mysql_secure_installationEl script le guiará a través de las siguientes operaciones:
- Establecer contraseña de root (si aún no está configurada)
- Eliminar usuarios anónimos (muy recomendable)
- No permitir el inicio de sesión remoto como root (muy recomendable)
- Eliminar base de datos de prueba (recomendado)
- Recargar tablas de privilegios
Operaciones básicas
# Log in to MySQL/MariaDB (Ubuntu defaults to unix_socket authentication)
sudo mysql
# Or log in with a password
mysql -u root -pOperaciones SQL comunes:
-- List all databases
SHOW DATABASES;
-- Create a database
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Use a database
USE myapp;
-- Create a user and set password
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
-- Grant privileges (limited to a specific database)
GRANT ALL PRIVILEGES ON myapp.* TO 'appuser'@'localhost';
-- Flush privileges
FLUSH PRIVILEGES;
-- View user privileges
SHOW GRANTS FOR 'appuser'@'localhost';
-- Create a table
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Insert data
INSERT INTO users (username, email) VALUES ('zhang', 'zhang@example.com');
-- Query data
SELECT * FROM users;
-- View table structure
DESCRIBE users;
-- Drop a user
DROP USER 'appuser'@'localhost';
-- Drop a database
DROP DATABASE myapp;
-- Exit
EXIT;Configuración de acceso remoto
De forma predeterminada, MySQL/MariaDB solo escucha en localhost (127.0.0.1). Para habilitar el acceso remoto:
# Edit MySQL configuration
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Or MariaDB configuration
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfBusque la línea bind-address y cámbiela a:
# Allow connections from all IPs (in production, bind to a specific IP)
bind-address = 0.0.0.0Luego crea un usuario que permita conexiones remotas:
-- Create a user that can connect from any IP
CREATE USER 'remoteuser'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON myapp.* TO 'remoteuser'@'%';
FLUSH PRIVILEGES;
-- Or restrict to a specific IP
CREATE USER 'remoteuser'@'192.168.1.100' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON myapp.* TO 'remoteuser'@'192.168.1.100';
FLUSH PRIVILEGES;# Restart the service for changes to take effect
sudo systemctl restart mysql
# Or
sudo systemctl restart mariadb
# If the firewall is enabled, allow the port
sudo ufw allow 3306/tcpExponer la base de datos a la Internet pública (0.0.0.0) es extremadamente peligroso. Si es necesario el acceso remoto, asegúrese de: usar contraseñas seguras, restringir las IP de conexión permitidas, configurar reglas de firewall y considerar usar túneles SSH o VPN en lugar de exponer directamente el puerto.
Optimizaciones de configuración comunes
Edite /etc/mysql/mysql.conf.d/mysqld.cnf (o el archivo de configuración MariaDB correspondiente):
[mysqld]
# Character set (utf8mb4 recommended to support emoji and other characters)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# InnoDB buffer pool (recommended: 50%-70% of physical memory)
innodb_buffer_pool_size = 1G
# Maximum connections
max_connections = 200
# Slow query log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2# Restart the service after changes
sudo systemctl restart mysqlPostgreSQL
PostgreSQL (comúnmente abreviado como PG) es una poderosa base de datos relacional de objetos de código abierto conocida por su estricto cumplimiento del estándar SQL, tipos de datos enriquecidos y poderosa extensibilidad. Es la opción ideal para consultas complejas, datos geoespaciales (PostGIS) y datos JSON.
Instalando PostgreSQL
# Install PostgreSQL
sudo apt update
sudo apt install postgresql postgresql-client
# Check service status
sudo systemctl status postgresql
# Check installed version
psql --versionCreación de usuarios y bases de datos
PostgreSQL utiliza su propio sistema de autenticación de usuarios. Después de la instalación, se crean automáticamente un usuario del sistema y un superusuario de base de datos llamado postgres.
# Switch to the postgres user
sudo -u postgres psql-- Create a new database user
CREATE USER appuser WITH PASSWORD 'StrongPassword123!';
-- Create a database and assign an owner
CREATE DATABASE myapp OWNER appuser;
-- Grant connection privileges
GRANT ALL PRIVILEGES ON DATABASE myapp TO appuser;
-- List all databases
\l
-- List all users
\du
-- Switch database
\c myapp
-- Exit
\qTambién puedes utilizar herramientas de línea de comandos:
# Create a new user using the postgres account
sudo -u postgres createuser --interactive appuser
# Create a database
sudo -u postgres createdb -O appuser myapp
# Connect with the new user
psql -U appuser -d myapp -h localhostOperaciones básicas
# Connect to a database
psql -U appuser -d myapp -h localhost-- Create a table
CREATE TABLE articles (
id SERIAL PRIMARY KEY,
title VARCHAR(200) NOT NULL,
content TEXT,
tags TEXT[],
metadata JSONB,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Insert data (note: PostgreSQL supports array and JSON types)
INSERT INTO articles (title, content, tags, metadata)
VALUES (
'Ubuntu 26.04 Released',
'The new version brings many improvements...',
ARRAY['ubuntu', 'linux', 'release'],
'{"author": "admin", "views": 0}'::jsonb
);
-- Query data
SELECT * FROM articles;
-- JSON query
SELECT title FROM articles WHERE metadata->>'author' = 'admin';
-- Array query
SELECT title FROM articles WHERE 'ubuntu' = ANY(tags);
-- View table structure
\d articles
-- List all tables
\dt
-- View table sizes
\dt+Comandos comunes de psql
| Dominio | Descripción |
|---|---|
\l | Listar todas las bases de datos |
\c dbname | Cambiar a una base de datos específica |
\dt | Listar todas las tablas de la base de datos actual |
\d tablename | Ver estructura de la tabla |
\du | Listar todos los usuarios/roles |
\di | Listar todos los índices |
\df | Listar todas las funciones |
\timing | Activar/desactivar el tiempo de consulta |
\x | Alternar modo de visualización ampliada |
\q | Salida |
Configuración de acceso remoto
# Edit the main configuration file
sudo nano /etc/postgresql/18/main/postgresql.conf# Change the listen address
listen_addresses = '*'# Edit the client authentication configuration
sudo nano /etc/postgresql/18/main/pg_hba.confAgregue al final del archivo:
# Allow a specific subnet via password authentication
host all all 192.168.1.0/24 scram-sha-256
# Or allow all IPs (not recommended for production)
host all all 0.0.0.0/0 scram-sha-256# Restart PostgreSQL
sudo systemctl restart postgresql
# Allow through firewall
sudo ufw allow 5432/tcpRedis / Valkey
Redis/Valkey es un almacén de estructura de datos en memoria de código abierto que se puede utilizar como base de datos, caché y agente de mensajes. Admiten diversas estructuras de datos, como cadenas, hashes, listas y conjuntos, y son conocidos por sus velocidades de lectura/escritura extremadamente rápidas.
El repositorio oficial Ubuntu 26.04 promueve Valkey 9.0 (una bifurcación comunitaria de Redis que es compatible con el protocolo Redis) y lo ha trasladado al componente main. Se recomienda Valkey; Redis aún se puede instalar por separado: valkey-server y redis-server coexisten en el repositorio. Los ejemplos siguientes utilizan Valkey, con los comandos valkey-server / valkey-cli; el antiguo redis-cli todavía está disponible como alias de compatibilidad.
Instalación de Valkey
# Install Valkey (recommended on 26.04)
sudo apt update
sudo apt install valkey-server
# If you need Redis, you can install it separately (coexists with Valkey; swap the redis prefix into the commands)
# sudo apt install redis-server
# Check service status
sudo systemctl status valkey-server
# Verify it is working properly
valkey-cli ping
# Should output: PONGOperaciones básicas
# Connect to the Valkey CLI (redis-cli is also available as a compatibility alias)
valkey-cli# String operations
SET name "Ubuntu Fan"
GET name
# Set a key with expiration (60 seconds)
SET session:abc123 "user_data" EX 60
# Check remaining TTL
TTL session:abc123
# Hash operations (similar to objects)
HSET user:1 name "John" email "john@example.com" age "30"
HGET user:1 name
HGETALL user:1
# List operations
LPUSH tasks "task1" "task2" "task3"
LRANGE tasks 0 -1
RPOP tasks
# Set operations
SADD online_users "user1" "user2" "user3"
SMEMBERS online_users
SISMEMBER online_users "user1"
# Sorted set (leaderboard scenario)
ZADD leaderboard 100 "player1" 200 "player2" 150 "player3"
ZREVRANGE leaderboard 0 -1 WITHSCORES
# List all keys
KEYS *
# Delete a key
DEL name
# Check key type
TYPE user:1
# View server info
INFO
# View memory usage
INFO memory
# Exit
QUITConfiguración de persistencia
Los datos se almacenan en la memoria de forma predeterminada y se perderán al reiniciar. Valkey proporciona dos métodos de persistencia:
RDB (Snapshots): guarda periódicamente los datos en memoria como archivos de instantáneas:
# Edit Valkey configuration (the Redis-compatible package uses /etc/redis/redis.conf)
sudo nano /etc/valkey/valkey.conf# RDB persistence rules (enabled by default)
# Save if at least 1 change in 3600 seconds
save 3600 1
# Save if at least 100 changes in 300 seconds
save 300 100
# Save if at least 10000 changes in 60 seconds
save 60 10000
# RDB file location
dir /var/lib/valkey
dbfilename dump.rdbAOF (archivo de solo anexar): registra cada operación de escritura:
# Enable AOF
appendonly yes
# AOF sync policy
# always: Sync on every write (safest, but slowest)
# everysec: Sync once per second (recommended, balances safety and performance)
# no: Let the OS decide (fastest, but may lose data)
appendfsync everysec
# AOF filename
appendfilename "appendonly.aof"# Restart Valkey for changes to take effect
sudo systemctl restart valkey-serverConfiguración de seguridad de Valkey
sudo nano /etc/valkey/valkey.conf# Set password
requirepass YourStrongRedisPassword
# Bind address (defaults to local access only)
bind 127.0.0.1 ::1
# Disable dangerous commands
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command CONFIG ""# Connect with password
valkey-cli -a YourStrongRedisPassword
# Or authenticate after connecting
valkey-cli
AUTH YourStrongRedisPasswordSQLite
SQLite es una base de datos relacional integrada ligera. No requiere un proceso de servidor separado y todos los datos se almacenan en un solo archivo. SQLite es ideal para aplicaciones pequeñas, creación de prototipos, aplicaciones móviles y sistemas integrados.
Instalación y uso
# Install SQLite
sudo apt install sqlite3
# Create/open a database file
sqlite3 mydb.sqlite
# Operate within the SQLite prompt-- Create a table
CREATE TABLE notes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Insert data
INSERT INTO notes (title, content) VALUES ('Test Note', 'This is a test entry');
-- Query
SELECT * FROM notes;
-- List all tables
.tables
-- View table structure
.schema notes
-- Display results with column names
.headers on
.mode column
-- Export as SQL
.dump
-- Export as CSV
.mode csv
.output notes.csv
SELECT * FROM notes;
.output stdout
-- Exit
.quitLos puntos fuertes de SQLite residen en la cero configuración y el cero mantenimiento. Es adecuado para:
- Pequeñas aplicaciones web (por ejemplo, blogs personales)
- Entornos de desarrollo y pruebas.
- Almacenamiento de datos local para aplicaciones de escritorio
- Análisis de datos (emparejado con el módulo sqlite3 de Python)
Estrategias de copia de seguridad de bases de datos
La copia de seguridad de datos es una de las tareas más importantes en la gestión de bases de datos. Estos son los métodos de copia de seguridad para cada base de datos:
MySQL / MariaDB Copia de seguridad
# Back up a single database
mysqldump -u root -p myapp > myapp_backup_$(date +%Y%m%d).sql
# Back up all databases
mysqldump -u root -p --all-databases > all_databases_$(date +%Y%m%d).sql
# Compressed backup
mysqldump -u root -p myapp | gzip > myapp_backup_$(date +%Y%m%d).sql.gz
# Restore a database
mysql -u root -p myapp < myapp_backup_20260324.sql
# Restore a compressed backup
gunzip < myapp_backup_20260324.sql.gz | mysql -u root -p myappPostgreSQL Copia de seguridad
# Back up a single database
sudo -u postgres pg_dump myapp > myapp_backup_$(date +%Y%m%d).sql
# Back up all databases
sudo -u postgres pg_dumpall > all_databases_$(date +%Y%m%d).sql
# Custom format backup (supports parallel restore)
sudo -u postgres pg_dump -Fc myapp > myapp_backup_$(date +%Y%m%d).dump
# Restore SQL format backup
sudo -u postgres psql myapp < myapp_backup_20260324.sql
# Restore custom format backup
sudo -u postgres pg_restore -d myapp myapp_backup_20260324.dumpCopia de seguridad de Valkey
# Manually trigger RDB snapshot
valkey-cli BGSAVE
# Copy the RDB file
sudo cp /var/lib/valkey/dump.rdb /backup/valkey_$(date +%Y%m%d).rdb
# Restore: stop Valkey, replace dump.rdb, restart
sudo systemctl stop valkey-server
sudo cp /backup/valkey_20260324.rdb /var/lib/valkey/dump.rdb
sudo chown valkey:valkey /var/lib/valkey/dump.rdb
sudo systemctl start valkey-serverScript de copia de seguridad automatizado
Cree un trabajo cron para copias de seguridad automáticas:
# Create backup script
sudo nano /usr/local/bin/db-backup.sh#!/bin/bash
BACKUP_DIR="/backup/databases"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# MySQL/MariaDB backup
mysqldump -u root --all-databases | gzip > "$BACKUP_DIR/mysql_$DATE.sql.gz"
# PostgreSQL backup
sudo -u postgres pg_dumpall | gzip > "$BACKUP_DIR/postgres_$DATE.sql.gz"
# Valkey backup
valkey-cli BGSAVE
sleep 5
cp /var/lib/valkey/dump.rdb "$BACKUP_DIR/valkey_$DATE.rdb"
# Delete backups older than 30 days
find "$BACKUP_DIR" -type f -mtime +30 -delete
echo "Backup complete: $DATE"# Set execute permission
sudo chmod +x /usr/local/bin/db-backup.sh
# Add cron job (runs daily at 3 AM)
sudo crontab -e
# Add the following line:
# 0 3 * * * /usr/local/bin/db-backup.sh >> /var/log/db-backup.log 2>&1Comparación de bases de datos: MySQL frente a PostgreSQL frente a MariaDB
| Característica | MySQL | PostgreSQL | MariaDB |
|---|---|---|---|
| Revelador | Oráculo | Comunidad PostgreSQL | Fundación MariaDB |
| Licencia | GPL v2 (doble licencia) | Licencia PostgreSQL (tipo MIT) | GPLv2 |
| Puerto predeterminado | 3306 | 5432 | 3306 |
| Cumplimiento de ACID | Motor InnoDB compatible | Soporte total | Compatible con motor InnoDB/Aria |
| Soporte JSON | tipo JSON | Tipo JSONB (más potente) | tipo JSON |
| Búsqueda de texto completo | Apoyado | Compatible (más potente) | Apoyado |
| Geoespacial | Soporte básico | Extensión PostGIS (líder en la industria) | Soporte básico |
| Replicación | Réplica primaria, replicación de grupo | Replicación en streaming, replicación lógica | Réplica primaria, clúster de Galera |
| Motores de almacenamiento | Múltiples (InnoDB, MyISAM, etc.) | monomotor | Múltiples (InnoDB, Aria, ColumnStore, etc.) |
| Cumplimiento del estándar SQL | Bien | Mejor | Bien |
| Casos de uso | Aplicaciones web, cargas de trabajo de lectura intensa | Consultas complejas, análisis de datos, SIG | Aplicaciones web, reemplazo de MySQL |
| Curva de aprendizaje | Bajo | Medio | Bajo (compatible con MySQL) |
Guía de recomendaciones
- MySQL: ecosistema más grande y la mayoría de los recursos comunitarios; adecuado para la mayoría de las aplicaciones web
- PostgreSQL: Funciones más potentes; ideal para consultas complejas, operaciones JSON y datos geoespaciales
- MariaDB: alternativa de código abierto a MySQL con optimizaciones de rendimiento más agresivas y una comunidad más abierta
Resumen de comandos de administración comunes
# --- MySQL / MariaDB ---
sudo systemctl start mysql # Start
sudo systemctl stop mysql # Stop
sudo systemctl restart mysql # Restart
sudo systemctl status mysql # Check status
sudo mysql # Log in
# --- PostgreSQL ---
sudo systemctl start postgresql # Start
sudo systemctl stop postgresql # Stop
sudo systemctl restart postgresql # Restart
sudo systemctl status postgresql # Check status
sudo -u postgres psql # Log in
# --- Valkey ---
sudo systemctl start valkey-server # Start
sudo systemctl stop valkey-server # Stop
sudo systemctl restart valkey-server # Restart
sudo systemctl status valkey-server # Check status
valkey-cli # Log in
valkey-cli INFO # View info
valkey-cli DBSIZE # View key countElegir y configurar la base de datos adecuada es fundamental para crear aplicaciones web confiables. Se recomienda experimentar con diferentes bases de datos en su entorno de desarrollo para encontrar la que mejor se adapte a las necesidades de su proyecto.