MySQL
Sauvegarde avec mysqldump
Recherche…
Syntaxe
- mysqldump -u [nom d'utilisateur] -p [mot de passe] [autres options] nom_base> dumpFileName.sql /// Pour sauvegarder une base de données unique
- mysqldump -u [nom d'utilisateur] -p [mot de passe] [autres options] nom_base [nom_de_table1 nom_de_table2 nom_de_table2 ...]> dumpFileName.sql /// Pour sauvegarder une ou plusieurs tables
- mysqldump -u [nom d'utilisateur] -p [mot de passe] [autres options] --databases nom_base1 nom_base2 nom_base3 ...> nom_du_fichier.sql /// Pour sauvegarder une ou plusieurs bases de données complètes
- mysqldump -u [nom d'utilisateur] -p [mot de passe] [autres options] --all-databases> dumpFileName.sql /// Pour sauvegarder tout le serveur MySQL
Paramètres
Option | Effet |
---|---|
- | # Options de connexion au serveur |
-h ( --host ) | Hôte (adresse IP ou nom d'hôte) auquel se connecter. La valeur par défaut est localhost ( 127.0.0.1 ) Exemple: -h localhost |
-u ( --user ) | Utilisateur MySQL |
-p ( --password ) | Mot de passe MySQL. Important : Lorsque vous utilisez -p , il ne doit pas y avoir d'espace entre l'option et le mot de passe. Exemple: -pMyPassword |
- | # Options de vidage |
--add-drop-database | Ajoutez une instruction DROP DATABASE avant chaque instruction CREATE DATABASE . Utile si vous souhaitez remplacer des bases de données sur le serveur. |
--add-drop-table | Ajoutez une instruction DROP TABLE avant chaque instruction CREATE TABLE . Utile si vous souhaitez remplacer des tables sur le serveur. |
--no-create-db | Supprimez les instructions CREATE DATABASE dans le vidage. Ceci est utile lorsque vous êtes sûr que la ou les bases de données que vous mettez en place existent déjà sur le serveur où vous allez charger le fichier de vidage. |
-t ( --no-create-info ) | Supprimez toutes les instructions CREATE TABLE dans le vidage. Ceci est utile lorsque vous souhaitez vider uniquement les données des tables et utiliser le fichier de vidage pour remplir des tables identiques dans une autre base de données / serveur. |
-d ( --no-data ) | Ne pas écrire d'informations de table. Cela ne videra que les instructions CREATE TABLE . Utile pour créer des bases de données "template" |
-R ( --routines ) | Inclure les procédures / fonctions stockées dans le vidage. |
-K ( --disable-keys ) | Désactivez les clés pour chaque table avant d'insérer les données et activez les clés une fois les données insérées. Cela accélère les insertions uniquement dans les tables MyISAM avec des index non uniques. |
Remarques
La sortie d'une opération mysqldump
est un fichier légèrement commenté contenant des instructions SQL séquentielles compatibles avec la version des utilitaires MySQL utilisés pour le générer (avec une attention particulière portée sur la compatibilité avec les versions précédentes, mais aucune garantie pour les versions futures). Ainsi, la restauration d'une base de données mysqldump
ed comprend l'exécution de ces instructions. Généralement, ce fichier
-
DROP
s la première table ou vue spécifiée -
CREATE
s cette table ou vue - Pour les tables vidées avec des données (c'est-à-dire sans l'option
--no-data
)-
LOCK
s la table -
INSERT
s toutes les lignes de la table d'origine dans une seule déclaration
-
-
UNLOCK TABLES
- Répète ce qui précède pour toutes les autres tables et vues
-
DROP
s la première routine incluse -
CREATE
cette routine - Répète la même chose pour toutes les autres routines
La présence de DROP
avant CREATE
pour chaque table signifie que si le schéma est présent, qu'il soit vide ou non, l'utilisation d'un fichier mysqldump
pour sa restauration remplira ou écrasera les données.
Création d'une sauvegarde d'une base de données ou d'une table
Créez un instantané de toute une base de données:
mysqldump [options] db_name > filename.sql
Créez un instantané de plusieurs bases de données:
mysqldump [options] --databases db_name1 db_name2 ... > filename.sql
mysqldump [options] --all-databases > filename.sql
Créez un instantané d'une ou plusieurs tables:
mysqldump [options] db_name table_name... > filename.sql
Créez un instantané excluant une ou plusieurs tables:
mysqldump [options] db_name --ignore-table=tbl1 --ignore-table=tbl2 ... > filename.sql
L'extension de fichier .sql
est entièrement une question de style. Toute extension fonctionnerait.
Spécifier le nom d'utilisateur et le mot de passe
> mysqldump -u username -p [other options]
Enter password:
Si vous devez spécifier le mot de passe sur la ligne de commande (par exemple dans un script), vous pouvez l’ajouter après l’option -p
sans espace:
> mysqldump -u username -ppassword [other options]
Si votre mot de passe contient des espaces ou des caractères spéciaux, n'oubliez pas d'utiliser échapper en fonction de votre shell / système.
La forme étendue est facultativement:
> mysqldump --user=username --password=password [other options]
(L'explication spécifiant le mot de passe sur la ligne de commande n'est pas recommandée en raison de problèmes de sécurité.)
Restauration d'une sauvegarde d'une base de données ou d'une table
mysql [options] db_name < filename.sql
Notez que:
-
db_name
doit être une base de données existante; - votre utilisateur authentifié dispose de privilèges suffisants pour exécuter toutes les commandes de votre
filename.sql
; - L'extension de fichier
.sql
est entièrement une question de style. Toute extension fonctionnerait. - Vous ne pouvez pas spécifier un nom de table à charger, même si vous pouvez en spécifier un pour le sauvegarder. Cela doit être fait avec
filename.sql
.
Sinon, lorsque vous utilisez l’ outil de ligne de commande MySQL , vous pouvez restaurer (ou exécuter tout autre script) en utilisant la commande source:
source filename.sql
ou
\. filename.sql
mysqldump depuis un serveur distant avec compression
Afin d'utiliser la compression sur le câble pour un transfert plus rapide, passez l'option --compress
à mysqldump
. Exemple:
mysqldump -h db.example.com -u username -p --compress dbname > dbname.sql
Important: Si vous ne souhaitez pas verrouiller la base de données source , vous devez également inclure --lock-tables=false
. Mais vous ne pouvez pas obtenir une image de base de données cohérente en interne de cette façon.
Pour enregistrer également le fichier compressé, vous pouvez diriger vers gzip
.
mysqldump -h db.example.com -u username -p --compress dbname | gzip --stdout > dbname.sql.gz
restaurer un fichier mysqldump sans compresser
gunzip -c dbname.sql.gz | mysql dbname -u username -p
Remarque: -c
signifie écrire la sortie sur stdout.
Sauvegarde directe sur Amazon S3 avec compression
Si vous souhaitez effectuer une sauvegarde complète d'une installation MySql volumineuse et que vous ne disposez pas d'un stockage local suffisant, vous pouvez le sauvegarder et le compresser directement dans un compartiment Amazon S3. Il est également conseillé de le faire sans avoir le mot de passe DB dans le cadre de la commande:
mysqldump -u root -p --host=localhost --opt --skip-lock-tables --single-transaction \
--verbose --hex-blob --routines --triggers --all-databases |
gzip -9 | s3cmd put - s3://s3-bucket/db-server-name.sql.gz
Vous êtes invité à entrer le mot de passe, après quoi la sauvegarde démarre.
Transfert de données d'un serveur MySQL vers un autre
Si vous devez copier une base de données d'un serveur à un autre, vous avez deux options:
Option 1:
- Stocker le fichier de vidage dans le serveur source
- Copiez le fichier de vidage sur votre serveur de destination
- Chargez le fichier de vidage dans votre serveur de destination
Sur le serveur source:
mysqldump [options] > dump.sql
Sur le serveur de destination, copiez le fichier de vidage et exécutez:
mysql [options] < dump.sql
Option 2:
Si le serveur de destination peut se connecter au serveur hôte, vous pouvez utiliser un pipeline pour copier la base de données d'un serveur à l'autre:
Sur le serveur de destination
mysqldump [options to connect to the source server] | mysql [options]
De même, le script peut être exécuté sur le serveur source, en allant jusqu'à la destination. Dans les deux cas, il est susceptible d'être nettement plus rapide que l'option 1.
Sauvegarde de la base de données avec des procédures stockées et des fonctions
Par défaut les procédures et fonctions stockées ou non générées par mysqldump
, vous devrez ajouter le paramètre --routines
(ou -R
):
mysqldump -u username -p -R db_name > dump.sql
Lors de l'utilisation de --routines
les --routines
création et de modification ne sont pas conservés. Au lieu de cela, vous devez vider et recharger le contenu de mysql.proc
.