Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Najlepsze praktyki mysqldump:Część 2 – Przewodnik po migracji

W drugiej i ostatniej części naszych najlepszych praktyk mysqldump omówimy, jak obsłużyć migrację i import przechowywanych obiektów programów i widoków z bazy danych MySQL. Aby dowiedzieć się więcej o warunkach wstępnych pomyślnej operacji zrzutu i przywracania dużych baz danych MySQL, zapoznaj się z pierwszą częścią tej dwuczęściowej serii blogów.

Importowanie procedur składowanych, funkcji i wyzwalaczy

Domyślnie mysqldump importuje widoki i wyzwalacze. Nie importuje jednak procedur, funkcji i zdarzeń. Aby zaimportować procedury i funkcje, --routines należy określić opcję, a aby zaimportować zdarzenia, --events należy określić opcję.

1. Importowanie wyzwalaczy

Mysqldump domyślnie spróbuje zrzucić wszystkie wyzwalacze w Twojej bazie danych. Aby móc zrzucić triggers tabeli? , musisz mieć TRIGGER przywilej dla stołu. Jeśli użytkownik zrzutu nie ma tego uprawnienia, wyzwalacze zostaną pominięte, a mysqldump nie zgłosi żadnego błędu. Więc nie zdziw się, jeśli nie zobaczysz żadnych wyzwalaczy zaimportowanych do docelowej bazy danych.

2. Importowanie wydarzeń

Aby zaimportować zdarzenia, musisz określić --events opcja podczas wywoływania narzędzia mysqldump. Ta opcja wymaga EVENT uprawnienia do tych baz danych. Ponownie, mysqldump po cichu pominie zdarzenia, jeśli użytkownik zrzutu nie ma tych uprawnień, nawet jeśli określiłeś opcję –event podczas wywoływania mysqldump.

3. Importowanie funkcji i procedury składowanej

Aby zaimportować procedury, musisz określić --routines opcja podczas wywoływania narzędzia mysqldump. Ta opcja wymaga global select przywileje. Nawet w tym przypadku mysqldump po cichu pominie funkcje i procedury, jeśli użytkownik zrzutu nie ma tych uprawnień, nawet jeśli określiłeś --routines opcja podczas wywoływania mysqldump.

3.1 Importowanie funkcji niedeterministycznych

Program przechowywany, który modyfikuje dane jest nazywany niedeterministycznym, jeśli nie daje powtarzalnych wyników. Przykładowa funkcja rand(). Szczególnie trudne jest używanie takich funkcji w konfiguracjach replikowanych, ponieważ mogą one skutkować różnymi danymi w źródle i replice. Aby kontrolować takie możliwości, MySQL nakłada pewne ograniczenia na tworzenie funkcji, jeśli włączone są logi binarne.

Domyślnie dla CREATE FUNCTION oświadczenie do zaakceptowania, przynajmniej jedno z DETERMINISTIC , NO SQL lub READS SQL DATA musi być wyraźnie określony. W przeciwnym razie wystąpi błąd:

ERROR 1418 (HY000) at line 181: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_funable)

Więc jeśli twoja funkcja nie jest zadeklarowana jako deterministyczna w źródle, a logowanie binarne jest włączone w miejscu docelowym, zobaczysz powyższy błąd podczas przywracania zrzutu. Dlatego ważne jest, aby z góry zrozumieć deterministyczny charakter twoich funkcji. Jeśli masz pewność, że Twoje funkcje są deterministyczne, musisz włączyć log_bin_trust_function_creators konfiguracja w miejscu docelowym przed operacją przywracania. Po włączeniu MySQL umożliwia tworzenie takich funkcji nawet wtedy, gdy włączone jest logowanie binarne.

Najlepsze praktyki dla mysqldump:Część 2 — Przewodnik po migracjiKliknij, aby tweetować

4. Charakterystyka SQL SECURITY przechowywanych procedur i widoków.

MySQL umożliwia SQL SECURITY kontekst, który należy określić podczas tworzenia programów sklepowych lub widoków. SQL SECURITY charakterystykę można określić jako DEFINER lub INVOKER . Jeśli SQL_SECURITY kontekst to DEFINER , procedura jest wykonywana przy użyciu uprawnień konta wymienionego w procedurze DEFINER klauzula. Jeśli kontekst to INVOKER , procedura jest wykonywana z uprawnieniami użytkownika, który ją wywołuje. Wartość domyślna to DEFINER .

Jeśli przywracasz zapisane procedury lub widoki, musisz upewnić się, że konto użytkownika definiującego istnieje w docelowej bazie danych z odpowiednimi uprawnieniami. W przeciwnym razie wystąpią błędy podczas przywracania.

Zademonstrujmy to na przykładzie dotyczącym widoków.

Załóżmy, że masz widoki V1 i V2 zdefiniowane jak poniżej:

CREATE definer=admin@'%' VIEW mydb.V1 AS SELECT * FROM solution_table;
CREATE definer=admin@'%' VIEW mydb.V2 AS SELECT * FROM V1 where num1=10;

Pamiętaj, że widoki są domyślnie zrzucane przez mysqldump i jeśli nie masz użytkownika „admin” w miejscu docelowym, podczas operacji przywracania wystąpi poniższy błąd:

Command failed with error - ERROR 1449 (HY000) at line 206 in file: '/mysql_data/mysqldump/sqldump_1582457155758.sql': The user specified as a definer ('admin'@'%') does not exist.

Zauważ, że nie wystarczy tylko upewnić się, że użytkownik istnieje, ale użytkownik musi mieć odpowiednie uprawnienia do wykonywania widoków. Na przykład, jeśli użytkownik admin@'%' istnieje w miejscu docelowym, ale nie ma SELECT uprawnienia do bazy danych mydb, zobaczysz komunikat o błędzie:

'/mysql_data/mysqldump/sqldump_1582456858033.sql':View 'mydb.V2' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them.

Zainteresowany w pełni zarządzanym rozwiązaniem MySQL?

Aby dowiedzieć się więcej o tym, jak dostawca DBaaS, taki jak ScaleGrid, może pomóc w zarządzaniu bazami danych MySQL, odwiedź naszą stronę MySQL. Zobacz, jak ScaleGrid może pozwolić Ci skupić się bardziej na rozwoju produktu, a mniej na zarządzaniu bazami danych.

Podsumowanie

W tej dwuczęściowej serii blogów omówiliśmy ważne wymagania wstępne, które należy spełnić, aby zapewnić pomyślną migrację danych i zapisanych programów. Hosting ScaleGrid MySQL obsługuje te wytyczne, aby zapewnić płynne działanie podczas importowania danych na platformę ScaleGrid. Podziel się z nami swoim doświadczeniem i najlepszymi praktykami, które stosujesz w przypadku migracji danych MySQL!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak skonfigurować automatyczne przełączanie awaryjne dla bazy danych Moodle MySQL?

  2. 2 sposoby konwersji między liczbą dziesiętną a szesnastkową w MySQL

  3. Porównanie między wtyczką MySQL Clone a Xtrabackup

  4. Zrozumienie statystyk HAProxy dla MySQL i PostgreSQL

  5. MySQL Data - Najlepszy sposób na zaimplementowanie stronicowania?