Como posso resolver um erro que recebi ao usar o mysqldump no Amazon RDS para MySQL ou MariaDB?

5 minuto de leitura
0

Estou usando uma instância de banco de dados do Amazon Relational Database Service (Amazon RDS) que está executando MySQL ou MariaDB. Estou usando o mysqldump para importar ou exportar dados e estou recebendo um erro. Como faço para solucionar esses erros?

Breve descrição

Você pode receber os seguintes erros ao usar o mysqldump:

  • Erros Couldn't execute FLUSH TABLES WITH READ LOCK
  • Erros Max_allowed_packet
  • Erros de privilégio(s) SUPER e DEFINER
  • Erros de conexão perdidos ou interrompidos

Resolução

Erro Couldn't execute FLUSH TABLES WITH READ LOCK

Ao usar a opção**--master-data** com mysqldump para exportar dados, você pode receber um erro semelhante ao seguinte:

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

A opção**--master-data** adquire um FLUSH TABLES WITH READ LOCK. Isso exige privilégios SUPER que o usuário principal do Amazon RDS não tem, e o Amazon RDS não oferece suporte ao GLOBAL READ LOCK. Quando o MySQL executa uma instrução CHANGE MASTER TO para obter informações de log, o nome e a posição (coordenadas) do arquivo de log binário são registrados no arquivo mysqldump. Para obter mais informações, consulte a documentação do MySQL para ER_ACCESS_DENIED_ERROR.

Para resolver esse erro, remova a opção --master-data. Ao remover essa opção, você não recebe uma posição de log exata no mysqldump. Para contornar esse problema, pegue o mysqldump quando sua aplicação estiver parado ou pegue o mysqldump de uma réplica de leitura do Amazon RDS. Isso permite que você obtenha a posição exata do log executando SHOW SLAVE STATUS porque a interrupção da réplica confirma que as posições do log binário não mudam. Siga estas etapas para criar um mysqldump a partir de uma réplica de leitura MySQL do Amazon RDS dessa instância de banco de dados do RDS.

1.Defina um valor para a retenção do log binário.

2.Pare a replicação executando o seguinte comando na réplica de leitura:

CALL mysql.rds_stop_replication;

3.Pegue o mysqldump sem --master-data=2 da réplica de leitura.

4.Execute SHOW SLAVE STATUS na réplica e capture o Master_Log_File e o Exec_Master_Log_Pos.

5.Se você usar a réplica para sua aplicação, inicie a replicação novamente usando o seguinte procedimento armazenado:

CALL mysql.rds_start_replication;

Se você não usar a réplica para sua aplicação, poderá excluí-la.

Max_allowed_packet errors

Ao usar mysqldump para exportar dados, você pode receber um erro semelhante ao seguinte:

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

Esse erro ocorre quando o comando mysqldump solicita um pacote maior que o valor do parâmetro max_allowed_packet definido para sua instância de banco de dados do RDS. Para obter mais informações, consulte a documentação do MySQL para Pacote muito grande.

Para resolver erros max_allowed_packet, aumente o valor global para max_allowed_packet ou configure o max_allowed_packet no mysqldump para essa sessão (em vez de globalmente para todo o banco de dados). Por exemplo, você pode modificar o comando da seguinte forma:

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

Erros de privilégio(s) SUPER e DEFINER

Ao usar o mysqldump para importar dados para uma instância de banco de dados do RDS que esteja executando o MySQL ou o MariaDB, você pode receber um erro semelhante ao seguinte:

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

Esse erro indica um ou mais dos seguintes problemas:

Erros de conexão perdidos ou interrompidos

Ao usar o mysqldump para importar dados, você pode receber um erro semelhante ao seguinte:

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

-ou-

"mysqldump: Aborted connection XXXXXX to db: 'db_name' user: 'master_user' host: 'XXXXXXX' (Got timeout writing communication packets)"

Para obter mais informações sobre a causa e a resolução desse erro, consulte How do I resolve the error "MySQL server has gone away" when connecting to my Amazon RDS MySQL DB instance?


Informações relacionadas

Documentação do MySQL para mysqldump

Como faço para ativar funções, procedimentos e gatilhos para minha instância de banco de dados Amazon RDS for MySQL?