Como posso resolver um erro que recebi ao usar o mysqldump no Amazon RDS para MySQL ou MariaDB?
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:
- Sua instância de banco de dados do RDS de destino tem o log binário habilitado (período de retenção de backup > 0) e o arquivo mysqldump contém um objeto, como um gatilho, visualização, função ou evento. Para obter mais informações, consulte Como resolver erros 1227 e do definidor ao importar dados para minha instância de banco de dados do Amazon RDS para MySQL usando o mysqldump?
- O arquivo mysqldump que você importou tentou criar um objeto com um usuário do atributo DEFINER que não existe na sua instância de banco de dados do RDS, ou você tentou criar um usuário de atributo que não tem os privilégios de usuário SUPER necessários. Para obter mais informações, consulte Como resolver erros 1227 e do definidor ao importar dados para minha instância de banco de dados do Amazon RDS para MySQL usando o mysqldump?
- O comando para a linha referenciada na mensagem de erro exige privilégio(s) SUPER que não são fornecidos nas instâncias de banco de dados do RDS.
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
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 3 anos