Skip to Content

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 

Note

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.

Tip

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 mysql

Instalando 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 mariadb

Inicializació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_installation

El script le guiará a través de las siguientes operaciones:

  1. Establecer contraseña de root (si aún no está configurada)
  2. Eliminar usuarios anónimos (muy recomendable)
  3. No permitir el inicio de sesión remoto como root (muy recomendable)
  4. Eliminar base de datos de prueba (recomendado)
  5. 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 -p

Operaciones 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.cnf

Busque 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.0

Luego 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/tcp
Warning

Exponer 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 mysql

PostgreSQL

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 --version

Creació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 \q

Tambié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 localhost

Operaciones 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

DominioDescripción
\lListar todas las bases de datos
\c dbnameCambiar a una base de datos específica
\dtListar todas las tablas de la base de datos actual
\d tablenameVer estructura de la tabla
\duListar todos los usuarios/roles
\diListar todos los índices
\dfListar todas las funciones
\timingActivar/desactivar el tiempo de consulta
\xAlternar modo de visualización ampliada
\qSalida

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.conf

Agregue 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/tcp

Redis / 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.

Note

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: PONG

Operaciones 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 QUIT

Configuració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.rdb

AOF (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-server

Configuració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 YourStrongRedisPassword

SQLite

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 .quit

Los 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 myapp

PostgreSQL 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.dump

Copia 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-server

Script 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>&1

Comparación de bases de datos: MySQL frente a PostgreSQL frente a MariaDB

CaracterísticaMySQLPostgreSQLMariaDB
ReveladorOráculoComunidad PostgreSQLFundación MariaDB
LicenciaGPL v2 (doble licencia)Licencia PostgreSQL (tipo MIT)GPLv2
Puerto predeterminado330654323306
Cumplimiento de ACIDMotor InnoDB compatibleSoporte totalCompatible con motor InnoDB/Aria
Soporte JSONtipo JSONTipo JSONB (más potente)tipo JSON
Búsqueda de texto completoApoyadoCompatible (más potente)Apoyado
GeoespacialSoporte básicoExtensión PostGIS (líder en la industria)Soporte básico
ReplicaciónRéplica primaria, replicación de grupoReplicación en streaming, replicación lógicaRéplica primaria, clúster de Galera
Motores de almacenamientoMúltiples (InnoDB, MyISAM, etc.)monomotorMúltiples (InnoDB, Aria, ColumnStore, etc.)
Cumplimiento del estándar SQLBienMejorBien
Casos de usoAplicaciones web, cargas de trabajo de lectura intensaConsultas complejas, análisis de datos, SIGAplicaciones web, reemplazo de MySQL
Curva de aprendizajeBajoMedioBajo (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 count

Elegir 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.