Czy mysqldump -all-database zawiera wszystkie obiekty

16

Czy mysqldump -all-databasesobejmuje wszystkie obiekty?

Muszę migrować wszystkie bazy danych na nowy serwer.

Manish Ishwar
źródło

Odpowiedzi:

21

Żadna baza mysqldump -all-database nie obejmuje wszystkich obiektów

mysqldump --help

  -A, --all-databases Dump all the databases. This will be same as --databases
                      with all databases selected.

Zatem mysqldump z opcją --all-databases zrzuca tylko wszystkie bazy danych.

Aby przeprowadzić migrację wszystkich baz danych na nowy serwer, należy wykonać pełną kopię zapasową:

mysqldump całą instancję mysql

mysqldump -h... -u... -p... --events --routines --triggers --all-databases > MySQLData.sql

Wadą jest to, że utworzone w ten sposób kopie zapasowe można przeładować tylko w tej samej głównej wersji wydania mysql, w której wygenerowano mysqldump. Innymi słowy, mysqldump - wszystkie bazy danych z bazy danych MySQL 5.0 nie mogą zostać załadowane do 5.1 lub 5.5. Powód ? Schemat mysql jest zupełnie inny w przypadku głównych wydań.

Oto ogólny sposób na zrzucenie Grantów SQL dla użytkowników, który jest czytelny i bardziej przenośny

mysql -h... -u... -p... --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -h... -u... -p... --skip-column-names -A | sed 's/$/;/g' > MySQLGrants.sql

Spójrz na odpowiedź RolandoMySQLDBA na temat: Jak zoptymalizować mysqldump dużej bazy danych?

Abdul Manaf
źródło
1
Zapomniałeś --events , które jest potrzebne oprócz --routinesa --triggers, a także pominięto --single-transaction, aby uniknąć niepotrzebnego blokowania tabel.
Michael - sqlbot
1
Dla pewności, że jest to jasne, --single-transactionnie utworzy spójnej kopii zapasowej, jeśli w trakcie jej tworzenia będą zapisywane tabele MyISAM. Jednak dodawanie --single-transactionjest dobrym pomysłem, jeśli używasz całego InnoDB i chcesz uniknąć blokowania podczas mysqldumpuruchamiania.
James L