web-dev-qa-db-fra.com

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

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

136
MySQL DBA
  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) à l'aide de la commande suivante:

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

    Sudo gedit /etc/mysql/my.cnf   # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
    
  4. Recherchez 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. Changez /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. Maintenant, connectez-vous à MySQL et vous pourrez accéder aux mêmes bases de données que vous aviez auparavant.

244
user1341296

Tout d’abord, vous devriez arrêter le serveur mysql. par exemple.

# /etc/init.d/mysql stop

Après cela, vous devez copier l’ancien répertoire de données (par exemple,/var/lib/mysql). privilèges sur votre nouveau répertoire via

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

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

# /etc/init.d/mysql restart
13
H6.

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 exécute ne fonctionne pas .

12
RageZ

Rapide et facile à faire:

# Create new directory for MySQL data
mkdir /new/dir/for/mysql

# Set ownership of new directory to match existing one
chown --reference=/var/lib/mysql /new/dir/for/mysql

# Set permissions on new directory to match existing one
chmod --reference=/var/lib/mysql /new/dir/for/mysql

# Stop MySQL before copying over files
service mysql stop

# Copy all files in default directory, to new one, retaining perms (-p)
cp -rp /var/lib/mysql/* /new/dir/for/mysql/

Editez le fichier /etc/my.cnf et, sous [mysqld], ajoutez cette ligne:

datadir=/new/dir/for/mysql/

Si vous utilisez CageFS (avec ou sans CloudLinux) et souhaitez changer le répertoire MySQL, vous DEVEZ ajouter le nouveau répertoire à ce fichier:

/etc/cagefs/cagefs.mp

Et puis exécutez cette commande:

cagefsctl --remount-all
7
sMyles

Premier arrêt de mysqld

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

Puis changez datadir dans votre /etc/mysql/my.cnf
Démarrer mysqld

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

# 2: voir Référence d'installation de la base de données MySQL

5
Murlo

Je souhaitais conserver une base de données sur ma machine, mais aussi disposer de données sur mon disque dur externe et basculer entre les deux. 

Si vous êtes sur Mac et avez installé MySQL sous Homebrew, cela devrait fonctionner pour vous. Sinon, il vous suffira de remplacer les emplacements appropriés par MySQL datadir sur votre ordinateur.

#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, quand vous voulez revenir en arrière, faites simplement:

mv mysql mysql.remote

mv mysql.local mysql

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

5
wfbarksdale

D'abord arrêtez votre mysql

Sudo service mysql stop

copier les données mysql vers le nouvel emplacement.

Sudo cp -rp /var/lib/mysql /yourdirectory/

si vous utilisez apparmor, éditez le fichier suivant et procédez comme suit

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

Remplacez où/var/lib/par/votredirectory/puis ajoutez ce qui suit si le fichier n'existe

    /yourdirectory/mysql/ r,
    /yourdirectory/mysql/** rwk,

Enregistrez le fichier avec la commande

:wq

Editez le fichier my.cnf

Sudo vim /etc/mysql/my.cnf

Remplacez où/var/lib/par/votre répertoire/puis enregistrez avec la commande

:wq

enfin lancer mysql

Sudo service mysql start

@voir plus d'informations sur raid0, optimisation ici

4
naddame

Cette solution fonctionne sous Windows 7 à l'aide de Workbench. Vous aurez besoin des privilèges d'administrateur pour faire cela. Il crée une jonction (comme un raccourci) où vous voulez vraiment stocker vos données

Ouvrez Workbench et sélectionnez INSTANCE - Démarrage/Arrêt Arrêtez le serveur.

Installer le maître de jonction à partir de https://bitsum.com/junctionmaster.php

Accédez à C:\ProgramData\MySQL\MySQL Server 5.6.

Cliquez avec le bouton droit de la souris sur Données et sélectionnez "Déplacer, puis Lier le dossier vers ..." Accepter l'avertissement Pointez la destination sur "Votre nouveau répertoire de données ici sans les guillemets" Cliquez sur Déplacer et lier

Maintenant, allez à "Votre nouveau répertoire de données ici sans les guillemets"

Cliquez avec le bouton droit de la souris sur Données Accédez à l'onglet Sécurité Cliquez sur Modifier Cliquez sur Ajouter Tapez NETWORK SERVICE, puis vérifiez les noms.

Retournez à Workbench et démarrez le serveur

Cette méthode a fonctionné pour moi avec MySQL Workbench 6.2 sur Windows 7 Entreprise.

3
Rob

Si comme moi vous êtes sur debian et que vous voulez déplacer le répertoire mysql chez vous ou dans un chemin sur/home/..., la solution est la suivante:

  • Arrêtez mysql par "Sudo service mysql stop"
  • remplacez la variable "datadir" par le nouveau chemin dans "/etc/mysql/mariadb.conf.d/50-server.cnf"
  • Faites une sauvegarde de/var/lib/mysql: "cp-R -p/var/lib/mysql/path_to_mon_backup"
  • supprimez ce répertoire: "Sudo rm -R/var/lib/mysql"
  • Déplacer les données vers le nouveau répertoire: "cp -R -p/path_to_my_backup/path_new_dir
  • Changer l'accès par "Sudo chown -R mysql: mysql/path_new_dir"
  • Modifier la variable "ProtectHome" par "false" sur "/etc/systemd/system/mysqld.service"
  • Recharger systemd par "Sudo systemctl daemon-reload"
  • Redémarrez mysql par "service mysql restart"

Un jour pour trouver la solution pour moi sur la documentation de mariadb. J'espère que cela aidera certains gars!

2
jojo150393

Tout comme @ user1341296 a dit, plus ...

Vous feriez mieux de ne pas changer /etc/mysql/my.cnf Au lieu de cela, vous voulez créer un nouveau fichier/etc/mysql/conf.d/ext.cnf (n'importe quel nom, mais l'extension devrait être cnf

Et mettez-y votre monnaie:

[mysqld]
datadir=/vagrant/mq/mysql

De cette façon 

  • Vous n'avez pas besoin de modifier le fichier existant (plus facile pour les scripts d'automatisation)
  • Aucun problème avec la version de MySQL (et sa configuration!) Mise à jour.
2
Pavel

Si vous êtes un utilisateur Windows et que vous avez atterri ici pour savoir que toutes les réponses sont pour les utilisateurs Linux, ne soyez pas déçus! Je ne vous laisserai pas perdre votre temps comme je l'ai fait.

Un peu de conneries avant solution: 

MySQL utilise un répertoire de données pour stocker les données des différentes bases de données créées. En fin de compte, il doit les stocker sous la forme de fichiers avec quelques jongleurs ajoutés dans le format de l’application et du fichier afin de s’assurer que les promesses de base de données que vous avez apprises dans les classes de bases de données sont intactes. 

Maintenant, vous voulez vous assurer qu'il y a assez d'espace pour stocker de grandes bases de données que vous pourrez créer à l'avenir, et vous avez donc pensé, Hey! Je veux le mettre dans un autre lecteur qui a plus d'espace.

Donc, vous faites ce qui suit.

Étape 1 : Arrêt du service MySQL.

  Window Key + R - will open Run
  servies.msc    - will open services manager
  Locate MySQL80 (80 is for version 8.0, look for the one you've).
  Stop it.       (Right click, Stop)

Etape - 2 : Trouver le répertoire de données actuel

 Goto C:\ProgramData\MySQL\MySQL Server 8.0

Par défaut, il devrait y avoir un dossier ici nommé Data, c'est celui qui est utilisé par MySQL avec les paramètres par défaut (à condition qu’ils n’aient pas trouvé un meilleur emplacement), mais vérifions cela.

Trouver le fichier my.ini, devrait être juste là. 

Ouvrez-le dans un éditeur (Notepad ++ peut-être). 

Faites un CTRL + F pour trouver datadir dans le fichier. 

Tout ce qui est mentionné ici est le emplacement actuel actuellement utilisé par MySQL pour le répertoire de données. C'est ce que tu veux changer.

Étape 3 : le remplacer par un nouveau répertoire de données.

Supposons que vous souhaitiez que votre nouveau répertoire de données soit W: __ MySQL_Data. Changeons datadir valeur dans le fichier my.ini à cette valeur. Conservez la valeur précédente commentée afin que vous n'ayez pas à vous en souvenir.

 # Path to the database root
 # datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
   datadir=W:/__MySQL_Data

Utilisez maintenant xcopy pour copier la valeur par défaut datadir dans W:\. Lancer la commande Invite (Fenêtre + R, cmd, Entrée) 

 >> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0" "W:\" /E /H /K /O /X

Et renommez le dossier copié avec la nouvelle valeur datadir que vous avez modifiée. Ici: W:/__MySQL_Data 

Pourquoi ne pas simplement copier? Eh bien, parce que ce n'est pas COOL !, cela vous aide à ne pas perdre les autorisations sur le dossier copié. Ainsi, lorsque vous redémarrez MySQL80, cela ne produira pas d'erreur stupide: "Le service MySQL80 sur l'ordinateur local a été démarré puis arrêté. Certains services s'arrêtent automatiquement. s'ils ne sont pas utilisés par d'autres services ou programmes. " - Courtoisie: Microsoft

Étape 4 : redémarrer le service

 Well, go back to the Services Manager to Start again, 
 "MySQL80" that you stopped, to restart it again.

Étape 5 : Fait! Maintenant remets-toi au travail !! 

1
Prem KTiw

J'ai souvent besoin de le faire lors de la mise à niveau de machines, en passant de boîte en boîte. En plus de déplacer/var/lib/mysql vers un meilleur emplacement, j'ai souvent besoin de restaurer d'anciennes tables de base de données à partir d'une ancienne installation de MySQL. Pour ce faire ...

  1. Arrêtez mysql. Suivez les instructions ci-dessus, il est nécessaire.
  2. Copiez les répertoires de la base de données - il y en aura un pour chacune des bases de données de votre ancienne installation - dans le nouvel emplacement DATADIR. Mais omettez les répertoires "mysql" et "performance_schema".
  3. Autorisations correctes parmi les répertoires de base de données copiés. La propriété doit être mysql: mysql, les répertoires doivent être 700 et les fichiers doivent être 660.
  4. Redémarrez mysql. Selon votre installation, les anciens fichiers de la version de base de données doivent être mis à jour.
1
K Markey

Si vous voulez le faire par programme (pas de saisie de texte manuelle avec gedit), voici une version pour un fichier Docker basée sur la réponse de user1341296 ci-dessus:

FROM spittet/Ruby-mysql
MAINTAINER [email protected]

RUN cp -R -p /var/lib/mysql /dev/shm && \
    rm -rf /var/lib/mysql && \
    sed -i -e 's,/var/lib/mysql,/dev/shm/mysql,g' /etc/mysql/my.cnf && \
    /etc/init.d/mysql restart

Disponible sur le hub Docker ici: https://hub.docker.com/r/richardjecooke/Ruby-mysql-in-memory/

1
Richard

Nous avons dû déplacer MySQL dans le répertoire /home car celui-ci était mappé à partir d'un autre disque physique. Afin de simplifier la vie, au lieu de changer de répertoire dans my.cnf, nous avons mappé le nouveau répertoire /home/mysql à la place du répertoire d'origine /var/lib/mysql. Cela fonctionne pour nous comme un charme (testé sur CentOS 7.1).

Créez le nouveau répertoire et définissez les autorisations appropriées.

mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql

Arrêtez MySQL si vous exécutez.

systemctl stop mysql

Déplacez le répertoire de données.

mv -f /var/lib/mysql/* /home/mysql

Créez un montage permanent et exécutez-le.

echo "/home/mysql /var/lib/mysql none    bind   0 0" >> /etc/fstab
mount -a

Redémarrez le serveur.

systemctl start mysql
1
TomS

Les étapes ci-dessus sont la base et la base. Je les ai suivis et j'ai toujours une erreur de "Échec du démarrage de mysql".

Pour que le nouveau dossier stocke les données mysql, vous devez vous assurer que le dossier dispose des autorisations et de la propriété mysql: mysql.

En plus de cela, il doit vérifier les permissions et la propriété du répertoire parent de mysql si, par exemple,/data/mysql /. Ici, le répertoire/data/doit être root: root. J'ai corrigé l'erreur de "Impossible de démarrer mysql" après avoir changé la propriété du répertoire parent de/mysql. Le système d'exploitation de mon VM est RHEL 7.6.

0
user3325137William

Pour l'un des environnements, j'ai changé le répertoire de données mysql vers un nouvel emplacement, mais lors du redémarrage du serveur mysql, cela prenait du temps. J'ai donc vérifié le port et découvert qu'un autre processus écoutait sur le port mysql. J'ai donc tué le processus et redémarré le serveur mysql et cela a bien fonctionné.

J'ai suivi les étapes ci-dessous pour changer le répertoire de données, ce qui a très bien fonctionné . changer le répertoire de données mysql sous Linux

0
santosh tiwary

Sous SuSE 13.1, cela fonctionne bien pour déplacer le répertoire de données mysql ailleurs, par exemple. sur/home/example_user /, et pour lui donner un nom plus informatif:

Dans/var/lib /:

# mv -T mysql /home/example_user/mysql_datadir
# ln -s /home/example_user/mysql_datadir ./mysql

J'ai redémarré mysql:

# systemctl restart mysql.service

mais soupçonnez que même cela n'était pas nécessaire.

0
user3346151

Tout d’abord, vous devriez savoir où se trouve votre fichier de configuration? où est votre fichier de configuration?

SI vous avez installé avec apt-get ou yum install。

fichier de configuration peut apparaître dans 

/etc/mysql/my.cnf

fichier de données peut apparaître dans

/ var/lib/mysql

et ce que vous devriez faire est

  1. arrêtez mysql
  2. change les données mysql en un nouveau répertoire
  3. changer le fichier de configuration 
  4. recharger le fichier de configuration
  5. redémarrer mysql 

et puis les travaux effectués.

Mais si vous ne l’avez pas installé avec apt ou yum, le répertoire peut ne pas l’aimer.

où est mysql

0
42wolf