Je sais comment exporter / importer les bases de données en utilisant mysqldump & c'est bien, mais comment puis-je obtenir les privilèges sur le nouveau serveur.
Pour des points supplémentaires, il y a déjà quelques bases de données sur la nouvelle, comment puis-je importer les privilèges des anciens serveurs sans modifier le couple existant?
Ancien serveur: 5.0.67-community
Nouveau serveur: 5.0.51a-24 + lenny1
EDIT: J'ai une copie de la base de données 'mysql' de l'ancien serveur et je veux maintenant savoir comment fusionner avec la base de données 'mysql' sur le nouveau serveur.
J'ai essayé une "importation" directe en utilisant phpMyAdmin et une erreur concernant un duplicata (une migraine que j'ai déjà migrée manuellement) s'est terminée.
Quelqu'un a-t-il un moyen élégant de fusionner les deux bases de données 'mysql'?
Réponses:
Ne plaisante pas avec la base de données mysql. Il y a beaucoup plus d'activités que la table des utilisateurs. Votre meilleur pari est la commande " SHOW GRANTS FOR". J'ai beaucoup d'alias et de fonctions de maintenance CLI dans mon .bashrc (en fait, mes alias .bash que je source dans mon .bashrc). Cette fonction:
La première commande mysql utilise SQL pour générer du SQL valide qui est dirigé vers la deuxième commande mysql. La sortie est ensuite transmise par sed pour ajouter de jolis commentaires.
Le $ @ de la commande vous permettra de l'appeler comme suit: mygrants --host = prod-db1 --user = admin --password = secret
Vous pouvez utiliser votre trousse à outils Unix complète sur ceci comme ceci:
C’est LA bonne façon de déplacer les utilisateurs. Votre ACL MySQL est modifiée avec du SQL pur.
la source
user
table un utilisateur avec hôte%
, mais que dans ladb
table vous avez des entrées oùhost
est une valeur explicite, ces entrées dans ladb
table ne sont pas extraites à l'aide de cette méthode.-r
à la 2ème commande mysql dans la fonction et les doubles échappements ne seront pas générés parmysql
. par exemple:mysql -r $@
Il existe deux méthodes pour extraire des subventions SQL à partir d'une instance MySQL
MÉTHODE N ° 1
Vous pouvez utiliser pt-show-grants de Percona Toolkit
METHODE 2
Vous pouvez émuler
pt-show-grants
avec ce qui suitL'une ou l'autre méthode produira un dump SQL pur des octrois MySQL. Il ne reste plus qu'à exécuter le script sur un nouveau serveur:
Essaie !!!
la source
La réponse de Richard Bronosky m'a été extrêmement utile. Merci beaucoup!!!
Voici une petite variation qui m'a été utile. C'est utile pour transférer des utilisateurs, par exemple entre deux installations Ubuntu exécutant phpmyadmin. Il suffit de supprimer les privilèges de tous les utilisateurs, à l'exception de root, phpmyadmin et debian-sys-maint. Le code est alors
la source
grep rails_admin
peux déduire comment faire cela sans créer de fonction spéciale pour chaque cas de bord. Utilisez l'option "mygrants --host=prod-db1 --user=admin --password=secret | grep -Ev 'root|phpmyadmin|debian-sys-maint' | mysql --host=staging-db1 --user=admin --password=secret
Ou utilisez percona-toolkit (ancien maatkit) et utilisez
pt-show-grants
(oumk-show-grants
) à cette fin. Pas besoin de scripts fastidieux et / ou de procédures stockées.la source
Vous pouvez mysqldump la base de données 'mysql' et l'importer dans la nouvelle. un flush_privileges ou un redémarrage sera nécessaire et vous voudrez certainement sauvegarder la base de données mysq existante.
Pour éviter de supprimer vos privilèges existants, veillez à ajouter plutôt qu'à remplacer les lignes dans les tables de privilèges (db, columns_priv, hôte, func, etc.).
la source
Vous pouvez également le faire en tant que procédure stockée:
et appelez avec
puis dirigez la sortie via la commande Richards sed pour obtenir une sauvegarde des privilèges.
la source
Bien qu'il semble que la réponse de @Richard Bronosky soit la bonne, je suis tombé sur cette question après avoir tenté de migrer un ensemble de bases de données d'un serveur à un autre et la solution était beaucoup plus simple:
À ce stade, toutes mes données étaient visibles si je me connectais en tant que
root
, lemysql.user
tableau contenait tout ce à quoi je m'attendais, mais je ne pouvais pas me connecter en tant qu'autre utilisateur et j'ai trouvé cette question en supposant que émettre lesGRANT
déclarations.Cependant, il s'avère que le serveur mysql doit simplement être redémarré pour que les privilèges mis à jour dans les
mysql.*
tables prennent effet:J'espère que cela aidera quelqu'un d'autre à accomplir ce qui devrait être une tâche simple!
la source
Que diriez-vous d'un script PHP? :)
Voir la source sur ce script et vous aurez tous les privilèges énumérés:
la source
créez un fichier de script shell avec le code suivant:
############################################### 3 #**** puis exécutez-le sur le shell comme ceci: il vous sera demandé de saisir le mot de passe root deux fois, puis le code SQL GRANTS s'affichera à l'écran. ****
la source
One-Liner fait à peu près la même chose que le génial
pt-show-grants
:Basé uniquement sur les outils Unix, aucun logiciel supplémentaire n'est nécessaire.
Exécutez depuis un shell bash, en supposant que vous avez un répertoire de travail
.my.cnf
où le mot de passe de votremysql root
utilisateur peut être lu.la source