Bancos de dados
Diferenças de versão 26.10
26.10 move MySQL de 8.4 LTS para 9.7 LTS (9.7.2 nas notas de lançamento) e inclui Valkey 9.1.2. Os procedimentos 26.04 abaixo não são instruções de migração de versão principal. Teste primeiro a restauração de backup independente, os drivers de aplicativos e a compatibilidade SQL. Notas de lançamento oficiais
Este artigo foi inicialmente verificado em relação às notas de versão Ubuntu 26.04 LTS de abril de 2026. As versões do banco de dados e as notas de atualização ainda precisam de validação página por página.
Os bancos de dados são um componente central de praticamente todos os aplicativos e serviços da web. O repositório oficial Ubuntu fornece pacotes de instalação para muitos bancos de dados populares. Este artigo aborda como instalar e configurar os bancos de dados mais comumente usados em Ubuntu 26.04: MySQL/MariaDB, PostgreSQL, Redis e SQLite.
MySQL / MariaDB
MySQL é um dos bancos de dados relacionais de código aberto mais populares do mundo, enquanto MariaDB é um fork da comunidade de MySQL mantido pelos desenvolvedores originais de MySQL. Os dois são altamente compatíveis em uso.
O repositório oficial Ubuntu 26.04 fornece MySQL e MariaDB. MariaDB é um substituto totalmente compatível para MySQL com melhores otimizações de desempenho e governança de comunidade mais aberta. Se você não tiver requisitos específicos, MariaDB é recomendado. As ferramentas de linha de comando e a sintaxe SQL são quase 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 mariadbInicialização de segurança
Após a instalação, certifique-se de executar o script de inicialização de segurança para proteger o banco de dados:
# Both MySQL and MariaDB use the same command
sudo mysql_secure_installationO script irá guiá-lo através das seguintes operações:
- Definir senha de root (se ainda não estiver definida)
- Remover usuários anônimos (altamente recomendado)
- Proibir login remoto root (altamente recomendado)
- Remover banco de dados de teste (recomendado)
- Recarregar tabelas de privilégios
Operações Básicas
# Log in to MySQL/MariaDB (Ubuntu defaults to unix_socket authentication)
sudo mysql
# Or log in with a password
mysql -u root -pOperações SQL comuns:
-- 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;Configuração de acesso remoto
Por padrão, MySQL/MariaDB escuta apenas no host local (127.0.0.1). Para ativar o acesso 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.cnfEncontre a linha bind-address e altere-a para:
# Allow connections from all IPs (in production, bind to a specific IP)
bind-address = 0.0.0.0Em seguida, crie um usuário que permita conexões 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/tcpExpor o banco de dados à Internet pública (0.0.0.0) é extremamente perigoso. Se o acesso remoto for necessário, certifique-se de: usar senhas fortes, restringir IPs de conexão permitidos, configurar regras de firewall e considerar usar túneis SSH ou VPN em vez de expor diretamente a porta.
Otimizações de configuração comuns
Edite /etc/mysql/mysql.conf.d/mysqld.cnf (ou o arquivo de configuração MariaDB correspondente):
[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 (comumente abreviado como PG) é um poderoso banco de dados relacional de objeto de código aberto conhecido por sua estrita conformidade com o padrão SQL, tipos de dados ricos e extensibilidade poderosa. É a escolha ideal para consultas complexas, dados geoespaciais (PostGIS) e dados 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 --versionCriação de usuário e banco de dados
PostgreSQL usa seu próprio sistema de autenticação de usuário. Após a instalação, um usuário do sistema e um superusuário do banco de dados denominado postgres são criados automaticamente.
# 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
\qVocê também pode usar ferramentas de linha de comando:
# 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 localhostOperações 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 comuns do psql
| Comando | Descrição |
|---|---|
\l | Listar todos os bancos de dados |
\c dbname | Mudar para um banco de dados específico |
\dt | Listar todas as tabelas do banco de dados atual |
\d tablename | Ver estrutura da tabela |
\du | Listar todos os usuários/funções |
\di | Listar todos os índices |
\df | Listar todas as funções |
\timing | Ativar/desativar o tempo de consulta |
\x | Alternar modo de exibição expandido |
\q | Saída |
Configuração de acesso 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.confAdicione no final do arquivo:
# 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 é um armazenamento de estrutura de dados na memória de código aberto que pode ser usado como banco de dados, cache e corretor de mensagens. Eles suportam várias estruturas de dados, como strings, hashes, listas e conjuntos, e são conhecidos por suas velocidades de leitura/gravação extremamente rápidas.
O repositório oficial Ubuntu 26.04 promove Valkey 9.0 (um fork da comunidade do Redis que é compatível com o protocolo Redis) e o moveu para o componente main. Valkey é recomendado; O Redis ainda pode ser instalado separadamente – valkey-server e redis-server coexistem no repositório. Os exemplos abaixo utilizam Valkey, com os comandos valkey-server / valkey-cli; o antigo redis-cli ainda está disponível como alias de compatibilidade.
Instalando 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: PONGOperações 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
QUITConfiguração de Persistência
Os dados são armazenados na memória por padrão e serão perdidos na reinicialização. Valkey fornece dois métodos de persistência:
RDB (Snapshots) – Salva periodicamente dados na memória como arquivos de snapshot:
# 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 (arquivo somente anexo) - Registra cada operação de gravação:
# 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-serverConfiguração de segurança 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 é um banco de dados relacional incorporado leve. Não requer um processo de servidor separado e todos os dados são armazenados em um único arquivo. SQLite é ideal para pequenas aplicações, prototipagem, aplicativos móveis e sistemas embarcados.
Instalação e 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
.quitOs pontos fortes do SQLite residem em zero configuração e zero manutenção. É adequado para:
- Pequenos aplicativos da web (por exemplo, blogs pessoais)
- Ambientes de desenvolvimento e teste
- Armazenamento local de dados para aplicativos de desktop
- Análise de dados (emparelhado com o módulo sqlite3 do Python)
Estratégias de backup de banco de dados
O backup de dados é uma das tarefas mais importantes no gerenciamento de banco de dados. Aqui estão os métodos de backup para cada banco de dados:
MySQL/MariaDB Backup
# 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 myappBackup PostgreSQL
# 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.dumpBackup 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 backup automatizado
Crie um cron job para backups automáticos:
# 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>&1Comparação de banco de dados: MySQL vs PostgreSQL vs MariaDB
| Recurso | MySQL | PostgreSQL | MariaDB |
|---|---|---|---|
| Desenvolvedor | Oráculo | Comunidade PostgreSQL | Fundação MariaDB |
| Licença | GPL v2 (licença dupla) | Licença PostgreSQL (semelhante ao MIT) | GPL v2 |
| Porta padrão | 3306 | 5432 | 3306 |
| Conformidade com ACID | Mecanismo InnoDB suportado | Suporte total | Motor InnoDB/Aria suportado |
| Suporte JSON | Tipo JSON | Tipo JSONB (mais poderoso) | Tipo JSON |
| Pesquisa de texto completo | Suportado | Suportado (mais poderoso) | Suportado |
| Geoespacial | Suporte básico | Extensão PostGIS (líder do setor) | Suporte básico |
| Replicação | Réplica primária, replicação de grupo | Replicação de streaming, replicação lógica | Réplica primária, cluster Galera |
| Motores de armazenamento | Múltiplos (InnoDB, MyISAM, etc.) | Motor único | Múltiplos (InnoDB, Aria, ColumnStore, etc.) |
| Conformidade com o padrão SQL | Bom | Melhor | Bom |
| Casos de uso | Aplicativos Web, cargas de trabalho com muita leitura | Consultas complexas, análise de dados, GIS | Aplicativos da Web, substituição MySQL |
| Curva de aprendizagem | Baixo | Médio | Baixo (compatível com MySQL) |
Guia de recomendação
- MySQL: Maior ecossistema e mais recursos da comunidade; adequado para a maioria das aplicações web
- PostgreSQL: Recursos mais poderosos; ideal para consultas complexas, operações JSON e dados geoespaciais
- MariaDB: alternativa MySQL de código aberto com otimizações de desempenho mais agressivas e uma comunidade mais aberta
Resumo dos comandos de gerenciamento comuns
# --- 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 countEscolher e configurar o banco de dados correto é fundamental para construir aplicações web confiáveis. É recomendável experimentar diferentes bancos de dados em seu ambiente de desenvolvimento para encontrar o que melhor se adapta às necessidades do seu projeto.