Est-il possible de changer mon répertoire de données MySQL par défaut vers un autre chemin? Pourrai-je accéder aux bases de données à partir de l'ancien emplacement?
Est-il possible de changer mon répertoire de données MySQL par défaut vers un autre chemin? Pourrai-je accéder aux bases de données à partir de l'ancien emplacement?
Réponses:
Arrêtez MySQL à l'aide de 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 datadir
et modifiez le chemin d'accès (qui devrait être /var/lib/mysql
) vers 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
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
Connectez-vous maintenant à MySQL et vous pourrez accéder aux mêmes bases de données que vous aviez auparavant.
alias /var/lib/mysql/ -> /newpath/,
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/
Modifiez le /etc/my.cnf
fichier, 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
vous devrez copier les données actuelles dans le nouveau répertoire et changer my.cnf
votre MySQL.
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
Vous devez copier la base de données lorsque le serveur n'est pas en cours d'exécution .
ln -s
lynx symbolique statique, cela ne le fera-t-il pas?
my.cnf
Vous devez d'abord 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) incl. privilèges sur votre nouveau répertoire via
# cp -R -p /var/lib/mysql /new/data/dir
maintenant vous pouvez modifier /etc/mysql/my.cnf
les nouvelles données et redémarrer le serveur
# /etc/init.d/mysql restart
Si comme moi vous êtes sur debian et que vous souhaitez déplacer le répertoire mysql vers votre domicile ou un chemin sur / home / ..., la solution est:
Un jour pour trouver la solution pour moi sur la documentation mariadb. J'espère que cela aidera certains gars!
Je voulais garder une base de données sur ma machine, mais aussi avoir une donnée sur mon disque dur externe, et basculer entre l'utilisation des deux.
Si vous êtes sur un Mac et que vous avez installé MySQL à l'aide de Homebrew, cela devrait fonctionner pour vous. Sinon, il vous suffira de remplacer les emplacements appropriés pour 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, pour 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.
Premier arrêt 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émarrage mysqld
Remarques:
# 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 MySQL Install DB Reference
Arrêtez d'abord votre mysql
sudo service mysql stop
copiez les données mysql vers le nouvel emplacement.
sudo cp -rp /var/lib/mysql /yourdirectory/
si vous utilisez apparmor, modifiez le fichier suivant et procédez comme suit
sudo vim /etc/apparmor.d/usr.sbin.mysqld
Remplacez where / var / lib / par / yourdirectory / puis ajoutez le suivant s'il n'y en a pas au fichier
/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 where / var / lib / par / yourdirectory / puis enregistrez avec la commande
:wq
enfin démarrer mysql
sudo service mysql start
@ en savoir plus sur raid0, optimisation ici
Cette solution fonctionne sous Windows 7 à l'aide de Workbench. Vous aurez besoin des privilèges d'administrateur pour ce faire. Il crée une jonction (comme un raccourci) vers l'endroit où vous voulez vraiment stocker vos données
Ouvrez Workbench et sélectionnez INSTANCE - Startup / Shutdown Arrêtez le serveur
Installez Junction Master depuis 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 ...» Acceptez l'avertissement Pointez la destination vers «Votre nouveau répertoire de données ici sans les guillemets» Cliquez sur DÉPLACER ET LIER
Allez maintenant dans "Votre nouveau répertoire de données ici sans les guillemets"
Cliquez avec le bouton droit sur Données Allez dans l'onglet de sécurité Cliquez sur Modifier Cliquez sur Ajouter un type de SERVICE RÉSEAU puis sur Vérifier les noms Cliquez sur OK Cliquez sur la case à cocher Autoriser le contrôle total, puis sur OK
Revenez à Workbench et démarrez le serveur
Cette méthode a fonctionné pour moi en utilisant MySQL Workbench 6.2 sur Windows 7 Entreprise.
Tout comme @ user1341296 l'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 atterrissez ici pour découvrir que toutes les réponses sont destinées aux utilisateurs Linux, ne soyez pas déçu! Je ne vous laisserai pas perdre votre temps comme je l'ai fait.
Un peu de conneries avant la solution:
MySQL utilise un répertoire de données pour stocker les données des différentes bases de données que vous créez. Eh bien, à la fin, il doit les stocker sous la forme de fichiers avec un peu de jonglerie supplémentaire dans l'application et le format de fichier pour 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 suffisamment d'espace pour stocker de grandes bases de données que vous pourriez créer à l'avenir, et vous vous êtes donc dit, Hey! Je veux le mettre dans un autre lecteur qui a plus d'espace.
Alors 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)
Étape - 2 : recherche du répertoire de données actuel
Goto C:\ProgramData\MySQL\MySQL Server 8.0
Par défaut, il devrait y avoir un dossier nommé ici Data
, c'est celui qui est utilisé par MySQL dans les paramètres par défaut (à condition qu'ils n'aient pas trouvé un autre meilleur emplacement), mais vérifions cela.
Trouver le my.ini
fichier, devrait être là.
Ouvrez-le dans un éditeur (Notepad ++ peut-être).
Faites un CTRL + F pour le découvrir datadir
dans le fichier.
Tout ce qui est mentionné ici est l'emplacement réel actuellement utilisé par MySQL pour le répertoire de données. C'est ce que vous voulez changer.
Étape - 3 : Remplacement par un nouveau répertoire de données.
Supposons que vous souhaitiez que votre nouveau répertoire de données soit W: __ MySQL_Data. Modifions la
datadir
valeur du my.ini
fichier en cette valeur. Gardez 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
Maintenant, utilisez xcopy
pour copier la valeur par défaut datadir
dans W:\
. Lancez l'invite de commande (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 datadir
valeur 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é, de sorte que lorsque vous redémarrez MySQL80
, cela ne donnera pas une erreur stupide: "Le service MySQL80 sur l'ordinateur local a démarré puis arrêté. Certains services s'arrêtent automatiquement si ils ne sont pas utilisés par d'autres services ou programmes. " - Gracieuseté: Microsoft
Étape - 4 : Redémarrage du service
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
Étape - 5 : Terminé! Maintenant remets-toi au travail !!
J'ai souvent besoin de le faire lors de la mise à niveau des machines, en passant d'une boîte à l'autre. 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 MySQL. Pour ce faire ...
Nous avons dû déplacer MySQL dans le /home
répertoire car il était mappé à partir d'un autre disque physique. Afin de simplifier le live, 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 s'il est en cours d'exécution.
systemctl stop mysql
Déplacez le répertoire de données.
mv -f /var/lib/mysql/* /home/mysql
Créez une monture permanente et exécutez-la.
echo "/home/mysql /var/lib/mysql none bind 0 0" >> /etc/fstab
mount -a
Redémarrez le serveur.
systemctl start mysql
Si vous souhaitez le faire par programme (pas de saisie de texte manuelle avec gedit), voici une version pour un Dockerfile basée sur la réponse de user1341296 ci-dessus:
FROM spittet/ruby-mysql
MAINTAINER you@gmail.com
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 Docker hub ici: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
Tout d'abord, vous devez savoir où se trouve votre fichier de configuration? où est votre fichier de configuration?
SI vous avez installé avec apt-get ou yum install。
le fichier de configuration peut apparaître dans
/etc/mysql/my.cnf
le fichier de données peut apparaître dans
/ var / lib / mysql
et ce que tu devrais faire c'est
puis les travaux sont terminés.
Mais si vous ne l'avez pas installé avec apt ou yum, le répertoire peut ne pas l'aimer, et vous pouvez trouver les fichiers mysql avec
où est mysql
Sous SuSE 13.1, cela fonctionne très bien pour déplacer le répertoire de données mysql ailleurs, par exemple vers / 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.
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 j'ai trouvé 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 qui a parfaitement fonctionné. changer le répertoire de données mysql sous Linux
Les étapes ci-dessus sont fondamentales et élémentaires. Je les ai suivis et j'ai toujours l'erreur de "mysql n'a pas réussi à démarrer".
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 autorisations et la propriété du répertoire parent de mysql s'il a, par exemple, / data / mysql /. Ici, le répertoire / data / doit être root: root. J'ai corrigé l'erreur "mysql n'a pas réussi à démarrer" après avoir changé la propriété du répertoire parent de / mysql. Le système d'exploitation de ma machine virtuelle est RHEL 7.6.
Il est également possible de créer un lien symbolique sur le datadir. Au moins dans macOS, environnement de développement.
(homebrew) par exemple
# make sure you're not overwriting anything important, backup existing data
mv /usr/local/var/mysql [your preferred data directory]
ln -s [your preferred data directory] /usr/local/var/mysql
Redémarrez mysql.
Si vous utilisez SE Linux, réglez-le en mode permissif en éditant / etc / selinux / config et en changeant SELINUX = enforcing en SELINUX = permissive
datadir
propriété