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ègeAutorise
SELECT, INSERT, UPDATE, DELETEManipuler les données
CREATE, ALTER, DROP, INDEXModifier 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:3306

Sur 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;"
ErreurCause
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 connectAucun 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;"

Voir aussi