web-dev-qa-db-fra.com

Comment puis-je copier la table des utilisateurs MySQL d'un serveur à un autre?

J'installe un nouveau serveur MySQL et je voudrais lui donner le même ensemble de noms d'utilisateurs, d'hôtes autorisés et de mots de passe qu'un serveur existant (qui s'en va).

Est-ce que cela fonctionnerait juste pour faire un vidage de la table des utilisateurs et ensuite la charger sur le nouveau serveur?

Y a-t-il une meilleure façon que ça?

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

Faut le faire, n'oubliez pas d'ajouter -u $USER et -p$PASSWORD comme demandé

34
Dave Cheney

Je voudrais jeter un oeil à la Percona Toolkit. La description du pt-show-grants l'outil dit tout ...

pt-show-grants extrait, ordonne, puis imprime les subventions pour les comptes d'utilisateurs MySQL.

Pourquoi voudriez-vous cela? Il existe plusieurs raisons.

La première consiste à répliquer facilement les utilisateurs d'un serveur à un autre; vous pouvez simplement extraire les subventions du premier serveur et diriger la sortie directement vers un autre serveur.

La deuxième utilisation consiste à placer vos subventions dans le contrôle de version ....

21
Aaron Bush

Alors qu'un vidage de la base de données mysql fonctionnerait probablement, d'après mon expérience, documenter correctement tous les accès et les reconstituer avec les instructions GRANT est bien mieux. Il y a deux avantages à procéder de cette façon:

  1. Vous comprendrez la sécurité de votre base de données et sa mise en œuvre.
  2. Vous pourrez supprimer l'accès qui n'est plus nécessaire.
14
staticsan

La réponse acceptée (en utilisant mysqldump pour sauvegarder la table mysql.user) est une approche très dangereuse si vous migrez vers une nouvelle version de serveur.

Je l'ai fait dans le passé (migration des utilisateurs de Mysql 4 vers Mysql 5.1), et plus tard, j'ai eu des problèmes pour accorder ou modifier des privilèges à mes utilisateurs de base de données.

Cela se produit car la structure de la table mysql.users diffère entre les versions du serveur mysql, comme expliqué ici:

https://dba.stackexchange.com/a/16441/18472

Alors, faites attention si vous mettez à niveau votre version de serveur. Quelques conseils supplémentaires ici:

https://stackoverflow.com/a/13218162/710788

11
abu
11
Bruno Bronosky

mysqldump fonctionnera, mais comme la base de données mysql utilise ISAM, vous pouvez simplement copier le répertoire sur le nouveau serveur. Vous le trouverez à différents endroits, mais l'emplacement le plus courant pour la base de données mysql sera/var/lib/mysql/mysql. Assurez-vous d'arrêter mysql sur le nouveau serveur, de déplacer l'ancien répertoire, de copier le répertoire et de redémarrer. Un exemple utilisant des emplacements standard en tant que 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
5
Tim

il est si simple d'exécuter des commandes grant. C'est comme

DONNER TOUT sur database.table à "utilisateur" @ "Hôte" identifié par "mot de passe"

donc

DONNER TOUT sur la base de données. * À "jack" @ "localhost" identifié par "somepass"

2
Trausti Thor