Eu sei como exportar / importar os bancos de dados usando o mysqldump e isso é bom, mas como faço para obter os privilégios no novo servidor.
Para obter pontos extras, já existem alguns bancos de dados existentes no novo, como importo os privilégios de servidores antigos sem diminuir o número de pares existentes.
Servidor antigo: 5.0.67-community
Novo servidor: 5.0.51a-24 + lenny1
EDIT: Eu tenho um despejo do db 'mysql' do servidor antigo e agora quero saber a maneira correta de mesclar com o db 'mysql' no novo servidor.
Tentei um 'Import' direto usando o phpMyAdmin e acabei com um erro em relação a uma duplicata (que já migrei manualmente).
Alguém tem uma maneira elegante de mesclar os dois bancos de dados 'mysql'?
Respostas:
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 forneço no meu .bashrc). Esta função:
O primeiro comando do mysql usa SQL para gerar SQL válido, que é canalizado para o segundo comando do 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 da seguinte maneira:
Essa é a maneira certa de mover usuários. Sua MySQL ACL é modificada com SQL puro.
fonte
user
tabela um usuário com host%
, mas nadb
tabelahost
houver entradas em que há um valor explícito, essas entradas nadb
tabela não serão recuperadas usando esse método.-r
ao segundo comando mysql na função e os escapes duplos não serão exibidosmysql
. por exemplo:mysql -r $@
Existem dois métodos para extrair o SQL Grants de uma instância do MySQL
MÉTODO 1
Você pode usar pt-show- grant do Percona Toolkit
MÉTODO # 2
Você pode emular
pt-show-grants
com o seguinteQualquer um dos métodos produzirá um despejo SQL puro das concessões do MySQL. Tudo o que resta a fazer é executar o script em um novo servidor:
De uma chance !!!
fonte
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
fonte
grep rails_admin
você pode inferir como fazer isso sem criar uma função especial para cada caso extremo. Use a opção "partida invertida" do grep da seguinte maneira:mygrants --host=prod-db1 --user=admin --password=secret | grep -Ev 'root|phpmyadmin|debian-sys-maint' | mysql --host=staging-db1 --user=admin --password=secret
Ou utilize o percona-toolkit (antigo maatkit) e use
pt-show-grants
(oumk-show-grants
) para esse fim. Não há necessidade de scripts pesados e / ou procedimentos armazenados.fonte
Você pode mysqldump o banco de dados 'mysql' e importar para o novo; será necessário um flush_privileges ou restart e você definitivamente desejará fazer o backup do banco de dados mysq existente primeiro.
Para evitar remover os privilégios existentes, anexe em vez de substituir linhas nas tabelas de privilégios (db, column_priv, host, func, etc.).
fonte
Você também pode fazer isso como um procedimento armazenado:
e chame com
em seguida, canalize a saída através do comando Richards sed para obter um backup dos privilégios.
fonte
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 era muito mais simples:
Nesse momento, todos os meus dados estavam visíveis se eu fizesse login 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 precisaria emitir asGRANT
declarações.No entanto, verifica-se que o servidor mysql simplesmente precisava ser reiniciado para que os privilégios atualizados nas
mysql.*
tabelas entrassem em vigor:Espero que ajude alguém a alcançar o que deveria ser uma tarefa simples!
fonte
Que tal um script PHP? :)
Veja a fonte neste script e você terá todos os privilégios listados:
fonte
crie um arquivo de script de shell com o seguinte código:
###################################################### 3 #****, em seguida, execute-o no shell assim: você será solicitado a digitar a senha root duas vezes e, em seguida, o GRANTS SQL será exibido na tela. ****
fonte
One-liner fazendo praticamente o mesmo que o incrível
pt-show-grants
:Baseado apenas em ferramentas unix, não é necessário software adicional.
Execute de dentro de um shell bash, supondo que você tenha um trabalho em
.my.cnf
que a senha do seumysql root
usuário possa ser lida.fonte