2009-07-03 7 views

risposta

12

Dipende un po 'della versione. Prima della 5.0.13 questo non è possibile con mysqldump.

Dalla pagina mysqldump uomo (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

Usa '-R' di procedure di backup memorizzati, ma anche tenere a mente che se si vuole una discarica coerente del database, mentre il suo essere modificato è necessario utilizzare --single-transaction (se solo InnoDB backup) o --lock-all-tables (se hai bisogno anche di tabelle MyISAM)

12

usare questi comandi: -

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

Se noi desidera effettuare il backup SOLO le stored procedure e trigger e non le tabelle di MySQL ed i dati allora dovremmo eseguire qualcosa di simile:

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

Se è necessario importarli in un altro db/server si dovrà eseguire qualcosa di simile:

mysql <database> < outputfile.sql 
5

Oltre alla bandiera --routines è necessario concedere le autorizzazioni utente di backup per leggere le stored procedure:

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

mio minimo insieme di privilegi sovvenzione per la utente di backup sono:

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

Concedere privilegi, questo è quello che mi mancava! +1 – carla

+0

Inoltre, non dimenticare un "FLUSH PRIVILEGES;" alla fine. – carla

38

Nel caso in cui si vuole prendere backup completo vale a dire, tutti i database, le procedure, le routine, gli eventi senza interrompere qualsiasi collegamento.

mysqldump -u <username> -p -A -R -E --triggers --single-transaction > full_backup.sql 
  1. -A- per tutti i database (anche è possibile utilizzare --all-databases).
  2. -R - per tutte le routine.
  3. -E - per tutti gli eventi.
  4. --single-transaction - senza bloccare la tabella, ad es., Senza interrompere alcuna connessione (R/W).

In caso si desideri eseguire il backup solo sui database.

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

In caso si desideri eseguire il backup di una tabella specifica in un database.

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

In caso si desideri eseguire il backup di una struttura di database, è sufficiente aggiungere --no-data ai comandi precedenti.

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

Allo stesso modo ci sono molte più opzioni con questo strumento. Ulteriori informazioni possono essere trovate al seguente link-- mysqldump information

1

Sto usando MySQL 5.5.40. Questa versione ha la possibilità --all-databases

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

Questo comando creerà un backup completo di tutti i database MySQL server per file chiamato al corrente di data e ora.