Skip to Content

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 

Note

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.

Tip

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

Inicializaçã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_installation

O script irá guiá-lo através das seguintes operações:

  1. Definir senha de root (se ainda não estiver definida)
  2. Remover usuários anônimos (altamente recomendado)
  3. Proibir login remoto root (altamente recomendado)
  4. Remover banco de dados de teste (recomendado)
  5. 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 -p

Operaçõ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.cnf

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

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

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

PostgreSQL

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

Criaçã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 \q

Você 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 localhost

Operaçõ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

ComandoDescrição
\lListar todos os bancos de dados
\c dbnameMudar para um banco de dados específico
\dtListar todas as tabelas do banco de dados atual
\d tablenameVer estrutura da tabela
\duListar todos os usuários/funções
\diListar todos os índices
\dfListar todas as funções
\timingAtivar/desativar o tempo de consulta
\xAlternar modo de exibição expandido
\qSaí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.conf

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

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

Note

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

Operaçõ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 QUIT

Configuraçã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.rdb

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

Configuraçã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 YourStrongRedisPassword

SQLite

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

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

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

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

Comparação de banco de dados: MySQL vs PostgreSQL vs MariaDB

RecursoMySQLPostgreSQLMariaDB
DesenvolvedorOráculoComunidade PostgreSQLFundação MariaDB
LicençaGPL v2 (licença dupla)Licença PostgreSQL (semelhante ao MIT)GPL v2
Porta padrão330654323306
Conformidade com ACIDMecanismo InnoDB suportadoSuporte totalMotor InnoDB/Aria suportado
Suporte JSONTipo JSONTipo JSONB (mais poderoso)Tipo JSON
Pesquisa de texto completoSuportadoSuportado (mais poderoso)Suportado
GeoespacialSuporte básicoExtensão PostGIS (líder do setor)Suporte básico
ReplicaçãoRéplica primária, replicação de grupoReplicação de streaming, replicação lógicaRéplica primária, cluster Galera
Motores de armazenamentoMúltiplos (InnoDB, MyISAM, etc.)Motor únicoMúltiplos (InnoDB, Aria, ColumnStore, etc.)
Conformidade com o padrão SQLBomMelhorBom
Casos de usoAplicativos Web, cargas de trabalho com muita leituraConsultas complexas, análise de dados, GISAplicativos da Web, substituição MySQL
Curva de aprendizagemBaixoMédioBaixo (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 count

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