A dica de hoje será para explicar o por quê e como resolver o erro:
"mysqldump: Got error: 1044: Access denied for user 'usuario'@'localhost' to database 'database' when using LOCK TABLES"
Apresentado quando tenta-se utilizar o comando:
# mysqldump...
Por default, quando você utiliza o
mysqldump, o
MySQL trava as tabelas para que nenhum dado seja inserido ou alterado durante o processo.
Isso garante maior consistência no resultado final da tarefa e o erro acontece quando você tenta executar o comando com um usuário que não tem o direito de travar essas tabelas, então, para resolvermos isso, basta adicionar o parâmetro "--single-transaction" ao comando, ficando da seguinte maneira:
# mysqldump database --single-transaction -u usuario -p'senha' > backup.sql
O único problema, é que enquanto o mysqldump faz o seu trabalho, as tabelas vão continuar liberadas, ou seja, qualquer gravação de dados será permitida, podendo causar inconsistência ao seu backup por exemplo.
Para resolvermos de uma maneira melhor e definitiva, devemos aplicar as permissões corretas ao usuário.
Como exemplo, vou aplicar permissão para consulta (select) e permissão para travar as tabelas (lock tables) ao usuário:
# mysql -u root -p'senha_do_root_mysql'
mysql>
GRANT SELECT,LOCK TABLES ON DATABASE.* TO 'usuario'@'localhost'
Obs.: em "Database", coloque o nome da sua base de dados.
Pronto, agora o usuário terá acesso a consulta e o direito de travar as tabelas enquanto é feito o backup, sendo assim, você poderá usar o comando padrão, como abaixo:
# mysqldump -u usuario -p'senha' > backup.sql
Testado no
Debian 6 e
MySQL 5.1.
Veja
essa e outras dicas em
meu blog, onde posto dicas e soluções em infraestrutura de
TI.
Gostou? Compartilhe e deixe seu comentário.
Achou algum erro? Precisa de ajuda? Críticas? Deixe seu comentário.
Obrigado!
Jeferson R. Costa
Nenhum comentário foi encontrado.