Aller au contenu

Gérer ses bases de données

Christophe TREMBLAY-GUILLOUX
Christophe TREMBLAY-GUILLOUXIngénieur système Linux

En cas d'utilisation de phpMyAdmin, il faut exporter un format SQL dans un format compressé, de préférence, dans l'ordre le format bzip2, gzip, zip.

En ligne de commande, voici comment préparer un fichier SQL compressé, remplacez les xxxxx par les bonnes valeurs:

bash
# Répertoire vers lequel sauvegarder la base de données
DBPATH=xxxxx/
# Nom de la base de données
DBNAME=xxxxx
# Identifiant de connexion à la base de données
DBUSER=xxxxx
# Mot de passe de l'identifiant
DBPASS=xxxxx
# Serveur de la base de données (mettre localhost à la place de 127.0.0.1 si ça ne marche pas)
DBHOST=127.0.0.1
mysqldump --single-transaction --routines --triggers --events --hex-blob -h${DBHOST} -u${DBUSER} -p${DBPASS} ${DBNAME} | bzip2 -c > ${DBPATH}/mysql_backup_${DBNAME}_`date +%Y%m%d-%H%M%S`.sql.bz2
  • Le fichier obtenu un nom ressemblant à mysql_backup_${DBNAME}_`date +%Y%m%d-%H%M%S`.sql.bz2.
  • Le déposer sur le serveur dans le répertoire virtualmin-backup.

Pour importer sans avoir l'exécution de PHP en intermédiaire, il faut utiliser la ligne de commande, soit via une connexion SSH, soit via le terminal intégré à Virtualmin.

Une fois la connexion établie sur le terminal:

bash
# Nom de la nouvelle base de données
DBNAME=xxxxx
# Identifiant de connexion à la base de données
DBUSER=xxxxx
# Mot de passe de l'identifiant
DBPASS=xxxxx
# Serveur de la base de données (mettre localhost à la place de 127.0.0.1 si ça ne marche pas)
DBHOST=127.0.0.1
# La base doit être VIDE : supprimer toutes ses tables si besoin (sans toucher à la base)
mysql --protocol=TCP -N -h${DBHOST} -u${DBUSER} -p${DBPASS} ${DBNAME} -e 'SHOW TABLES' | sed 's/.*/DROP TABLE IF EXISTS `&`;/' | mysql --protocol=TCP -h${DBHOST} -u${DBUSER} -p${DBPASS} ${DBNAME}
# Alternatives possibles selon le format du fichier.
# Le sed retire les instructions USE / CREATE DATABASE du dump : sinon il bascule
# vers la base d'origine (erreur "Access denied ... to database ...").
# Importer un fichier au format sql.bz2
bunzip2 -dc db_filename.sql.bz2 | sed -E '/^\s*(USE|CREATE DATABASE)\b/Id' | mysql --protocol=TCP --binary-mode=1 -h${DBHOST} -u${DBUSER} -p${DBPASS} ${DBNAME}
# Importer un fichier au format sql.gz
gunzip -c db_filename.sql.gz | sed -E '/^\s*(USE|CREATE DATABASE)\b/Id' | mysql --protocol=TCP --binary-mode=1 -h${DBHOST} -u${DBUSER} -p${DBPASS} ${DBNAME}
# Importer un fichier au format sql.zip
unzip -p db_filename.sql.zip | sed -E '/^\s*(USE|CREATE DATABASE)\b/Id' | mysql --protocol=TCP --binary-mode=1 -h${DBHOST} -u${DBUSER} -p${DBPASS} ${DBNAME}