Bases de données
Cet article a été initialement vérifié par rapport aux notes de version Ubuntu 26.04 LTS d’avril 2026. Les versions de base de données et les notes de mise à niveau nécessitent toujours une validation page par page.
Les bases de données sont un composant essentiel de pratiquement toutes les applications et services Web. Le référentiel officiel Ubuntu fournit des packages d’installation pour de nombreuses bases de données populaires. Cet article explique comment installer et configurer les bases de données les plus couramment utilisées sur Ubuntu 26.04 : MySQL/MariaDB, PostgreSQL, Redis et SQLite.
MySQL / MariaDB
MySQL est l’une des bases de données relationnelles open source les plus populaires au monde, tandis que MariaDB est un fork communautaire de MySQL maintenu par les développeurs originaux de MySQL. Les deux sont hautement compatibles dans leur utilisation.
Le référentiel officiel Ubuntu 26.04 fournit à la fois MySQL et MariaDB. MariaDB est un remplacement entièrement compatible pour MySQL avec de meilleures optimisations de performances et une gouvernance communautaire plus ouverte. Si vous n’avez pas d’exigences particulières, MariaDB est recommandé. Les outils de ligne de commande et la syntaxe SQL sont presque identiques.
Installation d’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 mysqlInstallation d’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 mariadbInitialisation de la sécurité
Après l’installation, assurez-vous d’exécuter le script d’initialisation de sécurité pour renforcer la base de données :
# Both MySQL and MariaDB use the same command
sudo mysql_secure_installationLe script vous guidera à travers les opérations suivantes :
- Définir le mot de passe root (s’il n’est pas déjà défini)
- Supprimer les utilisateurs anonymes (fortement recommandé)
- Interdire la connexion à distance root (fortement recommandé)
- Supprimer la base de données de test (recommandé)
- Recharger les tables de privilèges
Opérations de base
# Log in to MySQL/MariaDB (Ubuntu defaults to unix_socket authentication)
sudo mysql
# Or log in with a password
mysql -u root -pOpérations SQL courantes :
-- 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;Configuration de l’accès à distance
Par défaut, MySQL/MariaDB écoute uniquement sur localhost (127.0.0.1). Pour activer l’accès à distance :
# Edit MySQL configuration
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Or MariaDB configuration
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfRecherchez la ligne bind-address et remplacez-la par :
# Allow connections from all IPs (in production, bind to a specific IP)
bind-address = 0.0.0.0Créez ensuite un utilisateur qui autorise les connexions à distance :
-- 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/tcpExposer la base de données à l’Internet public (0.0.0.0) est extrêmement dangereux. Si l’accès à distance est nécessaire, assurez-vous d’utiliser des mots de passe forts, de restreindre les adresses IP de connexion autorisées, de configurer les règles de pare-feu et d’envisager d’utiliser des tunnels SSH ou un VPN au lieu d’exposer directement le port.
Optimisations de configuration courantes
Modifiez /etc/mysql/mysql.conf.d/mysqld.cnf (ou le fichier de configuration MariaDB correspondant) :
[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 (généralement abrégé en PG) est une puissante base de données objet-relationnelle open source connue pour sa stricte conformité aux normes SQL, ses types de données riches et sa puissante extensibilité. C’est le choix idéal pour les requêtes complexes, les données géospatiales (PostGIS) et les données JSON.
Installation d’PostgreSQL
# Install PostgreSQL
sudo apt update
sudo apt install postgresql postgresql-client
# Check service status
sudo systemctl status postgresql
# Check installed version
psql --versionCréation d’utilisateurs et de bases de données
PostgreSQL utilise son propre système d’authentification des utilisateurs. Après l’installation, un utilisateur système et un superutilisateur de base de données nommés postgres sont automatiquement créés.
# 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
\qVous pouvez également utiliser des outils de ligne de commande :
# 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 localhostOpérations de base
# 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+Commandes psql courantes
| Commande | Description |
|---|---|
\l | Lister toutes les bases de données |
\c dbname | Basculer vers une base de données spécifique |
\dt | Lister toutes les tables de la base de données actuelle |
\d tablename | Afficher la structure du tableau |
\du | Répertorier tous les utilisateurs/rôles |
\di | Répertorier tous les index |
\df | Lister toutes les fonctions |
\timing | Activer/désactiver la synchronisation des requêtes |
\x | Basculer le mode d’affichage étendu |
\q | Sortie |
Configuration de l’accès à distance
# 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.confAjoutez à la fin du fichier :
# 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 est un magasin de structures de données en mémoire open source qui peut être utilisé comme base de données, cache et courtier de messages. Ils prennent en charge diverses structures de données telles que des chaînes, des hachages, des listes et des ensembles, et sont connus pour leurs vitesses de lecture/écriture extrêmement rapides.
Le référentiel officiel Ubuntu 26.04 fait la promotion de Valkey 9.0 (un fork communautaire de Redis compatible avec le protocole Redis) et l’a déplacé dans le composant main. Valkey est recommandé ; Redis peut toujours être installé séparément : valkey-server et redis-server coexistent dans le référentiel. Les exemples ci-dessous utilisent Valkey, avec les commandes valkey-server / valkey-cli ; l’ancien redis-cli est toujours disponible comme alias de compatibilité.
Installation 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: PONGOpérations de base
# 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
QUITConfiguration de la persistance
Les données sont stockées en mémoire par défaut et seront perdues au redémarrage. Valkey propose deux méthodes de persistance :
RDB (Snapshots) — Enregistre périodiquement les données en mémoire sous forme de fichiers d’instantanés :
# 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 (Append-Only File) — Enregistre chaque opération d’écriture :
# 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-serverConfiguration de la sécurité 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 est une base de données relationnelle embarquée légère. Cela ne nécessite pas de processus serveur distinct et toutes les données sont stockées dans un seul fichier. SQLite est idéal pour les petites applications, le prototypage, les applications mobiles et les systèmes embarqués.
Installation et utilisation
# 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
.quitLes points forts de SQLite résident dans une configuration zéro et une maintenance nulle. Il convient pour :
- Petites applications Web (par exemple, blogs personnels)
- Environnements de développement et de test
- Stockage de données local pour les applications de bureau
- Analyse des données (associée au module sqlite3 d’Python)
Stratégies de sauvegarde de base de données
La sauvegarde des données est l’une des tâches les plus importantes de la gestion de bases de données. Voici les méthodes de sauvegarde pour chaque base de données :
Sauvegarde MySQL / MariaDB
# 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 Sauvegarde
# 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.dumpSauvegarde 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 sauvegarde automatisé
Créez une tâche cron pour les sauvegardes automatiques :
# 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>&1Comparaison de bases de données : MySQL, PostgreSQL et MariaDB.
| Fonctionnalité | MySQL | PostgreSQL | MariaDB |
|---|---|---|---|
| Promoteur | Oracle | Communauté PostgreSQL | Fondation MariaDB |
| Licence | GPL v2 (double licence) | Licence PostgreSQL (de type MIT) | GPLv2 |
| Port par défaut | 3306 | 5432 | 3306 |
| Conformité ACIDE | Moteur InnoDB pris en charge | Prise en charge complète | Moteur InnoDB/Aria pris en charge |
| Prise en charge JSON | Type JSON | Type JSONB (plus puissant) | Type JSON |
| Recherche en texte intégral | Soutenu | Pris en charge (plus puissant) | Soutenu |
| Géospatial | Assistance de base | Extension PostGIS (leader du secteur) | Assistance de base |
| Réplication | Réplication principale, réplication de groupe | Réplication en streaming, réplication logique | Réplique principale, cluster Galera |
| Moteurs de stockage | Multiples (InnoDB, MyISAM, etc.) | Moteur unique | Multiples (InnoDB, Aria, ColumnStore, etc.) |
| Conformité aux normes SQL | Bien | Meilleur | Bien |
| Cas d’utilisation | Applications Web, charges de travail lourdes en lecture | Requêtes complexes, analyse de données, SIG | Applications Web, remplacement de MySQL |
| Courbe d’apprentissage | Faible | Moyen | Faible (compatible MySQL) |
Guide de recommandations
- MySQL : le plus grand écosystème et la plupart des ressources communautaires ; adapté à la plupart des applications Web
- PostgreSQL : fonctionnalités les plus puissantes ; idéal pour les requêtes complexes, les opérations JSON et les données géospatiales
- MariaDB : alternative open source à MySQL avec des optimisations de performances plus agressives et une communauté plus ouverte
Résumé des commandes de gestion courantes
# --- 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 countChoisir et configurer la bonne base de données est fondamental pour créer des applications Web fiables. Il est recommandé d’expérimenter différentes bases de données dans votre environnement de développement pour trouver celle qui répond le mieux aux besoins de votre projet.