Como copiar usuários e privilégios de uma instância MySQL para outra

  O DBA enfrenta em seu dia a dia muita solicitações e entre elas, muitas vezes temos que refazer a instância por diversos motivos, como erro na instância, atualização de versão ou até mesmo a criação de novo ambiente de homologação ou separação de schema.

E pensando nesse momento que nos deparamos com essa situação, precisamos copiar os usuários de uma instalação para outra.

Nesse artigo vou mostrar duas ferramentas que nos auxilia nessa tarefa,  e  comparar o seu funcionamento e caracteristicas.

Vamos utilizar o “mysqlpump”, que já vem nativo junto com o MySQL, e também o Percona Tools “pt-show-grants”.

Primeiros passos: antes de iniciarmos, temos que fazer a seguinte análise: user, host e plugin. Isso é muito importante porque pode ter alguns usuários que tenham algum plugin de conexão específico.

Também vale a pena reforçar que o plugin mysql_native_password precisa ser habilitado para uso na versão 8.4 e está extinto na versão 9.x em diante. Então, se tiver algum usuário nessa situação, ele precisa ser recriado com o novo método de plugin.

O mysqlpump, com o recurso de exportar usuários, surgiu a partir da versão 5.7.8, com CREATE USER e seus respectivos GRANTs. Na versão 5.7.26, houve uma correção importante relacionada ao funcionamento do recurso --users.


Conhecendo os plugins de nosso ambiente

Vamos explorar previamente se precisamos de algum plugin específico e também nossos usuários.

Já damos de cara com nosso primeiro desafio. Não achou que ia ser tão fácil ?

Temos um plugin auth_socket instalado. Então, para que funcione 100%, teremos que manter o mesmo plugin em ambos. Caso contrário, dará erro de execução para o usuário que utiliza o mesmo.

Ambiente mapeado, vamos partir para a exportação dos usuários.


1. Primeiro vamos analisar o mysqlpump

Ele é bem simples e segue o padrão do client MySQL.

mysqlpump           -> utilitário
-p                             -> password (senha)
-h                             -> host
-P                             -> porta
–exclude-databases=% -> (para não pegar nenhuma base de dados, queremos apenas os usuários)
–users                     -> usuários (todos eles, é possível excluir ou adicionar um específico)
>                               -> saída para o arquivo “pump_user.sql”

Comandos úteis que vou sugerir:

–add-drop-user            -> (adiciona DROP USER antes de criar)
–include-user=             -> (filtra por usuários desejados)
–exclude-user=            -> (filtra por usuários indesejados)

Agora vamos ver o arquivo que foi gerado “pump_user.sql”

 


2. Vamos analisar o pt-show-grants

O pt-show-grants, por sua vez, é muito mais completo e cheio de recursos.

pt-show-grants      -> utilitário
-u                              -> usuário
–ask-pass               -> para perguntar a senha, não é o “-p”
-h                             -> host
-P                             -> porta do banco
>                              -> saída para o arquivo pt_user.sql

Comandos úteis que irei sugerir:

–separate                 -> organiza/separa os comandos individualmente por grant
–drop                        -> DROP USER antes de criar
–revoke                     -> monta um comando de REVOKE se precisar, está na mão
–convert-MariaDB -> converte grants do MariaDB para o MySQL

Algo que eu percebi nele é que deixa o arquivo bem mais assertivo e a conversão da senha para o padrão binário, como podemos ver na foto abaixo.


Exportação manual e conversão para binário

Agora vamos fazer uma exportação manual e com a conversão para binário.

O parâmetro global foi introduzido no MySQL 8.0.17, print_identified_with_as_hex, e realiza a conversão da senha para o tipo binário.

Na demonstração abaixo:

 


Conclusão

Agora já temos os usuários em mãos para a criação na nova versão, ambas as ferramentas funcionam perfeitamente, cada uma com suas vantagens.

O mysqlpump, que na minha opinião já vem nativo ao MySQL, para uma cópia simples é uma excelente alternativa, se estiver acima nas  versões acima de :  5.7.26

Já o Percona pt-show-grants nos traz novas possibilidades de organização, REVOKE dos grants e conversão de MariaDB para MySQL, demonstrando ser mais completo e com mais recursos.

Ambas são excelentes. O importante é saber usar e como usar.

Referencias:

https://dev.mysql.com/doc/refman/8.0/en/mysqlpump.html

https://docs.percona.com/percona-toolkit/pt-show-grants.html

COMPARTILHE:
Picture of Marcio

Marcio

Minha paixão por tecnologia e minhas habilidades em resolução de problemas me permitem enfrentar desafios complexos e entregar soluções de banco de dados de alta qualidade. Estou sempre ávido por aprender e me manter atualizado com as últimas tendências em administração de banco de dados.
Picture of Marcio

Marcio

Minha paixão por tecnologia e minhas habilidades em resolução de problemas me permitem enfrentar desafios complexos e entregar soluções de banco de dados de alta qualidade. Estou sempre ávido por aprender e me manter atualizado com as últimas tendências em administração de banco de dados.

PARTICIPE

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

POSTADO POR
Picture of Marcio

Marcio

Minha paixão por tecnologia e minhas habilidades em resolução de problemas me permitem enfrentar desafios complexos e entregar soluções de banco de dados de alta qualidade. Estou sempre ávido por aprender e me manter atualizado com as últimas tendências em administração de banco de dados.
PARCEIROS