2009-07-03 14 views
28

Comment faire une sauvegarde complète de la base de données mysql en utilisant mysqldump? Lorsque je fais une sauvegarde, mes tables de la base de données spécifiée sont seulement sauvegardées. Les procédures et les fonctions ne le sont pas.Comment faire une sauvegarde complète de la base de données mysql en utilisant l'utilitaire de ligne de commande mysqldump

est ici la commande de sauvegarde J'utilise:
(système d'exploitation Windows Vista.)

mysqldump -u username -p db1 > backup.sql 

Répondre

12

Cela dépend un peu de votre version. Avant 5.0.13 ce n'est pas possible avec mysqldump.

Sur la page man mysqldump (v 5.1.30)

--routines, -R 

     Dump stored routines (functions and procedures) from the dumped 
     databases. Use of this option requires the SELECT privilege for the 
     mysql.proc table. The output generated by using --routines contains 
     CREATE PROCEDURE and CREATE FUNCTION statements to re-create the 
     routines. However, these statements do not include attributes such 
     as the routine creation and modification timestamps. This means that 
     when the routines are reloaded, they will be created with the 
     timestamps equal to the reload time. 
     ... 

     This option was added in MySQL 5.0.13. Before that, stored routines 
     are not dumped. Routine DEFINER values are not dumped until MySQL 
     5.0.20. This means that before 5.0.20, when routines are reloaded, 
     they will be created with the definer set to the reloading user. If 
     you require routines to be re-created with their original definer, 
     dump and load the contents of the mysql.proc table directly as 
     described earlier. 
0

Utilisez « R » pour les procédures stockées de sauvegarde, mais aussi garder à l'esprit que si vous voulez une décharge cohérente de votre base de données alors que son être modifié vous devez utiliser --single-transaction (si vous ne InnoDB sauvegarde) ou --lock-all-tables (si vous avez besoin aussi des tables MyISAM)

12

utilisez ces commandes: -

mysqldump <other mysqldump options> --routines > outputfile.sql 

Si nous veulent sauvegarder uniquement les procédures stockées et les triggers et non les tables MySQL et les données alors nous devrions lancer quelque chose comme:

mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt <database> > outputfile.sql 

Si vous avez besoin de les importer à un autre db/serveur, vous devrez exécuter quelque chose comme:

mysql <database> < outputfile.sql 
5

En plus du drapeau --routines vous devez accorder les autorisations utilisateur de sauvegarde pour lire les procédures stockées:

GRANT SELECT ON `mysql`.`proc` TO <backup user>@<backup host>; 

Mon ensemble minimal de privilèges de subventions pour la utilisateur de sauvegarde sont:

GRANT USAGE ON *.* TO ... 
GRANT SELECT, LOCK TABLES ON <target_db>.* TO ... 
GRANT SELECT ON `mysql`.`proc` TO ... 
+0

Accordez des privilèges, c'est ce qui me manquait! +1 – carla

+0

Et aussi, n'oublie pas les 'PRIVILÈGES FLUSH' à la fin. – carla

38

Si vous voulez prendre sauvegarde complète à savoir, toutes les bases de données, les procédures, les routines, les événements sans interrompre les connexions.

mysqldump -u <username> -p -A -R -E --triggers --single-transaction > full_backup.sql 
  1. -A- pour toutes les bases de données (vous pouvez aussi utiliser --all-databases).
  2. -R - pour toutes les routines.
  3. -E - pour tous les événements.
  4. - transaction unique - sans verrouiller la table, c'est-à-dire sans interrompre la connexion (R/W).

Incase que vous souhaitez sauvegarder uniquement sur les bases de données.

mysqldump -u <username> -p <Database_Name1><database2> -R -e --triggers --single-transaction > Database_backup.sql 

Incase vous souhaitez effectuer une sauvegarde d'une table spécifique dans une base de données.

mysqldump -u <username> -p <database_name> <Table_name> > table_backup.sql 

Incase vous voulez prendre la sauvegarde d'une structure de base de données n'ajouter que --no-données aux commandes précédentes.

mysqldump -u [username] –p[password] –-no-data [database_name] > [dump_file.sql] 

De même, il y a beaucoup plus d'options avec cet outil. Plus d'informations peuvent être trouvées dans le lien suivant - mysqldump information

1

J'utilise MySQL 5.5.40. Cette version a l'option --all-databases

mysqldump -u<username> -p<password> --all-databases --events > /tmp/all_databases__`date +%d_%b_%Y_%H_%M_%S`.sql 

Cette commande va créer une sauvegarde complète de toutes les bases de données dans le serveur MySQL vers le fichier nommé à ce jour-heure.