Original post: http://anothermysqldba.blogspot.com/2014/04/mysqluserclone-or-just-copy-mysql-users.html
Recentemente, deparei com um pós MySQL Fórum que estava procurando como migrar os usuários para um novo sistema.
Enquanto isso poderia ser feito de várias maneiras, eu percebi que ele me deu a chance de jogar e demonstrar o mysqluserclone ferramenta.
Então, eu tenho dois bancos de dados e apenas um utilizador wiki:
Então agora usar a ferramenta mysqluserclone
Note que ele está faltando uma senha porque eu não definir uma senha para o usuário. Opps que não é bom o suficiente.
Concedido ele funciona muito bem se você quiser criar novas contas de usuário com as novas senhas. Eu poderia ter passado a nova senha como parte do comando clone
Mas e se eu não sei as senhas? Quero garantir que todos os clientes têm todos os seus mesmas senhas.
Eu também poderia fazer o processo abaixo.
Agora eu tenho o mesmo usuário, host e senha.
Recentemente, deparei com um pós MySQL Fórum que estava procurando como migrar os usuários para um novo sistema.
Enquanto isso poderia ser feito de várias maneiras, eu percebi que ele me deu a chance de jogar e demonstrar o mysqluserclone ferramenta.
Então, eu tenho dois bancos de dados e apenas um utilizador wiki:
root@localhost [(none)]> select VERSION();
+------------+
| VERSION() |
+------------+
| 5.6.10-log |
+------------+
root@localhost [(none)]> show grants for wikiuser@localhost;
+-------------------------------------------------------------------------------------------------------------------+
| Grants for wikiuser@localhost |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wikiuser'@'localhost' IDENTIFIED BY PASSWORD '1e09502e61120480' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, LOCK TABLES ON `wikidb`.* TO 'wikiuser'@'localhost' |
+-------------------------------------------------------------------------------------------------------------------+
select VERSION();
+------------+
| VERSION() |
+------------+
| 5.5.30-log |
+------------+
show grants for wikiuser@localhost;
ERROR 1141 (42000): There is no such grant defined for user 'wikiuser' on host 'localhost'
Então agora usar a ferramenta mysqluserclone
Usage: mysqluserclone --source=user:pass@host:port:socket
--destination=user:pass@host:port:socket joe@localhost
sam:secret1@localhost
# mysqluserclone
--source=root:<PASSWORD>@localhost:3306
--destination=root:@localhost:3307 wikiuser@localhost wikiuser@localhost
# Source on localhost: ... connected.
# Destination on localhost: ... connected.
# Cloning 1 users...
# Cloning wikiuser@localhost to user wikiuser@localhost
# ...done.
root@localhost [(none)]> select VERSION();
+------------+
| VERSION() |
+------------+
| 5.5.30-log |
+------------+
1 row in set (0.00 sec)
root@localhost [(none)]> show grants for wikiuser@localhost;
+-------------------------------------------------------------------------------------------------------------------+
| Grants for wikiuser@localhost |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wikiuser'@'localhost' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, LOCK TABLES ON `wikidb`.* TO 'wikiuser'@'localhost' |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
Concedido ele funciona muito bem se você quiser criar novas contas de usuário com as novas senhas. Eu poderia ter passado a nova senha como parte do comando clone
mysqluserclone --source=root:<PASSWORD>@localhost:3306
--destination=root:@localhost:3307 wikiuser@localhost
wikiuser:<PASSWORD>@localhost
Mas e se eu não sei as senhas? Quero garantir que todos os clientes têm todos os seus mesmas senhas.
Eu também poderia fazer o processo abaixo.
- Reunir subsídios do DB 1
- Edite o arquivo de subvenções eu quero passar
- Edite o arquivo de usuário adicionar comentários a fazer sql seguro
- Carregar o arquivo no DB 2
select CONCAT('SHOW GRANTS FOR `',USER,'`@',HOST,';') as showgrants FROM mysql.user INTO OUTFILE '/tmp/showgrants.sql';
vi /tmp/showgrants.sql
mysql < /tmp/showgrants.sql > /tmp/user_grants.sql
vi /tmp/user_grants.sql
:%s/Grants for/#Grants for/g
:%s/\n/;\r/g
mysql --port=3307 -u root -p < /tmp/user_grants.sql
> show grants for wikiuser@localhost;
+----------------------------------------------------------------------------------------------------------+
| Grants for wikiuser@localhost |
+----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wikiuser'@'localhost' IDENTIFIED BY PASSWORD '1e09502e61120480' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, LOCK TABLES ON `wikidb`.* TO 'wikiuser'@'localhost' |
+----------------------------------------------------------------------------------------------------------+
Agora eu tenho o mesmo usuário, host e senha.