Come posso risolvere un errore che ho ricevuto durante l'utilizzo di mysqldump su Amazon RDS per MySQL o MariaDB?

5 minuti di lettura
0

Sto utilizzando un'istanza database di Amazon Relational Database Service (Amazon RDS) che esegue MySQL o MariaDB. Sto usando mysqldump per importare o esportare dati e ricevo un errore. Come posso individuare e risolvere questo errore?

Descrizione breve

È possibile ricevere i seguenti errori quando si utilizza mysqldump:

  • Couldn't execute FLUSH TABLES WITH READ LOCK
  • Max_allowed_packet
  • Errori su privilegi SUPER e DEFINER
  • Errori di connessione persa o interrotta

Risoluzione

Errore "Couldn't execute FLUSH TABLES WITH READ LOCK"

Quando si utilizza l'opzione**--master-data** con mysqldump per esportare i dati, è possibile che venga visualizzato un errore simile al seguente:

"mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'user'@'%' (using password: YES) (1045)"

L'opzione**--master-data** acquisisce FLUSH TABLES WITH READ LOCK. Ciò richiede privilegi SUPER che l'utente master di Amazon RDS non dispone, inoltre Amazon RDS non supporta GLOBAL READ LOCK. Quando MySQL esegue un'istruzione CHANGE MASTER TO per ottenere informazioni di log, il nome e la posizione del file di log binario (coordinate) vengono registrati nel file mysqldump. Per altre informazioni, consulta la documentazione MySQL per ER\ _ACCESS\ _DENIED\ _ERROR.

Per risolvere questo errore, rimuovi l'opzione**--master-data**. Quando rimuovi questa opzione, non viene fornita una posizione esatta del log in mysqldump. Per ovviare a questo problema, esegui mysqldump quando l'applicazione viene interrotta o recupera mysqldump da una replica di lettura di Amazon RDS. In questo modo, è possibile ottenere l'esatta posizione del log eseguendo SHOW SLAVE STATUS, perché l'arresto della replica conferma che le posizioni del binlog non cambiano. Segui questi passaggi per creare un mysqldump da una replica di lettura MySQL Amazon RDS di questa istanza database RDS.

1.    Imposta un valore per la conservazione del log binario.

2.    Interrompi la replica eseguendo il seguente comando sulla replica di lettura:

CALL mysql.rds_stop_replication;

3.    Prendi mysqldump senza**--master-data=2** dalla replica di lettura.

4.    Esegui SHOW SLAVE STATUS sulla replica e acquisisci Master_Log_File ed Exec_Master_Log_Pos.

5.    Se si utilizza la replica per l'applicazione, avvia nuovamente la replica utilizzando la seguente procedura archiviata:

CALL mysql.rds_start_replication;

Se non si utilizza la replica per l'applicazione, è possibile eliminarla.

Errori "Max_allowed_packet"

Quando si utilizza mysqldump per esportare i dati, è possibile che venga visualizzato un errore simile al seguente:

"Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `tb_name` at row: XX"

Questo errore si verifica quando il comando mysqldump richiede un pacchetto più grande del valore del parametro max_allowed_packet impostato per l'istanza database RDS. Per altre informazioni, consulta la documentazione MySQL per pacchetti troppo grandi.

Per risolvere gli errori max_allowed_packet, aumenta il valore globale per max_allowed_packet o configura max_allowed_packet in mysqldump per quella sessione (anziché globalmente per l'intero database). Ad esempio, è possibile modificare il comando in modo simile al seguente:

$ mysqldump --max_allowed_packet=1G ......

Errori su privilegi SUPER e DEFINER

Quando si utilizza mysqldump per importare dati in un'istanza database RDS che esegue MySQL o MariaDB, è possibile che venga visualizzato un errore simile al seguente:

"ERROR 1227 (42000) at line XX: Access denied; you need (at least one of) the SUPER privilege(s) for this operation"

Questo errore indica uno o più dei seguenti problemi:

Errori di connessione persa o interrotta

Quando viene usato mysqldump per importare dati, potresti ricevere un errore simile al seguente:

"mysqldump: error 2013: lost connection to mysql server during query when dumping table"

--or--

"mysqldump: Connessione interrotta XXXXXX a db: 'db\ _name' user: 'master_user' host: 'XXXXXXX' (Got timeout writing communication packets)"

Per altre informazioni sulla causa e sulla risoluzione di questo errore, consulta How do I resolve the error "MySQL server has gone away" when connecting to my Amazon RDS MySQL DB instance?


Informazioni correlate

Documentazione MySQL per mysqldump

Come posso attivare funzioni, procedure e trigger per l’istanza database Amazon RDS per MySQL?