MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Récupérer une instance mySQL à partir d'un autre compte utilisateur (macOS)

J'utilisais temporairement le Mac de mon ami jusqu'à ce que le mien soit réparé. Donc plus tôt cette semaine, j'ai supprimé mon compte d'utilisateur sur son mac qui avait un tas de bases de données dont j'avais besoin. J'avais sauvegardé la plupart des données utilisateur avant de supprimer ce compte, mais j'ai vite réalisé que j'avais raté la sauvegarde de la base de données. La chance et peut-être la raison en est que le répertoire de données de la base de données réside généralement en dehors du compte d'utilisateur. Dans cet article, je mentionnerai des puces sur la façon dont j'ai récupéré ces données de base de données en utilisant le compte d'utilisateur de mes amis (ou vous pouvez même en créer un nouveau et suivre les mêmes étapes).

  • Assurez-vous que mariadb est toujours installé en exécutant brew install mariadb .J'ai trouvé qu'il était disponible mais homebrew n'avait pas accès au répertoire d'installation car il a été créé à partir d'un compte utilisateur différent. Donc, nous récupérons d'abord ceci en exécutant :
sudo chown -R $(whoami) /usr/local/bin

Si la commande génère un vidage d'erreur indiquant les dossiers auxquels elle n'a pas accès, vous pouvez exécuter la même commande pour chacun des dossiers. J'ai également exécuté brew upgrade mariadb pour rester à jour avec la nouvelle installation de mariadb (bien que je ne conseillerais pas de l'exécuter généralement tant que vous n'avez pas sauvegardé les bases de données).

  • Ensuite, vous devez déterminer quel répertoire de données mariadb utilise et exécuter chown sur celui-ci également. Cela peut être fait en exécutant :
brew services list

Cela donnera une liste des services en cours d'exécution et de leurs configurations d'exécution. Ouvrez simplement la configuration des tâches mariadb et voyez le paramètre --datadir dans le XML - devrait être à l'intérieur du bloc d'arguments. Dans mon cas, c'était --datadir=/usr/local/var/mysql . Copiez maintenant ce chemin et exécutez :

sudo chown -R $(whoami) /usr/local/var/mysql

À ce stade, vous vous demandez peut-être pourquoi ne pas simplement copier le répertoire de données dans son propre Mac, puis ouvrir directement la base de données ? Le problème ici est que le dossier ne contient que .ibd et .frm fichiers qui ne sont vraiment pas importables par mySQL. Je dois donc relancer le serveur mysql avec ce répertoire de données, puis l'exporter.

  • Ensuite, j'ai dû arrêter tout serveur mysql en cours pour m'assurer de pouvoir démarrer mysql en douceur. Je le fais en exécutant :
brew services stop mariadb
ps aux | grep mysql

La dernière commande consiste à vérifier qu'aucune autre instance mysql n'est en cours d'exécution. Si la commande renvoie des processus exécutant mysql, ceux-ci doivent être tués à l'aide de la commande kill -9 ou sinon, ouvrez le moniteur d'activité, utilisez la recherche pour filtrer mysql et forcez-les à les tuer manuellement.

Maintenant, la nouvelle instance mysql peut être démarrée en utilisant :

brew services start mariadb

Alternativement, vous pouvez même appeler le programme trouvé dans le dossier bin mentionné dans le fichier XML de la configuration du service homebrew, c'est-à-dire prendre la première chaîne de programme et remplacer mysqld_safe au mysql.server start et exécutez la commande. Dans mon cas, je l'ai fait en exécutant:

/usr/local/opt/mariadb/bin/mysql.server start

Il reviendra SUCCÈS! si le service démarre avec succès. Sinon, vous devrez vérifier les journaux d'erreurs (était dans /usr/local/var/mysql dossier pour moi) pour comprendre ce qui n'allait pas et le résoudre en cherchant sur Google.

Et c'est à peu près tout, vous pouvez maintenant sauvegarder les bases de données comme vous le feriez normalement. Je le fais en exécutant:

mysql -u root -p<password>
show databases

Et cela donnerait une liste de toutes les bases de données. Et puis exécutez la commande de sauvegarde pour chaque base de données que vous souhaitez sauvegarder en tant que :

mysqldump -u root -p<password> dbname > dbname.sql

Et c'est à peu près comme ça que ça se passe. Et j'ai largué les bases de données sur mon propre ordinateur portable et j'ai terminé.