Skip to Content
DocumentationServeurBase de données

Bases de données

Note

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.

Tip

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 mysql

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

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

Le script vous guidera à travers les opérations suivantes :

  1. Définir le mot de passe root (s’il n’est pas déjà défini)
  2. Supprimer les utilisateurs anonymes (fortement recommandé)
  3. Interdire la connexion à distance root (fortement recommandé)
  4. Supprimer la base de données de test (recommandé)
  5. 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 -p

Opé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.cnf

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

Cré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/tcp
Warning

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

PostgreSQL

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

Cré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 \q

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

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

CommandeDescription
\lLister toutes les bases de données
\c dbnameBasculer vers une base de données spécifique
\dtLister toutes les tables de la base de données actuelle
\d tablenameAfficher la structure du tableau
\duRépertorier tous les utilisateurs/rôles
\diRépertorier tous les index
\dfLister toutes les fonctions
\timingActiver/désactiver la synchronisation des requêtes
\xBasculer le mode d’affichage étendu
\qSortie

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

Ajoutez à 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/tcp

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

Note

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

Opé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 QUIT

Configuration 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.rdb

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

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

SQLite

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

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

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

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

Comparaison de bases de données : MySQL, PostgreSQL et MariaDB.

FonctionnalitéMySQLPostgreSQLMariaDB
PromoteurOracleCommunauté PostgreSQLFondation MariaDB
LicenceGPL v2 (double licence)Licence PostgreSQL (de type MIT)GPLv2
Port par défaut330654323306
Conformité ACIDEMoteur InnoDB pris en chargePrise en charge complèteMoteur InnoDB/Aria pris en charge
Prise en charge JSONType JSONType JSONB (plus puissant)Type JSON
Recherche en texte intégralSoutenuPris en charge (plus puissant)Soutenu
GéospatialAssistance de baseExtension PostGIS (leader du secteur)Assistance de base
RéplicationRéplication principale, réplication de groupeRéplication en streaming, réplication logiqueRéplique principale, cluster Galera
Moteurs de stockageMultiples (InnoDB, MyISAM, etc.)Moteur uniqueMultiples (InnoDB, Aria, ColumnStore, etc.)
Conformité aux normes SQLBienMeilleurBien
Cas d’utilisationApplications Web, charges de travail lourdes en lectureRequêtes complexes, analyse de données, SIGApplications Web, remplacement de MySQL
Courbe d’apprentissageFaibleMoyenFaible (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 count

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