Changer le répertoire de données MySQL dans Ubuntu Server 10.04

9

J'obtenais l'erreur suivante lorsque j'essayais de changer le répertoire de données dans le serveur Ubuntu 10.04.

100809 19:33:00 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
100809 19:33:00 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
100809 19:33:00  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.
Norling Jr.
la source
2
... et votre question est? Notez que si vous ne déplacez que le contenu des dossiers et aucun fichier, vous perdrez tout le contenu de la table InnoDB.
bobince
il n'y a pas de question / cuillère. Je pensais que cela pourrait être intéressant pour les gens d'ici. Bon point sur le contenu de la table InnoDB!
2
Si vous voulez poser et répondre à votre propre question, c'est bien, mais prenez le temps de poser une question et fournissez votre réponse comme réponse.
Zoredache

Réponses:

8

Après une certaine confusion générale sur les autorisations, l'OP s'est rendu compte que le problème n'était pas qu'il n'avait pas les autorisations et les droits d'accès mais qu'AppArmor empêchait MySQL de lire et d'écrire vers le nouvel emplacement.

Voici sa 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
  >> add lines
     /new-mysql-dir/ r,
     /new-mysql-dir/** rwk,

Dites ensuite à mysql que le datadir a bougé:

$ sudo vim /etc/mysql/my.cnf 
  >> change the line
     datadir=/var/lib/mysql
  >> to
     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
splattne
la source
2
vous pouvez garder la base de données opérationnelle en liant les fichiers à leur nouvel emplacement, au lieu de les déplacer ... à moins bien sûr que les deux emplacements de datadir se trouvent sur des partitions distinctes.
cpbills
L'instruction de déplacer uniquement les répertoires n'est pas exacte dans le cas où vous utilisez innodb. Dans ce cas, vous devrez également déplacer les données innodb et les fichiers journaux (ibdata *, ib_logfile *).
hillel
Une note pour les autres aussi insouciants que moi. Vous devez avoir les barres obliques de fin dans le chemin d'accès dans la configuration AppArmor, /new-mysql-dir/ rsinon il sera toujours refusé. Des trucs Linux basiques mais je n'arrive jamais à obtenir les barres obliques correctes.
Jeff
J'étais toujours refusé par AppArmor. Ce fil a aidé à surmonter cet obstacle final.
Jeff