Estou tentando copiar meu banco de dados mysql de um Amazon EC2 para um RDS:
Eu fiz com sucesso um mysqldump
do meu banco de dados em minha pasta raiz usando este:
root@ip-xx-xx-xx-xx:~# mysqldump my_database -u my_username -p > my_database.sql
Em seguida, tentei transferir este arquivo .sql para meu novo banco de dados RDS:
root@ip-xx-xx-xx-xx:~# mysql my_database -u my_username -p -h
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql
Infelizmente, recebo a seguinte mensagem de erro:
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)
Tentei de GRANT SUPER..
várias maneiras, mas também recebo erros quando tento fazer isso. A digitação mysql > FLUSH privileges;
também não funciona.
Eu sou um iniciante no mysql, sinto muito por uma pergunta tão fácil. Pensamentos?
mysql
amazon-ec2
amazon-web-services
amazon-rds
grant
Tim Peterson
fonte
fonte
GRANT SUPER
no RDS. O RDS não oferece nenhuma maneira de obter privilégios SUPER.sql
arquivo temCREATE FUNCTION
declaração que precisa de um usuário privilegiado. veja istoRespostas:
Por http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ , você precisa definir
log_bin_trust_function_creators
como 1 no console AWS para carregar seu arquivo de despejo sem erros.Se quiser ignorar esses erros e carregar o restante do arquivo de despejo, você pode usar a
-f
opção:O
-f
relatará erros, mas continuará processando o restante do arquivo de despejo.fonte
-f
não ajudou. Eu tenho o mesmo erro. Usando seu link, estou tendo problemas com a sintaxe das ferramentas RDS Cli. Ou seja, quando vou alterar os privilégios, recebo o seguinte erro:rds-modify-db-parameter-group: Malformed input-Unrecognized option: -–parameters=name=log_bin_trust_function_creators, Usage: rds-modify-db-parameter-group DBParameterGroupName --parameters "name=value, value=value, method=value" [ --parameters "name=value, value=value, method=value" ...] [General Options]
./rds-modify-db-parameter-group mygroup -–parameters "name=log_bin_trust_function_creators, value=on, method=immediate" –I="accesskeyxxxxxx" –S="secretkeyxxxxxxxx"
Eu sei que deve ser um problema de citação ou traço duplo, mas nenhum desses tipos de alterações está funcionando até agora, ugh!-f
opção não fará com que os erros desapareçam, apenas permitirá que as instruções SQL não ofensivas no arquivo sejam processadas. Pelo que li, o RDS está engasgando com procedimentos armazenados no arquivo de despejo. Tente criar um arquivo de despejo sem procedimentos de armazenamento e veja se carrega bem:mysqldump --routines=0 --triggers=0 --events=0 my_database -u my_username -p
-f
opção. A segunda fase pode ser despejar apenas rotinas / proc stred etc. separadamentefonte
O problema com disparadores e procedimentos armazenados no arquivo de despejo é que essas definições incluem o usuário pelo qual o procedimento armazenado deve ser criado, o DEFINER. O usuário provavelmente não existe no RDS, então um erro é gerado. Para poder carregar o arquivo de despejo, você pode remover o DEFINER usando sed ou Perl e criar o procedimento armazenado / gatilho com o usuário que está realizando a importação.
Agora você deve ser capaz de carregar o arquivo de despejo fixo
Como disse na resposta anterior, você deve definir o parâmetro DB:
fonte
OldDefiner
@localhost
/ DEFINER =NewDefiner
@localhost
/ g' ./TargetSqlFile.sqlPara mim, havia apenas 2 comandos em meu arquivo de despejo que exigiam privilégios SUPER:
SET @@GLOBAL.gtid_purged
SET @@SESSION.SQL_LOG_BIN
De acordo com os documentos do mysqldump, você pode desabilitá-los com
--set-gtid-purged=OFF
.Então, olhando para man mysqldump :
Portanto, decidi adicionar
--set-gtid-purged=OFF
ao meumysqldump
comando e poderia importar com êxito o arquivo de despejo resultante.fonte
Conforme definido na documentação da AWS, gatilhos, procedimentos e funções são desabilitados por padrão porque o registro binário está habilitado por padrão. A desativação basicamente torna seu banco de dados mais seguro, mas se você protegeu corretamente através da rede, isso não importa.
Siga estas etapas e seu problema será corrigido https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/
Além disso, você não deve usar definidores ao criar procedimentos. Um simples comando sed pode removê-lo.
fonte
Além de editar
você precisa remover todo o DEFINER de seu arquivo de despejo, verifique o seguinte link para o comando SED que pode ajudar a limpar seu arquivo de despejo sql.
https://www.percona.com/blog/2014/07/02/using-mysql-triggers-and-views-in-amazon-rds/#comment-10968243
fonte
Depois de usar a resposta do arun-r, se o problema não for resolvido, você precisa modificar o arquivo de despejo. É simples.
No arquivo de despejo, você encontrará linhas como:
Você tem que substituir:
username_from_dumped_database
pelo seu nome de usuário no banco de dados rds.host_from_dumped_databse
de%
Não sei por que, mas esse truque funcionou para mim. Um editor de texto simples é suficiente para fazer isso.
fonte