Como posso copiar a tabela de usuários do MySQL de um servidor para outro? [duplicado]

36

Estou montando um novo servidor MySQL e gostaria de dar a ele o mesmo conjunto de nomes de usuário, hosts permitidos e senhas como um servidor existente (que está desaparecendo).

Funcionaria apenas para fazer um despejo da tabela de usuários e, em seguida, carregá-lo no novo servidor?

Existe uma maneira melhor do que isso?

    
por Agvorth 06.07.2009 / 23:54

7 respostas

35
oldserver$ mysqldump mysql > mysql.sql
newserver$ mysql mysql < mysql.sql
newserver$ mysql 'flush privileges;'

Se necessário, lembre-se de adicionar -u $USER e -p$PASSWORD conforme necessário

    
por 07.07.2009 / 00:10
19

Eu daria uma olhada no Percona Toolkit . A descrição da ferramenta pt-show-grants diz tudo ...

pt-show-grants extracts, orders, and then prints grants for MySQL user accounts.

Why would you want this? There are several reasons.

The first is to easily replicate users from one server to another; you can simply extract the grants from the first server and pipe the output directly into another server.

The second use is to place your grants into version control....

    
por 09.07.2009 / 04:07
13

Embora um dump do banco de dados mysql provavelmente funcione, na minha experiência, documentar corretamente todo o acesso e configurá-lo novamente com GRANT é muito melhor. Há dois benefícios em fazer isso da seguinte maneira:

  1. Você entenderá a segurança do banco de dados e como ela é implementada.
  2. Você poderá remover o acesso que não é mais necessário.
por 07.07.2009 / 01:03
10
por 09.07.2009 / 17:02
8

A resposta aceita (usando o mysqldump para fazer backup da tabela mysql.user) é uma abordagem muito perigosa se você estiver migrando para uma nova versão do servidor.

Eu fiz isso no passado (migrando usuários do Mysql 4 para o Mysql 5.1), e mais tarde tive problemas ao tentar conceder ou modificar privilégios aos usuários do meu banco de dados.

Isso acontece porque a estrutura da tabela mysql.users difere entre as versões do servidor mysql, conforme explicado aqui:

link

Portanto, tome cuidado se você estiver atualizando a versão do seu servidor. Mais algumas dicas aqui:

link

    
por 17.01.2015 / 19:10
4

O mysqldump funcionará, mas como o banco de dados mysql usa o ISAM, você pode simplesmente copiar o diretório para o novo servidor. Você encontrará isso em lugares diferentes, mas o local mais comum para o banco de dados mysql será / var / lib / mysql / mysql. Certifique-se de parar o mysql no novo servidor, mova o diretório antigo para fora do caminho, copie o diretório e reinicie. Um exemplo usando locais padrão como root:

# /etc/init.d/mysqld stop
# cd /var/lib/mysql
# mv mysql ../mysql.backup
# rsync -a root@oldserver:/var/lib/mysql/mysql .
# /etc/init.d/mysql start
    
por 07.07.2009 / 20:55
1

é tão simples executar comandos de concessão. É como

GRANT ALL no database.table para "user" @ "host" identificado por "password"

então

GRANT ALL no banco de dados. * para "jack" @ "localhost" identificado por "somepass"

    
por 07.07.2009 / 20:16