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

27

J'ai mon disque dur partitionné avec deux partitions, donc je peux facilement réinstaller Ubuntu et essayer différentes versions sans perdre mes données de répertoire personnel. Il est configuré comme ceci:

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

Je fais beaucoup de travail de développement, j'ai donc un /var/wwwlien symbolique vers mon dossier /home/valorin/workspace.

Mais je veux aussi le faire avec mes fichiers de données MySQL, car je m'énerve à chaque fois que je réinstalle ma machine, je dois faire un vidage SQL complet puis restaurer toutes les bases de données avant de pouvoir faire plus de travail.

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

Stephen RC
la source

Réponses:

30

Eh bien, il existe en fait une réponse 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 exécutez une version quelque peu moderne d'Ubuntu, vous pourriez très bien avoir AppArmor installé par défaut, avec un profil pour / usr / sbin / mysqld en mode forcé. Ce profil par défaut n'acceptera probablement pas votre nouveau datadir.

Supposons que votre nouveau datadir soit / 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 notre exemple ci-dessus, ils devront être remplacés ou (probablement préférables) complétés 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
andol
la source
Cela ne semble pas fonctionner sur Natty (11.4). J'ai dû démarrer MySQL en utilisant / usr / sbin / mysqld pour qu'il lise mon répertoire de données modifié. Sinon, il a continué à lire mon ancien répertoire de données. Cela pourrait être une erreur de mon côté.
trois tasses
Ce qui précède n'a pas résolu le problème pour moi sur Ubuntu 12.04 (Precise). J'ai découvert qu'il fallait éditer le fichier /etc/apparmor.d/tunables/alias pour inclure une ligne "alias / var / lib / mysql / -> / home / data / mysql /," Avec cela en place, je n'a eu besoin d'aucune modification dans aucun des autres fichiers AppArmor. Cela a fonctionné immédiatement après le redémarrage d'AppArmor avec "/etc/init.d/apparmor restart" et MySQL avec "restart mysql".
mak
Je pense que certaines autorisations doivent être définies sur le nouveau dossier à utiliser. quelqu'un sait ce qu'ils sont? Je sais que l'installation de mysql crée un utilisateur mysql ... et que par défaut, je ne peux pas accéder au contenu du dossier / var / lib / mysql.
NullVoxPopuli
4

Le super utilisateur a de belles instructions étape par étape 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 voter l'original si vous le pouvez sur super utilisateur.

Après une certaine confusion générale sur les autorisations, j'ai réalisé que le problème n'était pas que je n'avais pas mes autorisations et mes chemins corrects, mais qu'AppArmor empêchait mysql de lire et d'écrire vers le nouvel emplacement.

Voici ma solution:

Arrêtez d'abord MySQL pour que rien de bizarre ne se passe pendant que vous jouez:

$ sudo stop mysql

Déplacez ensuite tous les répertoires de la base de données vers leur nouveau domicile:

$ 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).

Ensuite, 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,

Dites ensuite à mysql que le datadir a bougé:

$ sudo vim /etc/mysql/my.cnf 

changer de ligne:

datadir=/var/lib/mysql

à:

datadir=/my-new-db-dir/

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

Redémarrez ensuite AppArmor pour lire les nouveaux paramètres:

$ sudo /etc/init.d/apparmor restart

Et redémarrez MySQL en utilisant le nouveau datadir:

$ sudo start mysql

J'espère que cela t'aides!

nelaaro
la source
0

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

Nathan Osman
la source
Les instructions n'ont pas vraiment aidé car la partie que je n'ai pas pu travailler était AppArmour et votre message ne l'a expliqué qu'en passant. De plus, ce site contient-il des questions spécifiques à Ubuntu? Comment les nouveaux utilisateurs à la recherche d'aide savent-ils ce qui est spécifique à Ubuntu ou non, et où doivent-ils leur demander s'ils sont génériques?
Stephen RC
Site Web non disponible.
Hengjie
-1

Cela ne fonctionnera pas comme ça.

l'utilisateur mysql doit avoir le droit d'écrire dans le nouveau répertoire:

sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..
Marin Marušić
la source