Condividi tramite


Risolvere gli errori comuni durante o dopo la migrazione a Server flessibile di Database di Azure per MySQL.

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

Importante

Il server singolo del Database di Azure per MySQL è in fase di ritiro. È consigliabile eseguire l'aggiornamento al server flessibile del Database di Azure per MySQL. Per altre informazioni sulla migrazione a Database di Azure per MySQL - Server flessibile, vedere Cosa succede a Database di Azure per MySQL - Server singolo?

Server flessibile di Database di Azure per MySQL è un servizio di database completamente gestito basato sulla versione Community di MySQL. L'esperienza MySQL in un ambiente di servizio gestito potrebbe risultare diversa rispetto all'esecuzione di MySQL in un ambiente personale. In questo articolo verranno illustrati alcuni degli errori comuni che gli utenti potrebbero rilevare quando eseguono per la prima volta la migrazione o lo sviluppo nel servizio Server flessibile di Database di Azure per MySQL.

Errori di connessione comuni

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

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

Esistono alcuni parametri del server come require_secure_transport che 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 di Database di Azure per MySQL, come illustrato di seguito:

mysql> mostrare i database; ERRORE 2006 (HY000): il server MySQL non è più disponibile. Tentativo di riconnessione in corso... Id connessione: 64897 Database attuale: *** NESSUNO *** ERRORE 1184 (08S01): connessione interrotta da 22 a db: 'db-name' user: 'user' host: 'hostIP' (comando init_connect non riuscito)

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

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 possano verificarsi alcuni degli errori comuni elencati di seguito:

ERRORE 1419: You do not have the SUPER privilege and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable) (Non è disponibile il privilegio SUPER e la registrazione binaria è abilitata. È consigliabile usare la variabile log_bin_trust_function_creators meno sicura)

È possibile che l'errore indicato possa verificarsi 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 rischio per i server in cui è abilitata la registrazione binaria, il motore di MySQL richiede agli autori di funzioni archiviate di avere il privilegio SUPER, oltre al privilegio CREATE ROUTINE consueto.

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

Risoluzione: per risolvere l'errore, impostare log_bin_trust_function_creators su 1 dai parametri del server pannello 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 al fine di evitare l'errore in futuro. È consigliabile impostare log_bin_trust_function_creators perché il rischio di sicurezza evidenziato nella documentazione della community di MySQL è minimo nel server flessibile di Database di Azure per MySQL in quanto il log bin non è esposto ad alcuna minaccia.

ERRORE 1227 (42000) alla riga 101: Access denied; you need (at least one of) the SUPER privilege(s) for this operation. 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 possa verificarsi durante l'importazione di un file di dump o durante la creazione di una procedura che contiene definer.

Risoluzione: per risolvere questo errore, l'utente amministratore può concedere privilegi per la creazione o l'esecuzione di procedure mediante l'esecuzione del comando GRANT, come indicato 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 linea 295: Accesso negato. L'operazione richiede almeno uno dei privilegi SUPER o SET_USER_ID

Questo errore potrebbe 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. Il server flessibile del Database di Azure per MySQL non concede ad alcun utente i privilegi SUPER o SET_USER_ID.

Risoluzione:

  • Usare il definer utente per eseguire l'istruzione CREATE VIEW, se possibile. Probabilmente esistono numerose viste con definer diversi che hanno autorizzazioni diverse, quindi questa soluzione potrebbe non essere applicabile. OPPURE
  • Modificare il file dump o lo script CREATE VIEW e rimuovere l'istruzione DEFINER= dal file 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. L'operazione richiede almeno uno dei privilegi SUPER

L'errore precedente potrebbe verificarsi se si sta tentando di importare il file di dump da un'istanza del server flessibile di Database di Azure per MySQL con GTID abilitato per l'istanza del server flessibile di Database di Azure per MySQL di destinazione. Mysqldump aggiunge l'istruzione SET @@SESSION.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.

Risoluzione: 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 sia corretta.

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

Errori di connessione comuni per l'accesso amministratore server

Durante la creazione di un server flessibile del Database di Azure per MySQL, l'utente finale fornisce un accesso amministratore server. Questo tipo di accesso consente di creare nuovi database, aggiungere nuovi utenti e concedere autorizzazioni. Se l'accesso amministratore server viene eliminato o se le relative autorizzazioni vengono revocate o la password viene cambiata, potrebbero iniziare a verificarsi errori di connessione nell'applicazione. Di seguito sono elencati alcuni degli errori comuni.

ERRORE 1045 (28000): Accesso negato per l'utente "nomeutente"@"indirizzo IP" (Uso della password: SÌ)

Questo errore si verifica se:

  • Il nome utente non esiste.
  • Il nome utente dell'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'account dell'utente del server flessibile del Database di Azure per MySQL:

    select user from mysql.user;
    
  • Se non è possibile accedere al server flessibile del Database di Azure per MySQL per eseguire la query, è consigliabile reimpostare la password di amministratore usando il portale di Azure. L'opzione di reimpostazione della password dal portale di Azure consentirà di ricreare l'utente, reimpostare la password e ripristinare le autorizzazioni di amministratore, in modo da eseguire l'accesso con le credenziali di amministratore del server ed eseguire ulteriori operazioni.