Différents emplacements pour les bases de données MySQL?

18

Puis-je configurer MySQL pour stocker une base de données spécifique dans un endroit séparé sur le disque?

Je veux toujours que toutes les nouvelles bases de données se rendent à l'emplacement par défaut, mais il y a une base de données spécifique que j'aimerais avoir stockée dans mon dossier Dropbox afin qu'elle puisse rester synchronisée entre quelques ordinateurs.

Comment puis-je faire ceci?

Colin
la source
1
Soit dit en passant, il est possible de faire cela dans l'autre sens. Laissez la base de données telle qu'elle était et créez un lien symbolique vers elle depuis Dropbox. Dropbox ne comprend pas vraiment les liens symboliques et les synchronisera simplement comme d'habitude.
TRiG

Réponses:

27

Bien sûr vous pouvez! Vous devez accorder le permisson racine . Lis le pages du manuel ln .

MySQL stocke les données de la base de données dans des répertoires séparés dans /var/lib/mysql. Je pense qu'au début, vous deviez créer un répertoire où vous souhaitez placer les fichiers de la base de données sélectionnée. Accordez le permisson root, arrêtez le démon MySQL:

# /etc/init.d/mysql stop

Copiez vos données dans votre nouveau dossier:

# cp /var/lib/mysql/DATABASENAME /path/to/new/database/dir

Supprimez votre ancien répertoire des fichiers de données MySQL: ( Attention! TOUJOURS faire le vidage SQL en premier !!! )

# rm -R /var/lib/mysql/DATABASENAME

Faites un lien symbolique vers le répertoire de données MySQL: ( Faites attention! Lisez d'abord la page de manuel de ln !!! )

# ln -s /full/path/to/new/database/dir /var/lib/mysql/DATABASENAME

Après cela, vous êtes prêt, démarrez votre MySQL:

# /etc/init.d/mysql start

Avertissement! Si votre nouveau répertoire n'est pas écrit et lisible par MySQL, cela ne fonctionnera pas! Exemple, le problème commun: vous placez votre nouveau répertoire de données dans votre dossier personnel, votre dossier personnel est protégé en lecture par d'autres (ex: drwxrwx --- vous vous votre répertoire).

Demandez si vous voulez en savoir plus sur cette méthode!

antivirtel
la source
2
Merci! Je n'ai même pas considéré les liens symboliques, j'étais trop occupé à réfléchir aux moyens de le faire dans mysql.
Colin
8
Vous voudrez éditer /etc/apparmor.d/*mysqldpour inclure le nouveau répertoire aussi. Puis sudo service apparmor reloadavant de redémarrer MySQL.
Kees Cook
3
@KeesCook merci beaucoup pour le conseil de l'apôtre, ça me rendait fou !! On dirait qu'il vaut mieux le mettre /etc/apparmor.d/localcependant (sur mon installation, il y a déjà un usr.sbin.mysqld là-bas), l'ajout d'un single l'a /full/path/to/new/database/dir/** rwk,fait pour moi ...
Tobias J
Merci beaucoup, certains détails de l'édition de l'apparmeur ici sont également utiles. J'ai été ralenti en essayant de mettre la base de données sur un lecteur qui ne se montait pas automatiquement au démarrage et avait besoin d'un utilisateur root pour y accéder. Refusé de travailler. Modifié fstabcomme ceci pour que ce lecteur soit monté dans le système de fichiers après le démarrage, maintenant tout fonctionne.
cardamome
3

Veuillez garder à l'esprit que si vous utilisez Ubuntu, vous devez également ajouter une entrée dans le fichier de configuration AppArmour /etc/apparmor.d/usr.sbin.mysqld sinon vous continuerez à obtenir des erreurs d'autorisation d'écriture même si vous changez de fichiers et de dossier autorisations.

Andrea Moro
la source