Udostępnij za pośrednictwem


Rozwiązywanie problemów z błędami często występującymi podczas migracji lub po migracji do usługi Azure Database for MySQL — serwer elastyczny

Azure Database for MySQL — elastyczny serwer to w pełni zarządzana usługa obsługiwana przez wersję społeczności programu MySQL. Środowisko mySQL w środowisku usługi zarządzanej może różnić się od uruchamiania bazy danych MySQL we własnym środowisku. W tym artykule zobaczysz niektóre typowe błędy, które mogą wystąpić podczas migracji do usługi Azure Database for MySQL — serwer elastyczny po raz pierwszy.

Typowe błędy połączeń

BŁĄD 1184 (08S01): Przerwano połączenie 22 z bazą danych: "db-name" użytkownik: "user" host: "hostIP" (init_connect polecenie nie powiodło się)

Powyższy błąd występuje po pomyślnym zalogowaniu, ale przed wykonaniem dowolnego polecenia po ustanowieniu sesji. Powyższy komunikat wskazuje, że ustawiono niepoprawną wartość parametru init_connect serwera, co powoduje niepowodzenie inicjowania sesji.

Istnieją pewne parametry serwera, takie jak require_secure_transport te nie są obsługiwane na poziomie sesji, a więc próba zmiany wartości tych parametrów przy użyciu init_connect może spowodować błąd 1184 podczas nawiązywania połączenia z wystąpieniem serwera elastycznego usługi Azure Database for MySQL, jak pokazano poniżej:

mysql> show databases; BŁĄD 2006 (HY000): Serwer MySQL zniknął Bez połączenia. Trwa próba ponownego nawiązania połączenia... Identyfikator połączenia: 64897 Bieżąca baza danych: ** BRAK ** BŁĄD 1184 (08S01): Przerwano połączenie 22 z bazą danych: "db-name" użytkownik: "user" host: "hostIP" (init_connect polecenie nie powiodło się)

Rozwiązanie: Zresetuj init_connect wartość na karcie Parametry serwera w witrynie Azure Portal i ustaw tylko obsługiwane parametry serwera przy użyciu parametru init_connect.

Błędy spowodowane brakiem uprawnień administratora i roli administratora bazy danych

Uprawnienia ADMINISTRATORA i rola ADMINISTRATORA nie są obsługiwane w usłudze. W związku z tym mogą wystąpić niektóre typowe błędy wymienione poniżej:

BŁĄD 1419: Nie masz uprawnień administratora i włączono rejestrowanie binarne (możesz użyć mniej bezpiecznej zmiennej log_bin_trust_function_creators)

Powyższy błąd może wystąpić podczas tworzenia funkcji, wyzwalacza, jak pokazano poniżej lub importowania schematu. Instrukcje DDL, takie jak CREATE FUNCTION lub CREATE TRIGGER, są zapisywane w dzienniku binarnym, aby replika pomocnicza mogła je wykonać. Wątek SQL repliki ma pełne uprawnienia, które można wykorzystać w celu podniesienia uprawnień. Aby chronić przed tym niebezpieczeństwem dla serwerów z włączonym rejestrowaniem binarnym, aparat MySQL wymaga, aby przechowywane twórcy funkcji mieli uprawnienie SUPER, oprócz zwykłych uprawnień CREATE ROUTINE.

CREATE FUNCTION f1(i INT)
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
  RETURN i;
END;

Rozwiązanie: Aby rozwiązać ten problem, ustaw wartość log_bin_trust_function_creators 1, wykonaj instrukcje DDL lub zaimportuj schemat, aby utworzyć żądane obiekty. Aby uniknąć błędu w przyszłości, można zachować log_bin_trust_function_creators wartość 1 dla serwera. Naszym zaleceniem jest ustawienie log_bin_trust_function_creators ryzyka zabezpieczeń wyróżnionego w dokumentacji społeczności mySQL jest minimalne w usłudze Azure Database for MySQL — serwer elastyczny, ponieważ dziennik bin nie jest narażony na żadne zagrożenia.

BŁĄD 1227 (42000) w wierszu 101: Odmowa dostępu; potrzebujesz (co najmniej jednego z) uprawnień administratora dla tej operacji. Operacja nie powiodła się z kodem zakończenia 1

Powyższy błąd może wystąpić podczas importowania pliku zrzutu lub procedury tworzenia zawierającej definicje.

Rozwiązanie: Aby rozwiązać ten błąd, administrator może udzielić uprawnień do tworzenia lub wykonywania procedur, uruchamiając polecenie GRANT, jak w następujących przykładach:

GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';

Alternatywnie możesz zastąpić definicje nazwą użytkownika administratora, który uruchamia proces importowania, jak pokazano poniżej.

DELIMITER;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`127.0.0.1`*/ /*!50003
DELIMITER;;

/* Modified to */

DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`AdminUserName`@`ServerName`*/ /*!50003
DELIMITER ;

BŁĄD 1227 (42000) w wierszu 295: Odmowa dostępu; potrzebujesz (co najmniej jednego z) uprawnień ADMINISTRATORA lub SET_USER_ID dla tej operacji

Powyższy błąd może wystąpić podczas wykonywania polecenia CREATE VIEW z instrukcjami DEFINER w ramach importowania pliku zrzutu lub uruchamiania skryptu. Serwer elastyczny usługi Azure Database for MySQL nie zezwala na uprawnienia administratora ani uprawnienia SET_USER_ID do żadnego użytkownika.

Rozwiązanie:

  • Jeśli to możliwe, użyj użytkownika definiującego, aby wykonać polecenie CREATE VIEW. Istnieje prawdopodobieństwo, że istnieje wiele widoków z różnymi definicjami o różnych uprawnieniach, więc może to nie być możliwe. LUB
  • Edytuj plik zrzutu lub skrypt CREATE VIEW i usuń instrukcję DEFINER= z pliku zrzutu. LUB
  • Zmodyfikuj plik zrzutu lub skrypt CREATE VIEW i zastąp wartości definiujące użytkownika uprawnieniami administratora wykonującymi importowanie lub wykonywanie pliku skryptu.

Napiwek

Użyj pliku sed lub perl, aby zmodyfikować plik zrzutu lub skrypt SQL w celu zastąpienia instrukcji DEFINER=

BŁĄD 1227 (42000) w wierszu 18: Odmowa dostępu; potrzebujesz (co najmniej jednego z) uprawnień administratora dla tej operacji

Powyższy błąd może wystąpić, jeśli próbujesz zaimportować plik zrzutu z wystąpienia serwera elastycznego usługi Azure Database for MySQL z włączonym identyfikatorem GTID do docelowego wystąpienia serwera elastycznego usługi Azure Database for MySQL. Mysqldump dodaje instrukcję SET @@SESSION.sql_log_bin=0 do pliku zrzutu z serwera, na którym są używane identyfikatory GTID, co wyłącza rejestrowanie binarne podczas ponownego ładowania pliku zrzutu.

Rozwiązanie: Aby rozwiązać ten błąd podczas importowania, usuwania lub oznaczania komentarza poniższych wierszy w pliku mysqldump i uruchom importowanie ponownie, aby upewnić się, że przebieg zakończył się pomyślnie.

SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION. SQL_LOG_BIN;
USTAW @@SESSION. SQL_LOG_BIN = 0; USTAW @@GLOBAL. GTID_PURGED=''; USTAW @@SESSION. SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

Typowe błędy połączenia dla logowania administratora serwera

Po utworzeniu wystąpienia serwera elastycznego usługi Azure Database for MySQL logowanie administratora serwera jest udostępniane przez użytkownika końcowego podczas tworzenia serwera. Logowanie administratora serwera umożliwia tworzenie nowych baz danych, dodawanie nowych użytkowników i przyznawanie uprawnień. Jeśli logowanie administratora serwera zostanie usunięte, jego uprawnienia zostaną odwołane lub jego hasło zostanie zmienione, możesz zacząć widzieć błędy połączeń w aplikacji podczas nawiązywania połączeń. Poniżej przedstawiono niektóre typowe błędy.

BŁĄD 1045 (28000): Odmowa dostępu dla użytkownika "username"@'IP address" (przy użyciu hasła: TAK)

Powyższy błąd występuje, jeśli:

  • Nazwa użytkownika nie istnieje.
  • Nazwa użytkownika została usunięta.
  • jego hasło jest zmieniane lub resetowane.

Rozwiązanie:

  • Sprawdź, czy "nazwa użytkownika" istnieje jako prawidłowy użytkownik na serwerze lub czy został przypadkowo usunięty. Następujące zapytanie można wykonać, logując się do użytkownika usługi Azure Database for MySQL — serwer elastyczny:

    select user from mysql.user;