B07 - MariaDB (et MySQL)
Objectif
Installer et sécuriser MariaDB sur Debian/Pop!_OS/Arch, créer une base et un utilisateur, autoriser l’accès depuis une autre VM (architecture 3 tiers), sauvegarder et restaurer.
1. Installation
# Debian / Ubuntu / Pop!_OS
sudo apt install mariadb-server
sudo systemctl enable --now mariadb
# Arch (étape d'initialisation obligatoire en plus)
sudo pacman -S mariadb
sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
sudo systemctl enable --now mariadb
sudo mariadb-secure-installation # (ancien nom : mysql_secure_installation)Réponses conseillées : pas de changement d’authentification par socket pour root, supprimer les utilisateurs anonymes, interdire root à distance, supprimer la base test, recharger les privilèges.
Se connecter : sudo mariadb (root via le compte système, sans mot de passe) ou mariadb -u wpuser -p -h 172.30.16.5 wordpress.
2. Base + utilisateur dédié (jamais l’application en root)
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'172.30.16.2' IDENTIFIED BY 'MotDePasse#Fort1'; -- n'accepte que depuis la VM web
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'172.30.16.2';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'wpuser'@'172.30.16.2';Hôte dans 'user'@'hôte' | Signification |
|---|---|
'localhost' | Connexion locale uniquement |
'172.30.16.2' | Depuis cette IP uniquement (le mieux) |
'172.30.16.%' | Depuis tout le sous-réseau |
'%' | Depuis n’importe où (à éviter) |
| Privilège | Autorise |
|---|---|
SELECT, INSERT, UPDATE, DELETE | Manipuler les données |
CREATE, ALTER, DROP, INDEX | Modifier la structure |
ALL PRIVILEGES ON base.* | Tout sur une base |
REVOKE … | Retirer |
3. Accès distant (VM web → VM BDD)
flowchart LR WEB["VM Web 172.30.16.2<br/>WordPress"] -->|"TCP 3306"| BDD["VM BDD 172.30.16.5<br/>MariaDB<br/>bind-address = 0.0.0.0"]
Par défaut MariaDB n’écoute que sur 127.0.0.1. Sur la VM BDD :
sudo sed -i 's/^bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mariadb.conf.d/50-server.cnf
sudo systemctl restart mariadb
sudo ss -tlnp | grep 3306 # doit afficher 0.0.0.0:3306Sur Arch : fichier /etc/my.cnf.d/server.cnf, section [mysqld].
Tester depuis la VM web :
sudo apt install mariadb-client
mariadb -h 172.30.16.5 -u wpuser -p wordpress -e "SELECT 1;"| Erreur | Cause |
|---|---|
Can't connect … (111 Connection refused) | bind-address encore à 127.0.0.1, ou service arrêté |
(110 Connection timed out) | Pare-feu (iptables/pfSense) bloque 3306 |
Access denied for user 'wpuser'@'172.30.16.2' | Utilisateur créé pour un autre hôte, ou mauvais mot de passe |
Host '…' is not allowed to connect | Aucun compte ne correspond à cet hôte |
Sécurité : ouvre 3306 uniquement pour l'IP du serveur web (
iptables -A INPUT -p tcp -s 172.30.16.2 --dport 3306 -j ACCEPT), jamais vers Internet.
4. Commandes utiles
SHOW DATABASES;
USE wordpress;
SHOW TABLES;
DESCRIBE wp_users;
SELECT user, host FROM mysql.user;
SHOW PROCESSLIST;
SELECT VERSION();5. Sauvegarde et restauration
# Sauvegarder une base (structure + données)
sudo mariadb-dump --single-transaction wordpress > wordpress_$(date +%F).sql
# Toutes les bases
sudo mariadb-dump --all-databases --single-transaction | gzip > toutes_$(date +%F).sql.gz
# Restaurer
sudo mariadb wordpress < wordpress_2026-10-06.sql
gunzip < toutes_2026-10-06.sql.gz | sudo mariadb(Les anciens noms mysqldump / mysql fonctionnent encore.)
6. Importer Northwind (révision SQL B1)
git clone https://github.com/busynovadad/northwind-MySQL.git
cd northwind-MySQL
sudo mariadb < northwind.sql
sudo mariadb < northwind-data.sql
sudo mariadb northwind -e "SELECT COUNT(*) FROM customers;"