Czy mysqldump -all-databases
obejmuje wszystkie obiekty?
Muszę migrować wszystkie bazy danych na nowy serwer.
Ż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?
--events
, które jest potrzebne oprócz--routines
a--triggers
, a także pominięto--single-transaction
, aby uniknąć niepotrzebnego blokowania tabel.--single-transaction
nie utworzy spójnej kopii zapasowej, jeśli w trakcie jej tworzenia będą zapisywane tabele MyISAM. Jednak dodawanie--single-transaction
jest dobrym pomysłem, jeśli używasz całego InnoDB i chcesz uniknąć blokowania podczasmysqldump
uruchamiania.