2009-07-03 25 views

Odpowiedz

12

To zależy trochę od wersji. Przed wersją 5.0.13 nie jest to możliwe w mysqldump.

Od strony mysqldump człowieka (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

Użyj „-R” do procedur tworzenia kopii zapasowych przechowywane, ale również pamiętać, że jeśli chcesz spójną zrzut bazy danych, a jego istota zmodyfikowany trzeba użyć --single-transaction (jeśli tylko backup InnoDB) lub --lock-all-tables (jeśli trzeba także tabel MyISAM)

12

użyj następujących poleceń: -

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

gdybyśmy chcesz kopii zapasowej jedynie procedury składowane i wyzwalacze i nie MySQL tabele i dane wtedy powinniśmy uruchomić coś takiego:

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

Jeśli trzeba importować je do innego db/serwer trzeba będzie uruchomić coś takiego:

mysql <database> < outputfile.sql 
5

Oprócz --routines flagi trzeba przyznać zapasowych użytkownikowi uprawnień do odczytu procedur przechowywanych:

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

Moje minimalny zestaw przywilejów dotacji na użytkownik kopii zapasowej to:

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

Przyznanie uprawnień, tego właśnie mi brakowało! +1 – carla

+0

A także, nie zapomnij o "PRZYWILEJACH FLUSH" na końcu. – carla

38

Jeśli chcesz wziąć pełną kopię zapasową, tzn. wszystkie bazy danych, procedury, procedury, zdarzenia bez przerywania połączeń.

mysqldump -u <username> -p -A -R -E --triggers --single-transaction > full_backup.sql 
  1. -A- dla wszystkich baz danych (również można użyć --all-databases).
  2. -R - dla wszystkich procedur.
  3. -E - dla wszystkich wydarzeń.
  4. - pojedyncza transakcja - bez blokowania stołu, tj. Bez przerywania połączenia (R/W).

Złóż, że chcesz wykonać kopię zapasową tylko w bazie danych.

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

Złóż, że chcesz wykonać kopię zapasową określonej tabeli w bazie danych.

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

Chcąc wykonać kopię zapasową struktury bazy danych, wystarczy dodać --no-dane do poprzednich poleceń.

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

Podobnie istnieje wiele więcej opcji z tym narzędziem. Więcej informacji można znaleźć pod następującym odsyłaczem: mysqldump information

1

Używam MySQL 5.5.40. Ta wersja posiada opcję --all-databases

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

Polecenie to utworzy pełną kopię zapasową wszystkich baz danych MySQL do pliku o nazwie do bieżącej daty i godziny.

Powiązane problemy