Risolvere gli errori comunemente rilevati durante o dopo la migrazione a Database di Azure per MySQL - Server flessibile

SI APPLICA A: Database di Azure per MySQL - Server singolo Database di Azure per MySQL - Server flessibile

Importante

Database di Azure per MySQL server singolo si trova nel percorso di ritiro. È consigliabile eseguire l'aggiornamento a Database di Azure per MySQL server flessibile. Per altre informazioni sulla migrazione a Database di Azure per MySQL server flessibile, vedere Che cosa accade a Database di Azure per MySQL server singolo?

Database di Azure per MySQL server flessibile è un servizio completamente gestito basato sulla versione community di MySQL. L'esperienza MySQL in un ambiente di servizio gestito può risultare diversa rispetto all'esecuzione di MySQL in un ambiente personale. In questo articolo vengono visualizzati alcuni degli errori comuni che gli utenti possono riscontrare durante la migrazione o lo sviluppo in Database di Azure per MySQL server flessibile per la prima volta.

Errori comuni di Connessione ion

ERRORE 1184 (08S01): connessione interrotta da 22 a db: 'db-name' user: 'user' host: 'hostIP' (comando init_connect non riuscito)

L'errore precedente si verifica dopo l'accesso, ma prima di eseguire qualsiasi comando quando viene stabilita la sessione. Il messaggio precedente indica che è stato impostato un valore non corretto del init_connect parametro del server, causando l'esito negativo dell'inizializzazione della sessione.

Esistono alcuni parametri del server che require_secure_transport non sono supportati a livello di sessione e quindi il tentativo di modificare i valori di questi parametri usando init_connect può comportare l'errore 1184 durante la connessione all'istanza del server flessibile Database di Azure per MySQL, come illustrato di seguito:

mysql> show databases; ERRORE 2006 (HY000): Il server MySQL non è più disponibile. Tentativo di riconnessione... Connessione ion id: 64897 Database corrente: * ERRORE 1184 (08S01): connessione interrotta da 22 a db: 'db-name' user: 'user' host: 'hostIP' (comando init_connect non riuscito)

Risoluzione: reimpostare init_connect il valore nella scheda Parametri del server in portale di Azure e impostare solo i parametri del server supportati usando init_connect parametro.

Errori dovuti a mancanza del privilegio SUPER e del ruolo DBA

Il privilegio SUPER e il ruolo DBA non sono supportati nel servizio. È quindi possibile che si verifichino alcuni degli errori comuni elencati di seguito:

ERRORE 1419: Non si dispone del privilegio SUPER e la registrazione binaria è abilitata (è possibile usare la variabile di log_bin_trust_function_creators meno sicura)

È possibile che l'errore indicato si verifichi durante la creazione di una funzione, di un trigger come indicato di seguito o dell'importazione di uno schema. Le dichiarazioni DDL come CREATE FUNCTION o CREATE TRIGGER vengono scritte nel log binario, per consentire alla replica secondaria di eseguirle. Il thread SQL della replica ha privilegi completi, che possono essere sfruttati per elevare i privilegi. Per evitare questo pericolo per i server con registrazione binaria abilitata, il motore MySQL richiede che gli autori di funzioni archiviate abbiano il privilegio SUPER, oltre al consueto privilegio CREATE ROUTINE.

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

Soluzione: per risolvere l'errore, impostare su log_bin_trust_function_creators 1 dal pannello dei parametri del server nel portale, eseguire le istruzioni DDL o importare lo schema per creare gli oggetti desiderati. È possibile continuare a mantenere log_bin_trust_function_creators su 1 per il server per evitare l'errore in futuro. È consigliabile impostare log_bin_trust_function_creators come il rischio di sicurezza evidenziato nella documentazione della community di MySQL è minimo in Database di Azure per MySQL server flessibile perché il log bin non è esposto ad alcuna minaccia.

ERRORE 1227 (42000) alla riga 101: Accesso negato; per questa operazione sono necessari (almeno uno dei privilegi SUPER). Operation failed with exitcode 1 (Accesso negato. L'operazione richiede almeno uno dei privilegi SUPER. L'operazione non è riuscita con codice 1)

È possibile che l'errore precedente si verifichi durante l'importazione di un file di dump o durante la creazione di una procedura che contiene definer.

