Řešení chyb, ke kterým běžně dochází během migrace nebo po migraci na flexibilní server Azure Database for MySQL
PLATÍ PRO: Flexibilní server Azure Database for MySQL – Jednoúčelový server Azure Database for MySQL
Důležité
Jednoúčelový server Azure Database for MySQL je na cestě vyřazení. Důrazně doporučujeme upgradovat na flexibilní server Azure Database for MySQL. Další informace o migraci na flexibilní server Azure Database for MySQL najdete v tématu Co se děje s jednoúčelovým serverem Azure Database for MySQL?
Flexibilní server Azure Database for MySQL je plně spravovaná služba využívající komunitní verzi MySQL. Prostředí MySQL v prostředí spravované služby se může lišit od spuštění MySQL ve vašem vlastním prostředí. V tomto článku uvidíte některé běžné chyby, se kterými se můžou uživatelé setkat při první migraci nebo vývoji na flexibilním serveru Azure Database for MySQL.
Běžné chyby připojení
CHYBA 1184 (08S01): Přerušené připojení 22 k databázi: "db-name" uživatel: 'user' host: 'hostIP' (init_connect příkaz selhal)
Výše uvedená chyba nastane po úspěšném přihlášení, ale před spuštěním jakéhokoli příkazu při vytvoření relace. Výše uvedená zpráva označuje, že jste nastavili nesprávnou hodnotu parametru init_connect
serveru, což způsobuje selhání inicializace relace.
Na úrovni relace nejsou podporované některé parametry require_secure_transport
serveru, takže při pokusu o změnu hodnot těchto parametrů init_connect
může dojít k chybě 1184 při připojování k instanci flexibilního serveru Azure Database for MySQL, jak je znázorněno níže:
mysql> show databases; CHYBA 2006 (HY000): Server MySQL se odpojil bez připojení. Pokoušíte se znovu připojit... ID připojení: 64897 Aktuální databáze: *** ŽÁDNÁ *** CHYBA 1184 (08S01): Přerušené připojení 22 k databázi: 'db-name' user: 'user' host: 'hostIP' (init_connect příkaz selhal)
Řešení: Resetování init_connect
hodnoty na kartě Parametry serveru na webu Azure Portal a nastavení pouze podporovaných parametrů serveru pomocí parametru init_connect.
Chyby způsobené nedostatkem oprávnění SUPER a role DBA
Služba nepodporuje oprávnění SUPER a roli DBA. V důsledku toho můžete narazit na některé běžné chyby uvedené níže:
CHYBA 1419: Nemáte oprávnění SUPER a binární protokolování je povolené (můžete chtít použít méně bezpečnou log_bin_trust_function_creators proměnnou).
K výše uvedené chybě může dojít při vytváření funkce, triggeru níže nebo při importu schématu. Příkazy DDL, jako je CREATE FUNCTION nebo CREATE TRIGGER, se zapisují do binárního protokolu, aby je sekundární replika mohl spustit. Vlákno SQL repliky má úplná oprávnění, která je možné zneužít ke zvýšení oprávnění. Pro ochranu před tímto nebezpečím pro servery, které mají povolené binární protokolování, modul MySQL vyžaduje, aby tvůrci uložených funkcí měli kromě obvyklého oprávnění CREATE ROUTINE oprávnění SUPER.
CREATE FUNCTION f1(i INT)
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
RETURN i;
END;
Řešení: Pokud chcete chybu vyřešit, nastavte log_bin_trust_function_creators
na hodnotu 1 z okna parametrů serveru na portálu, spusťte příkazy DDL nebo naimportujte schéma a vytvořte požadované objekty. Abyste se v budoucnu vyhnuli chybě, můžete i nadále udržovat log_bin_trust_function_creators
na 1 serveru. Naším doporučením je nastavit log_bin_trust_function_creators
, aby se riziko zabezpečení zvýrazněné v dokumentaci komunity MySQL na flexibilním serveru Azure Database for MySQL minimalizoval, protože protokol přihrádek není vystaven žádným hrozbám.
CHYBA 1227 (42000) na řádku 101: Přístup odepřen; Pro tuto operaci potřebujete (aspoň jedno z) oprávnění SUPER. Operace selhala s ukončovacím kódem 1
K výše uvedené chybě může dojít při importu souboru s výpisem paměti nebo vytvoření procedury, která obsahuje definovatele.
Řešení: Pokud chcete tuto chybu vyřešit, může uživatel s právy správce udělit oprávnění k vytváření nebo provádění procedur spuštěním příkazu GRANT, jak je znázorněno v následujících příkladech:
GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';
Alternativně můžete definovatele nahradit jménem uživatele správce, který spouští proces importu, jak je znázorněno níže.
DELIMITER;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`127.0.0.1`*/ /*!50003
DELIMITER;;
/* Modified to */
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`AdminUserName`@`ServerName`*/ /*!50003
DELIMITER ;
CHYBA 1227 (42000) na řádku 295: Přístup odepřen; Pro tuto operaci potřebujete (aspoň jedno z) oprávnění SUPER nebo SET_USER_ID.
Při provádění příkazu CREATE VIEW s příkazy DEFINER v rámci importu souboru s výpisem paměti nebo spuštěním skriptu může dojít k výše uvedené chybě. Flexibilní server Azure Database for MySQL nepovoluje oprávnění SUPER ani oprávnění SET_USER_ID žádnému uživateli.
Řešení:
- Pokud je to možné, použijte uživatele definovatele a spusťte PŘÍKAZ CREATE VIEW. Je pravděpodobné, že existuje mnoho zobrazení s různými definovateli, kteří mají různá oprávnění, takže to nemusí být možné. NEBO
- Upravte soubor výpisu paměti nebo skript CREATE VIEW a odeberte příkaz DEFINER= ze souboru výpisu. NEBO
- Upravte soubor s výpisem paměti nebo skript CREATE VIEW a nahraďte hodnoty defineru uživatelem oprávněními správce, kteří provádí import nebo spouští soubor skriptu.
Tip
Použití sed nebo perl k úpravě souboru výpisu paměti nebo skriptu SQL k nahrazení příkazu DEFINER=
CHYBA 1227 (42000) na řádku 18: Přístup odepřen; Pro tuto operaci potřebujete (aspoň jedno z) oprávnění SUPER.
K výše uvedené chybě může dojít, pokud se pokoušíte importovat soubor s výpisem paměti z instance flexibilního serveru Azure Database for MySQL s povoleným GTID pro cílovou instanci flexibilního serveru Azure Database for MySQL. Mysqldump přidá příkaz SET @@SESSION.sql_log_bin=0 do souboru s výpisem paměti ze serveru, kde se používají identifikátory GTID, které při opětovném načítání souboru s výpisem paměti zakáže binární protokolování.
Řešení: Pokud chcete tuto chybu vyřešit při importu, odeberte nebo zakomentujte následující řádky v souboru mysqldump a spusťte import znovu, abyste zajistili, že je úspěšný.
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION. SQL_LOG_BIN;
NASTAVIT @@SESSION. SQL_LOG_BIN= 0; NASTAVIT @@GLOBAL. GTID_PURGED='; NASTAVIT @@SESSION. SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
Běžné chyby připojení pro přihlášení správce serveru
Když se vytvoří instance flexibilního serveru Azure Database for MySQL, koncovému uživateli se během vytváření serveru poskytne přihlášení správce serveru. Přihlášení správce serveru umožňuje vytvářet nové databáze, přidávat nové uživatele a udělovat oprávnění. Pokud se odstraní přihlášení správce serveru, jeho oprávnění se odvolají nebo se změní heslo, může se stát, že se v aplikaci při připojení zobrazí chyby připojení. Následuje několik běžných chyb.
CHYBA 1045 (28000): Přístup byl odepřen pro uživatele uživatelské jméno @IP adresa (pomocí hesla: ANO)
K výše uvedené chybě dochází v následujících případech:
- Uživatelské jméno neexistuje.
- Uživatelské jméno uživatele bylo odstraněno.
- jeho heslo se změní nebo resetuje.
Řešení:
Ověřte, jestli "uživatelské jméno" existuje jako platný uživatel na serveru nebo jestli se omylem odstraní. Následující dotaz můžete spustit tak, že se přihlásíte k uživateli flexibilního serveru Azure Database for MySQL:
select user from mysql.user;
Pokud se nemůžete přihlásit k instanci flexibilního serveru Azure Database for MySQL a spustit výše uvedený dotaz, doporučujeme resetovat heslo správce pomocí webu Azure Portal. Možnost resetování hesla z webu Azure Portal vám pomůže znovu vytvořit uživatele, resetovat heslo a obnovit oprávnění správce, což vám umožní přihlásit se pomocí správce serveru a provádět další operace.