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?
Arrêtez MySQL en utilisant la commande suivante:
Sudo /etc/init.d/mysql stop
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
é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
Recherchez l'entrée pour datadir
et modifiez le chemin (qui devrait être /var/lib/mysql
) dans le nouveau répertoire de données.
Dans le terminal, entrez la commande:
Sudo gedit /etc/apparmor.d/usr.sbin.mysqld
Recherchez les lignes commençant par /var/lib/mysql
. Changez /var/lib/mysql
dans les lignes avec le nouveau chemin.
Enregistrez et fermez le fichier.
Redémarrez les profils AppArmor avec la commande:
Sudo /etc/init.d/apparmor reload
Redémarrez MySQL avec la commande:
Sudo /etc/init.d/mysql restart
Maintenant, connectez-vous à MySQL et vous pourrez accéder aux mêmes bases de données que vous aviez auparavant.
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
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 .
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
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
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.
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
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.
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:
Un jour pour trouver la solution pour moi sur la documentation de mariadb. J'espère que cela aidera certains gars!
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
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 !!
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 ...
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/
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
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.
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
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.
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
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