Risolvere gli errori comuni durante o dopo la migrazione a Server flessibile di Database di Azure per MySQL.
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 vengono visualizzati alcuni degli errori comuni che gli utenti potrebbero riscontrare durante la migrazione o lo sviluppo in Database di Azure per MySQL server flessibile per la prima volta.
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... ID connessione: 64897 Database corrente: ** NONE ** 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: 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 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;
Soluzione: per risolvere l'errore, impostare su log_bin_trust_function_creators
1, 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 riga 295: Accesso negato; è necessario (almeno uno dei) privilegi SUPER o SET_USER_ID per questa operazione
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;