web-dev-qa-db-fra.com

Comment déplacer des fichiers de données MySQL dans une partition différente?

Mon disque dur est partitionné en deux partitions. Je peux donc facilement réinstaller Ubuntu et essayer différentes versions sans perdre les données de mon répertoire personnel. C'est configuré comme ça:

20GB  -> /     (root)
180GB -> /home 

Je fais beaucoup de travail de développement, donc mon dossier /var/www a des liens symboliques avec /home/valorin/workspace.

Mais je veux le faire aussi avec mes fichiers de données MySQL, car je suis ennuyé de devoir effectuer une copie complète de la base de données SQL puis de restaurer toutes les bases de données avant de pouvoir réinstaller ma machine.

Quelle est la meilleure façon de faire cela sans casser MySQL?

28
Stephen RC

En fait, il existe une réponse potentielle spécifique à Ubuntu à cette question.

Comme mentionné par le lien Gergoes, il s’agit essentiellement de modifier /etc/mysql/my.cnf et de définir une nouvelle valeur pour datadir = dans la section [mysqld] . Jusqu'à présent, la partie non spécifique de la réponse.

En supposant que vous utilisez une version un peu moderne d’Ubuntu, vous pourriez très bien avoir AppArmor installé par défaut, avec un profil pour /usr/sbin/mysqld dans mode forcé. Ce profil par défaut n'acceptera probablement pas votre nouveau datadir.

Supposons que votre nouveau datadir sera /home/data/mysql .

Si vous ouvrez le fichier /etc/apparmor.d/usr.sbin.mysqld , vous trouverez parmi les règles ces deux lignes.

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

En supposant que notre exemple ci-dessus, ils devront être remplacés ou (probablement préférable) complété par ces deux lignes.

/home/data/mysql/ r,
/home/data/mysql/** rwk,

Avant de pouvoir démarrer notre serveur MySQL, avec son nouveau datadir, nous devrons également recharger explicitement notre nouveau profil apparmor.

$ Sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
31
andol

Le super utilisateur a des instructions étape par étape de Nice sur la façon de résoudre ce problème

Voici un autre ensemble d’instructions pour faire la même chose http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

Ici, il est republié. Allez et votez l'original si vous le pouvez sur le super utilisateur.

Après une certaine confusion générale au sujet des autorisations, j'ai compris que le problème n'était pas que je ne disposais pas de mes autorisations et de mes chemins, mais qu'AppArmor empêchait mysql de lire et d'écrire sur le nouvel emplacement.

Ceci est ma solution:

Commencez par arrêter MySQL pour que rien ne se passe bizarre pendant que vous jouez:

$ Sudo stop mysql

Puis déplacez tous les répertoires de la base de données vers leur nouvelle maison:

$ Sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/

Ne déplacez pas les fichiers, ils seront générés par mysql, déplacez simplement les dossiers (qui sont les bases de données).

Puis demandez poliment à AppArmor d’autoriser mysql à utiliser le nouveau dossier:

$ Sudo vim /etc/apparmor.d/usr.sbin.mysqld

ajouter des lignes:

/new-mysql-dir/ r,
/new-mysql-dir/** rwk,

Puis dites à mysql que le datadir a été déplacé:

$ Sudo vim /etc/mysql/my.cnf 

changer la ligne:

datadir=/var/lib/mysql

à:

datadir=/my-new-db-dir/

REMARQUE: En fonction de la configuration de votre base de données, vous devrez peut-être également changer innodb-data-home-dir, etc.

Puis redémarrez AppArmor pour lire les nouveaux paramètres:

$ Sudo /etc/init.d/apparmor restart

Et relancez MySQL en utilisant le nouveau datadir:

$ Sudo start mysql

J'espère que cela t'aides!

4
nelaaro

Pour ceux qui, comme moi, travaillent avec VirtualBox et ont besoin de déplacer le datadir MySQL vers un dossier partagé sur le système hôte, suivez le tutoriel simple disponible sur http://vacilando.org/fr/article/moving-mysql-data -files-virtualbox-shared-folder

0
Vacilando

Ce n'est vraiment pas spécifique à Ubuntu. Néanmoins, voici quelque chose qui pourrait aider: http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location

0
Nathan Osman