185 votes

Comment changer le répertoire de données de MySQL ?

Est-il possible de changer mon répertoire de données MySQL par défaut pour un autre chemin ? Pourrai-je accéder aux bases de données à partir de l'ancien emplacement ?

3 votes

Y a-t-il des réponses disponibles pour cette question si le système est en Win8 ?

2 votes

Pour Windows - regardez ici : dba.stackexchange.com/questions/24403/

1 votes

Pour les utilisateurs de Mac, tout ce dont vous avez besoin est este et l'étape 1-4 de la réponse de @user1341296.

318voto

user1341296 Points 591
  1. Arrêtez MySQL en utilisant la commande suivante :

    sudo /etc/init.d/mysql stop
  2. Copiez le répertoire de données existant (situé par défaut dans /var/lib/mysql ) en utilisant la commande suivante :

    sudo cp -R -p /var/lib/mysql /newpath
  3. éditez le fichier de configuration de MySQL avec la commande suivante :

    sudo gedit /etc/mysql/my.cnf   # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
  4. Cherchez l'entrée pour datadir et modifiez le chemin (qui devrait être /var/lib/mysql ) dans le nouveau répertoire de données.

  5. Dans le terminal, entrez la commande :

    sudo gedit /etc/apparmor.d/usr.sbin.mysqld
  6. Recherchez les lignes commençant par /var/lib/mysql . Modifier /var/lib/mysql dans les lignes avec le nouveau chemin.

  7. Enregistrez et fermez le fichier.

  8. Redémarrez les profils AppArmor avec la commande :

    sudo /etc/init.d/apparmor reload
  9. Redémarrez MySQL avec la commande :

    sudo /etc/init.d/mysql restart
  10. Connectez-vous maintenant à MySQL et vous pouvez accéder aux mêmes bases de données que précédemment.

39 votes

Ce qui précède n'a pas permis de résoudre le problème pour moi sur Ubuntu 12.04 (Precise). J'ai découvert qu'il fallait modifier le fichier /etc/apparmor.d/tunables/alias pour y inclure la ligne "alias /var/lib/mysql/ -> /newpath/," Avec cela en place, je n'ai pas eu besoin de modifier les autres fichiers AppArmor. Cela a fonctionné immédiatement après avoir redémarré AppArmor avec "/etc/init.d/apparmor restart" et MySQL avec "restart mysql".

5 votes

Apparmor n'est pas pertinent sur CentOS. Il y a SELinux à la place. Pour savoir comment le désactiver ou le gérer, cliquez ici. blogs.oracle.com/jsmyth/entry/selinux_and_mysql

15 votes

Sur l'édition de mak's (qui est nécessaire) n'oubliez pas la virgule à la fin de la ligne alias /var/lib/mysql/ -> /newpath/,

22voto

RageZ Points 15212

Vous devrez copier les données actuelles dans le nouveau répertoire et changer votre my.cnf votre MySQL.

[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/

Vous devez copier la base de données lorsque le serveur est ne fonctionne pas .

0 votes

C'est ce que je ne peux pas faire. Je veux changer le répertoire mais je veux créer de nouvelles bases de données dans le nouveau répertoire. Et je veux accéder à la fois aux bases de données de l'ancien et du nouveau répertoire.

1 votes

@MySQL DBA : si vous utilisez des ln -s un lynx symbolique statique, ça ne fait pas l'affaire ?

1 votes

Je suis un peu confus quant à l'utilisation de cette commande. Comme je l'ai expliqué auparavant, je veux créer de nouvelles bases de données dans un nouveau répertoire. Est-ce possible avec un lien symbolique ?

17voto

High6 Points 2434

Tout d'abord, vous devez arrêter le serveur mysql, par ex.

# /etc/init.d/mysql stop

Après cela, vous devez copier l'ancien répertoire de données (par exemple, /var/lib/mysql), y compris les privilèges, dans votre nouveau répertoire via

# cp -R -p /var/lib/mysql /new/data/dir

vous pouvez maintenant changer en /etc/mysql/my.cnf les nouvelles données et redémarrer le serveur

# /etc/init.d/mysql restart

5 votes

Voté à la baisse parce qu'il ne fonctionne pas comme détaillé à serverfault.com/a/733998/279553

5voto

Murlo Points 39

Arrêtez d'abord mysqld

mysql_install_db --user=mysql \
                 --basedir=/opt/mysql/mysql \
                 --datadir=/opt/mysql/mysql/data

Ensuite, changez le répertoire de données dans votre /etc/mysql/my.cnf
Démarrer mysqld

Notes :

1 : vous devez probablement ajuster vos paramètres SELinux (essayez avec SELinux désactivé en cas de problèmes), Apparmor (Ubuntu) peut également être un problème.

2 : voir Référence de la BD d'installation de MySQL

5voto

wbarksdale Points 2001

Je voulais garder une base de données sur ma machine, mais aussi avoir des données sur mon disque dur externe, et basculer entre l'utilisation des deux.

Si vous êtes sur un Mac, et que vous avez installé MySQL en utilisant Homebrew, cela devrait fonctionner pour vous. Sinon, vous devrez simplement substituer les emplacements appropriés pour le fichier MySQL datadir sur votre machine.

#cd to my data dir location
cd /usr/local/var/

#copy contents of local data directory to the new location
cp -r mysql/ /Volumes/myhd/mydatadir/

#temporarily move the old datadir
mv mysql mysql.local

#symlink to the new location
ln -s /Volumes/myhd/mydatadir mysql

Ensuite, lorsque vous voulez revenir en arrière, faites-le simplement :

mv mysql mysql.remote

mv mysql.local mysql

et vous utilisez à nouveau votre base de données locale. J'espère que cela vous aidera.

1 votes

Cela ne répond pas exactement à la question posée -- mais c'est exactement ce que je cherchais -- et c'est un moyen efficace de gérer un cas limite/bug que my.cnf ne gère pas bien les espaces : bugs.mysql.com/bug.php?id=26033 . Je vais lier cette solution de contournement à ce rapport de bogue.

0 votes

Voté à la baisse parce qu'il ne fonctionne pas comme détaillé à serverfault.com/a/733998/279553

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X