Comment déplacer le répertoire de données MySQL?

52

J'essaie de déplacer le répertoire de données de ma base de données MySQL vers une deuxième matrice de disques que j'ai en tant que point de montage /array2/ .

Le problème que j'ai est que j'ai tout essayé et après avoir modifié l'emplacement de datadir dans my.cnf, mysql ne redémarrera pas.

Tout ce que j'obtiens c'est:

start: Job failed to start
    
posée Jonny Flowers 15.05.2012 - 18:32
la source

7 réponses

61

Oublié l’armure de l’appli.

Pour ceux que cela intéresse, j'ai fait ce qui suit pour déplacer le dossier.

Arrêtez le serveur mysql:

stop mysql

Créez le nouveau répertoire:

mkdir /array2/mysql

Copiez UNIQUEMENT les dossiers de la base de données:

cp -R /var/lib/mysql /array2/mysql
cp -R /var/lib/mysql/users /array2/mysql

Sauvegardez le fichier my.cnf :

cp /etc/mysql/my.cnf /root/my.cnf.backup

Modifiez le fichier my.cnf :

nano /etc/mysql/my.cnf

Modifiez toutes les mentions de l'ancien datadir et du socket sur votre nouvel emplacement

Le mien est devenu:

datadir=/array2/mysql
socket=/array2/mysql/mysql.sock

Mettez à jour les autorisations de répertoire:

chown -R mysql:mysql /array2/mysql

Renommez l'ancien répertoire:

mv /var/lib/mysql /var/lib/mysql-old

Créez un lien symbolique, juste au cas où:

ln -s /array2/mysql /var/lib/mysql 

Laissez AppArmor connaître le nouveau datadir:

echo "alias /var/lib/mysql/ -> /your/new/datadir/," >> /etc/apparmor.d/tunables/alias

Recharger les profils apparmor

sudo /etc/init.d/apparmor reload

Puis lancez mysql:

start mysql
    
réponse donnée Jonny Flowers 21.09.2015 - 11:20
la source
20

J'ai découvert qu'AppArmor était le coupable en examinant le syslog et qu'il était parvenu à modifier l'emplacement de données mysql en suivant ce processus.

Veuillez noter que dans les fichiers modifiés ci-dessous, les lignes commençant par + ont été ajoutées et les lignes commençant par - ont été supprimées. Vous ne devez pas taper / coller réellement les signes + lors de l'ajout de lignes à ces fichiers.

J'ai cloné le répertoire mysql vers le nouvel emplacement:

sudo rsync -av /var/lib/mysql /new_dir

Ensuite, j'ai modifié la ligne datadir dans /etc/mysql/my.cnf :

sudo vi /etc/mysql/my.cnf
-datadir     = /var/lib/mysql
+datadir     = /new_dir/mysql

Puis j'ai édité /etc/apparmor.d/usr.sbin.mysqld :

sudo vi /etc/apparmor.d/usr.sbin.mysqld
-  /var/lib/mysql/ r,
-  /var/lib/mysql/** rwk,
+  /new_dir/mysql/ r,
+  /new_dir/mysql/** rwk,

Puis j'ai redémarré mysql .

    
réponse donnée Brian Moore 17.08.2012 - 18:29
la source
13

Soyez conscient.

Si vous avez des tables InnoDB, vous DEVEZ copier les fichiers ibdata* et ib_logfile* ou vous ne pourrez pas utiliser les tables. Vous obtiendrez:

  

'Table' nom_base_de_données.nom_table 'n'existe pas'

erreurs.

Exécutez cette commande de copie pour copier les fichiers ibdata* et ib_logfile* .

sudo cp -p /var/lib/mysql/ib* /array2/mysql/
    
réponse donnée dave 02.05.2013 - 11:59
la source
4

Je viens d’essayer une autre manière, que certains pourraient trouver utile:

copier avec les autorisations intactes:

rsync -avzh /var/lib/mysql /path/to/new/place

sauvegarder (en cas de problème):

mv /var/lib/mysql /var/lib/_mysql

créer un nouveau répertoire vide à la place de l'ancien:

mkdir /var/lib/mysql

lier le nouvel emplacement à l'ancien:

mount -B /path/to/new/place /var/lib/mysql

J'espère que ça aide quelqu'un, parce que le lien symbolique n'a pas fonctionné pour moi, et c'était le moyen le plus simple

    
réponse donnée snapfractalpop 21.08.2015 - 00:19
la source
3

Si vous déplacez votre datadir, vous devez non seulement attribuer les nouvelles autorisations de datadir, mais vous devez également vous assurer que tous les répertoires parents sont autorisés.

J'ai déplacé mon datadir sur un disque dur, monté dans Ubuntu en tant que:

/media/*user*/Data/

et mon datadir était Bases de données .

Je devais définir des autorisations sur 771 pour chacun des médias, des utilisateurs et des répertoires de données:

sudo chmod 771 *DIR*

Si cela ne fonctionne pas, vous pouvez également utiliser mysql pour changer d’utilisateur dans /etc/mysql/my.cnf en root; Bien qu'il n'y ait aucun doute sur le fait de le faire du point de vue de la sécurité.

    
réponse donnée Kohjah Breese 09.10.2014 - 14:36
la source
1

Je préfère utiliser l'option mount with bind afin d'éviter toute modification ultérieure de la configuration d'Apparmor et de Mysql.

Par exemple:

Supposons que je veuille tout déplacer dans /var/www . Disons que ce répertoire est mon environnement de développement et qu'il est monté dans une partition différente

  1. Nous devons d'abord arrêter mysql :

    sudo systemctl stop mysql.service
    
  2. Nous déplaçons des fichiers (en conservant la permission)

    sudo rsync -av /var/lib/mysql /var/www
    

    Cela va générer un répertoire /var/www/mysql/ avec tout le contenu.

  3. Nous supprimons tout dans l’ancien répertoire:

    sudo rm -r /var/lib/mysql/*
    
  4. Nous montons le nouveau répertoire avec l'option bind dans l'ancien.
    éditez /etc/fstab et ajoutez cette ligne:

    /var/www/mysql /var/lib/mysql  none  bind 0 0
    

    Cela montera le /var/www/mysql dans notre répertoire vide /var/lib/mysql
    L'option bind fait ici la magie, elle remplira /var/lib/mysql avec le contenu de /var/www/mysql donc pour mysql et apparmor ce sera comme si rien n'avait changé.

  5. Maintenant, nous faisons le montage:

    sudo mount -a
    

    et redémarrez mysql.

réponse donnée Postadelmaga 02.12.2016 - 05:36
la source
0

Vous réalisez que si vous suivez les commandes textuellement de la réponse acceptée, cela échouera?

cp -R / var / lib / mysql / array2 / mysql

Copiera / var / lib / mysql dans / array2 / mysql / mysql.

Lorsque vous définissez votre fichier de configuration, vous feriez mieux de placer / array2 / mysql / mysql comme répertoire ou votre mysqld ne pourra pas démarrer.

Les meilleures commandes de copie seraient:

cp -R / var / lib / mysql / array2 / cp -R / var / lib / mysql / utilisateurs / array2 / mysql

Juste mes 2 cents.

    
réponse donnée Ellison Chan 29.10.2017 - 18:16
la source

Lire d'autres questions sur les étiquettes