W trakcie tworzenia zautomatyzowanego rozwiązania do tworzenia kopii zapasowych i przywracania całego serwera MySQL natrafiłem na mysql
bazę danych, która wydaje się zawierać konta użytkowników, uprawnienia, metadane itp. Czy należy wykonać kopię zapasową tej bazy danych? Czy tworzenie kopii zapasowej i próba jej przywrócenia spowoduje uszkodzenie?
Miałem trochę czasu, że Googling na „mysql tworzy kopię zapasową bazy danych mysql”, jak można sobie wyobrazić.
mysql
backup
database
backup-restoration
database-backup
Daniel Beardsley
źródło
źródło
Odpowiedzi:
Oto coś interesującego do rozważenia: Tworzenie kopii zapasowej
mysql
bazy danych znacznie Cię ogranicza, ponieważ możesz przywrócić taką bazę tylko do tej samej wersji mysql, z której uruchomiono kopię zapasową. Oto dlaczego:Oto mysql.user z MySQL 5.0.45
Oto mysql.user z MySQL 5.1.32
Oto mysql.user z MySQL 5.5.12
Próba przywrócenia pliku mysql.user do wersji MySQL, do której nie był przeznaczony, spowoduje losowe problemy z uprawnieniami. Sposobem na wykonanie kopii zapasowej uprawnień użytkownika mysql w sposób niezależny od wersji jest zrzucenie przyznanych uprawnień użytkownika w SQL. W ten sposób granty użytkownika są całkowicie przenośne. Istnieją dwa sposoby na osiągnięcie tego:
OPCJA 1: Korzystanie z MAATKIT
mk-show-grants wygeneruje SQL potrzebny do dowolnej instancji mysql, z którą się łączysz. (Należy pamiętać, że MAATKIT jest migrowany do Percona Toolkit. To narzędzie najprawdopodobniej nazywa się pt-show-grants).
OPCJA 2: Skrypt zrzuć DOTACJE SQL
Napisałem własną emulację grantów mk-show-grants. Pominie anonimowych użytkowników. To wygląda tak:
Użycie jednej z tych opcji spowoduje utworzenie bardziej stabilnej kopii zapasowej dotacji użytkowników.
NA ODDZIELNEJ INFORMACJI
Teraz, jeśli używasz tej opcji log-output
baza danych mysql zapełni wolny dziennik (jeśli jest włączony) jako tabelę mysql w schemacie mysql zamiast w pliku tekstowym. Tak więc wykonywanie fizycznych kopii zapasowych będzie obejmować takie dzienniki oparte na tabeli mysql. Uwierz mi, nie jest warte miejsca na dysku, jeśli dziennik ogólny i dziennik wolnych zapytań są włączone i gromadzą się w schemacie mysql. Po prostu trzymaj się opcji zrzutu zrzutu MySQL.
AKTUALIZACJA 2011-09-19 15:54 EDT
Jest jeden bardzo ważny czynnik w utrzymywaniu kopii zapasowych uprawnień MySQL przez SQL Grants:
Każdy użytkownik wychodzi ze swoim hasłem w jakimś zmodyfikowanym formacie MD5. W przypadku mysql 4.0 i starszych jest to 16-znakowy ciąg szesnastkowy. W mysql 4.1+ jest to 41 znaków (gwiazdka, po której następuje 40-znakowy ciąg szesnastkowy).
Przed przywróceniem zrzutu SQL Grants sprawdź plik zrzutu SQL Grants pod kątem 16-znakowych haseł szesnastkowych. Jeśli widzisz choć jeden, musisz dodać następujące pliki do /etc/my.cnf (lub my.ini dla Windows) na serwerze mysql, na którym przywrócisz:
Old_password dyrektywa dopuszcza 16-char i 41-char haseł współistnieć i prawidłowo uwierzytelniać w tej samej instancji bieg mysql. Wszelkie hasła utworzone w przyszłości będą miały 16 znaków.
Ponowne uruchomienie MySQL nie jest wymagane. Po prostu uruchom to:
źródło
SHOW GRANTS
generację SQL, używającQUOTE()
:SELECT CONCAT('SHOW GRANTS FOR ',QUOTE(user),'@',QUOTE(host),';') FROM mysql.user WHERE user<>'';
Tak, zdecydowanie chcesz wykonać kopię zapasową
mysql
bazy danych - jest to integralna część twojej usługi. Podczas można odtworzyć jego zawartość od innych informacji, trudności w ten sposób są wygórowane, jeśli starasz się wrócić do służby szybko.źródło
Możesz przywrócić bazę danych mysql między wersjami, przynajmniej nowszymi wersjami. Istnieje narzędzie o nazwie
mysql_upgrade
zawarte w nowych wersjach MySQL, które uaktualni dla ciebie tabele systemowe.http://dev.mysql.com/doc/refman/5.0/en/mysql-upgrade.html
źródło
Tak długo, jak przywracasz do podobnej wersji mysql, możesz przywracać bazę danych mysql z kopii zapasowej. Jeśli masz wątpliwości, po prostu różnicuj schematy bazy danych mysql (ten z kopii zapasowej i ten z nowego serwera mysql).
źródło