🗄️ Base de données

MySQL/MariaDB en ligne de commande

Se connecter, naviguer, dumper et restaurer une base MySQL/MariaDB en SSH : les commandes à connaître, les options indispensables et les pièges sur hébergement mutualisé.

intermédiaire ⏱ 15 min Mise à jour : 2026-04-23

phpMyAdmin est pratique, mais au-delà d'un dump de quelques dizaines de mégaoctets, il atteint ses limites (timeouts PHP, upload_max_filesize, etc.). La ligne de commande est plus rapide, plus fiable et permet d'automatiser. Sur nos hébergements Plesk, l'accès SSH est disponible — les clients mysql et mysqldump sont préinstallés.

Récupérer ses identifiants

Dans Plesk : Bases de données > choisir la base > User Settings. Vous obtenez :

  • Nom de la base (ex : monclient_prod)
  • Utilisateur (ex : monclient_user)
  • Mot de passe
  • Hôte — en général localhost si vous êtes sur le même serveur que la base.

Se connecter

# Connexion interactive (mot de passe demandé)
mysql -u monclient_user -p monclient_prod

# En précisant l'hôte si la base est distante
mysql -h bdd.exemple.fr -u monclient_user -p monclient_prod

Une fois connecté, le prompt change : MariaDB [monclient_prod]>. Les commandes se terminent par ;. Tapez exit ou Ctrl+D pour quitter.

⚠️
Ne mettez pas le mot de passe dans la commande
-p seul demande le mot de passe interactivement. -pMOTDEPASSE (collé, sans espace) fonctionne mais fait apparaître le mot de passe dans l'historique shell et dans ps. À proscrire.

Utiliser un fichier d'options (plus sûr)

Créez ~/.my.cnf dans votre home SSH :

[client]
user=monclient_user
password=votre_mot_de_passe
host=localhost

Puis protégez-le : chmod 600 ~/.my.cnf. Les commandes mysql et mysqldump liront automatiquement ce fichier — plus besoin de taper les identifiants.

Commandes essentielles

Explorer la structure

-- Lister les bases accessibles
SHOW DATABASES;

-- Choisir une base
USE monclient_prod;

-- Lister les tables
SHOW TABLES;

-- Voir la structure d'une table
DESCRIBE wp_options;
-- ou plus complet :
SHOW CREATE TABLE wp_options;

-- Voir les index
SHOW INDEX FROM wp_posts;

Requêtes de base

-- Lire
SELECT id, option_name, option_value
FROM wp_options
WHERE option_name LIKE 'siteurl';

-- Compter
SELECT COUNT(*) FROM wp_posts WHERE post_status = 'publish';

-- Modifier (toujours tester avec un SELECT d'abord !)
UPDATE wp_options
SET option_value = 'https://monsite.fr'
WHERE option_name = 'siteurl';

-- Supprimer
DELETE FROM wp_commentmeta WHERE meta_key = 'akismet_result';

-- Insérer
INSERT INTO wp_options (option_name, option_value, autoload)
VALUES ('ma_cle', 'ma_valeur', 'no');
💡
Réflexe : transaction pour les UPDATE/DELETE massifs
START TRANSACTION; avant la requête, puis SELECT de contrôle, puis COMMIT; (ou ROLLBACK; si ça ne va pas). Fonctionne sur toutes les tables InnoDB.

Dump (sauvegarde) avec mysqldump

La commande à retenir :

mysqldump -u monclient_user -p \
    --single-transaction \
    --default-character-set=utf8mb4 \
    monclient_prod > backup.sql

Options utiles

OptionRôle
--single-transactionDump cohérent sur InnoDB sans verrouiller les tables (aucun impact sur la prod).
--default-character-set=utf8mb4Évite les problèmes d'encodage (émojis, accents) sur WordPress moderne.
--no-tablespacesIndispensable sur MySQL 8 en hébergement mutualisé — PROCESS n'est pas accordé aux utilisateurs, le dump échoue sans cette option.
--routines --events --triggersInclut les procédures stockées, événements et triggers.
--skip-lock-tablesPour MyISAM quand on ne peut pas verrouiller (rare sur un hébergement moderne).
--compactDump plus léger, sans les commentaires.

Compresser à la volée

mysqldump --single-transaction monclient_prod | gzip > backup.sql.gz

# Variante zstd, plus rapide et meilleure compression
mysqldump --single-transaction monclient_prod | zstd -o backup.sql.zst

Un dump WordPress typique est divisé par ~5 après gzip.

Dump d'une seule table

mysqldump --single-transaction monclient_prod wp_posts > wp_posts.sql

# Uniquement la structure (sans données)
mysqldump --no-data monclient_prod > schema.sql

# Uniquement les données (sans structure)
mysqldump --no-create-info monclient_prod > data.sql

Restaurer un dump

# Fichier SQL brut
mysql -u monclient_user -p monclient_prod < backup.sql

# Dump compressé gzip
gunzip < backup.sql.gz | mysql -u monclient_user -p monclient_prod

# Dump zstd
zstd -dc backup.sql.zst | mysql -u monclient_user -p monclient_prod
⚠️
Un dump .sql peut contenir des DROP TABLE
Par défaut, mysqldump écrit des DROP TABLE IF EXISTS avant chaque CREATE TABLE. Restaurer un dump écrase donc les tables existantes. Toujours dumper la base actuelle avant d'en restaurer une autre par-dessus.

Trouver les plus grosses tables

Utile pour identifier une table de logs qui a gonflé, des wp_options pollués par des transients, etc.

SELECT
    table_name AS 'Table',
    ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Taille (Mo)',
    table_rows AS 'Lignes'
FROM information_schema.TABLES
WHERE table_schema = 'monclient_prod'
ORDER BY (data_length + index_length) DESC
LIMIT 20;

Taille totale d'une base

SELECT
    table_schema AS 'Base',
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Taille (Mo)'
FROM information_schema.TABLES
WHERE table_schema = 'monclient_prod'
GROUP BY table_schema;

Exécuter une requête en une ligne

Pratique dans un script ou un cron :

mysql -u monclient_user -p monclient_prod -e "SELECT COUNT(*) FROM wp_posts;"

# Export d'une requête en CSV (séparateur tabulation)
mysql -u monclient_user -p monclient_prod \
    -e "SELECT id, post_title FROM wp_posts WHERE post_status='publish';" \
    > posts.tsv

Cas fréquent : migrer une base entre deux serveurs

Sur l'ancien hébergement :

mysqldump --single-transaction --default-character-set=utf8mb4 \
    ancienne_base | gzip > dump.sql.gz

Transfert :

scp dump.sql.gz user@nouveau-serveur:/home/user/

Sur le nouveau serveur :

gunzip < dump.sql.gz | mysql -u nouveau_user -p nouvelle_base

Pour WordPress, pensez à adapter siteurl et home après restauration, et à remplacer les URLs sérialisées avec WP-CLI : wp search-replace 'https://ancien.fr' 'https://nouveau.fr' --all-tables.

Sauvegardes côté Datacampus
Nous effectuons des sauvegardes régulières des bases de données dans le cadre de l'infogérance. Votre propre dump reste utile pour un rollback rapide avant une migration ou une opération à risque — il vit à côté de votre code.

Pour aller plus loin

Besoin d'aide ?

Cette documentation ne couvre pas votre cas ? Notre support humain est là.