Eu sei como exportar/importar os bancos de dados usando mysqldump e tudo bem, mas como faço para obter os privilégios no novo servidor.
Para pontos extras, já existem alguns bancos de dados existentes no novo, como importo os privilégios de servidores antigos sem destruir o par existente.
Servidor antigo: 5.0.67-community
Novo servidor: 5.0.51a-24+lenny1
EDIT: Eu tenho um dump do banco de dados 'mysql' do servidor antigo e agora quero saber a maneira correta de mesclar com o banco de dados 'mysql' no novo servidor.
Eu tentei um 'Import' direto usando o phpMyAdmin e acabei com um erro em relação a uma duplicata (uma que eu já migrei manualmente).
Alguém tem uma maneira elegante de mesclar os dois bancos de dados 'mysql'?
Não mexa com o banco de dados mysql. Há muito mais acontecendo lá do que apenas a tabela de usuários. Sua melhor aposta é o comando " SHOW GRANTS FOR". Eu tenho muitos aliases e funções de manutenção da CLI no meu .bashrc (na verdade, meus .bash_aliases que eu origino no meu .bashrc). Esta função:
O primeiro comando mysql usa SQL para gerar SQL válido que é canalizado para o segundo comando mysql. A saída é então canalizada através do sed para adicionar comentários bonitos.
O $@ no comando permitirá que você o chame como: mygrants --host=prod-db1 --user=admin --password=secret
Você pode usar seu kit de ferramentas unix completo assim:
Essa é a maneira certa de mover usuários. Sua ACL do MySQL é modificada com SQL puro.
Existem dois métodos para extrair SQL Grants de uma instância MySQL
MÉTODO 1
Você pode usar pt-show-grants do Percona Toolkit
MÉTODO #2
Você pode emular
pt-show-grants
com o seguinteQualquer um dos métodos produzirá um dump SQL puro das concessões do MySQL. Tudo o que resta a fazer é executar o script em um novo servidor:
De uma chance !!!
A resposta de Richard Bronosky foi extremamente útil para mim. Muito Obrigado!!!
Aqui está uma pequena variação que foi útil para mim. É útil para transferir usuários, por exemplo, entre duas instalações do Ubuntu executando o phpmyadmin. Apenas despeje privilégios para todos os usuários, exceto root, phpmyadmin e debian-sys-maint. O código é então
Ou utilize o percona-toolkit (antigo maatkit) e use
pt-show-grants
(oumk-show-grants
) para esse fim. Não há necessidade de scripts complicados e/ou procedimentos armazenados.Você pode fazer o mysqldump do banco de dados 'mysql' e importar para o novo; um flush_privileges ou reiniciar será necessário e você definitivamente desejará fazer backup do banco de dados mysq existente primeiro.
Para evitar remover seus privilégios existentes, certifique-se de anexar em vez de substituir as linhas nas tabelas de privilégios (db, columns_priv, host, func, etc.).
Você também pode fazer isso como um procedimento armazenado:
e chame-o com
em seguida, canalize a saída por meio do comando sed de Richards para obter um backup dos privilégios.
Que tal um script PHP? :)
Veja a fonte neste script e você terá todos os privilégios listados:
Embora pareça que a resposta de @Richard Bronosky seja a correta, me deparei com essa pergunta depois de tentar migrar um conjunto de bancos de dados de um servidor para outro e a solução foi muito mais simples:
Nesse ponto, todos os meus dados estavam visíveis se eu entrasse como
root
, amysql.user
tabela tinha tudo o que eu esperava, mas não consegui fazer login como nenhum dos outros usuários e encontrei essa pergunta assumindo que eu teria que re- emitir asGRANT
declarações.No entanto, acontece que o servidor mysql simplesmente precisava ser reiniciado para que os privilégios atualizados nas
mysql.*
tabelas entrassem em vigor:Espero que isso ajude alguém a alcançar o que deveria ser uma tarefa simples!
crie um arquivo de script de shell com o seguinte código:
#############################################3 #**** então execute-o no shell assim: você será solicitado a digitar a senha do root duas vezes e então o GRANTS SQL será exibido na tela.****
One-liner fazendo praticamente o mesmo que o awesome
pt-show-grants
:Baseado apenas em ferramentas unix, nenhum software adicional é necessário.
Execute de dentro de um shell bash, presumindo que você tenha um trabalho
.my.cnf
em que a senha do seumysql root
usuário possa ser lida.