Soluzione: per risolvere questo errore, l'utente amministratore può concedere privilegi per creare o eseguire procedure eseguendo il comando GRANT come negli esempi seguenti:

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

In alternativa, è possibile sostituire i definer con il nome dell'utente amministratore che esegue il processo di importazione, come illustrato di seguito.

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

/* Modified to */

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

ERRORE 1227 (42000) alla riga 295: Accesso negato; per questa operazione sono necessari (almeno uno dei privilegi SUPER o edizione StandardT_Uedizione StandardR_ID)

Questo errore può verificarsi durante l'esecuzione di script CREATE VIEW con istruzioni DEFINER come parte dell'importazione di un file dump o dell'esecuzione di uno script. Database di Azure per MySQL server flessibile non consente privilegi SUPER o privilegi di edizione StandardT_Uedizione StandardR_ID a qualsiasi utente.

Risoluzione:

  • Usare il definer utente per eseguire l'istruzione CREATE VIEW, se possibile. È probabile che ci siano molte visualizzazioni con diversi definer che hanno autorizzazioni diverse, quindi questo potrebbe non essere fattibile. OPPURE
  • Modificare il file di dump o lo script CREATE VIEW e rimuovere l'istruzione DEFINER= dal file di dump. OPPURE
  • Modificare il file dump o lo script CREATE VIEW e sostituire i valori dell'istruzione definer con l'utente con autorizzazioni di amministratore che sta eseguendo l'importazione o il file di script.

Suggerimento

Usare sed o perl per modificare un file dump o uno script SQL per sostituire l'istruzione DEFINER=

ERRORE 1227 (42000) alla riga 18: Accesso negato; per questa operazione sono necessari (almeno uno dei privilegi SUPER)

L'errore precedente può verificarsi se si sta tentando di importare il file di dump da un'istanza del server flessibile Database di Azure per MySQL con GTID abilitato per l'istanza del server flessibile Database di Azure per MySQL di destinazione. Mysqldump aggiunge edizione Standard T @@edizione StandardSSION.sql_log_bin=0 a un file dump da un server in cui sono in uso GTID, che disabilita la registrazione binaria mentre il file di dump viene ricaricato.

Soluzione: per risolvere l'errore durante l'importazione, la rimozione o il commento delle righe seguenti nel file mysqldump ed eseguire di nuovo l'importazione per assicurarsi che funzioni correttamente.

edizione Standard T @MYSQLDUMP_TEMP_LOG_BIN = @@edizione Standard SSION. SQL_LOG_BIN; edizione Standard T @@edizione Standard SSION. SQL_LOG_BIN= 0; edizione Standard T @@GLOBAL. GTID_PURGED='; edizione Standard T @@edizione Standard SSION. SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

Errori di connessione comuni per l'accesso dell'amministratore del server

Quando viene creata un'istanza del server flessibile Database di Azure per MySQL, l'accesso dell'amministratore del server viene fornito dall'utente finale durante la creazione del server. L'accesso amministratore del server consente di creare nuovi database, aggiungere nuovi utenti e concedere autorizzazioni. Se l'accesso dell'amministratore del server viene eliminato, le relative autorizzazioni vengono revocate o la relativa password viene modificata, è possibile iniziare a visualizzare errori di connessione nell'applicazione durante le connessioni. Di seguito sono riportati alcuni degli errori comuni.

ERRORE 1045 (28000): Accesso negato per l'utente 'username'@'INDIRIZZO IP' (con password: SÌ)

Questo errore si verifica se:

  • Il nome utente non esiste.
  • Il nome utente è stato eliminato.
  • La password è stata cambiata o reimpostata.

Risoluzione:

  • Verificare se il nome utente esiste come utente valido nel server o se è stato eliminato accidentalmente. È possibile eseguire la query seguente accedendo all'utente del server flessibile Database di Azure per MySQL:

    select user from mysql.user;
    
  • Se non è possibile accedere all'istanza del server flessibile Database di Azure per MySQL per eseguire la query precedente, è consigliabile reimpostare la password amministratore usando portale di Azure. L'opzione reimposta password da portale di Azure consente di ricreare l'utente, reimpostare la password e ripristinare le autorizzazioni di amministratore, che consentirà di accedere usando l'amministratore del server ed eseguire altre operazioni.

Passaggi successivi

Se non è stata trovata la risposta che si sta cercando, prendere in considerazione le opzioni seguenti: