Oublié à propos de l'armure de l'application.
Pour ceux qui sont intéressés, 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
Sauvegarder le my.cnf
fichier:
cp /etc/mysql/my.cnf /root/my.cnf.backup
Editez le my.cnf
fichier:
nano /etc/mysql/my.cnf
Remplacez toutes les mentions de l'ancien datadir et socket par votre nouvel emplacement
Le mien est devenu:
datadir=/array2/mysql
socket=/array2/mysql/mysql.sock
Mettez à jour les autorisations du 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 au cas où:
ln -s /array2/mysql /var/lib/mysql
Informez AppArmor du 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
/etc/apparmor.d/usr.sbin.mysqld
chaque fois que mysql reçoit une mise à jour, vous pouvez ajouter/array2/mysql/** rwk,
à la/etc/apparmor.d/local/usr.sbin.mysqld
place. Mysql aura toujours accès à l'ancien répertoire de données, mais ce n'est probablement pas un problème.sed -i "s,datadir.*=.*,datadir=$new_dir,g" /etc/mysql/my.cnf
. Pourquoi seulement les dossiers de base de données?innodb_use_native_aio=0
dans la[mysqld]
section de votremy.cnf
fichier, car ZFS sur linux ne prend pas en charge AIO. dev.mysql.com/doc/refman/5.5/fr/…J'ai constaté qu'AppArmor était le coupable en examinant le
syslog
et j'ai pu modifier l'mysql
emplacement des données en suivant ce processus.Veuillez noter que, dans les fichiers édités ci-dessous, les lignes commençant par
+
ont été ajoutées et les lignes commençant par-
ont été supprimées. En fait, vous ne devez pas taper / coller les+
signes lors de l’ajout de lignes à ces fichiers.J'ai cloné le
mysql
répertoire dans le nouvel emplacement:Puis j'ai édité la
datadir
ligne dans/etc/mysql/my.cnf
:Puis j'ai édité
/etc/apparmor.d/usr.sbin.mysqld
:Puis j'ai redémarré
mysql
.la source
Savoir.
Si vous avez des tables InnoDB, vous DEVEZ copier sur les fichiers
ibdata*
et, sinon vousib_logfile*
ne pourrez pas utiliser les tables. Tu auras:les erreurs.
Exécutez cette commande de copie pour copier sur les fichiers
ibdata*
etib_logfile*
.la source
Je viens d'essayer d'une autre manière, que certains pourraient trouver utile:
copie avec autorisations intactes:
sauvegarder (en cas de problème):
créer un nouveau répertoire vide à la place de ancien:
lie le nouvel emplacement à l'ancien:
J'espère que cela aide quelqu'un, parce que les liens symboliques n'ont pas fonctionné pour moi et que c'était la façon la plus simple
la source
Si vous déplacez votre datadir, vous devez non seulement donner les nouvelles autorisations 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:
et mon datadir était des bases de données .
J'ai dû définir des autorisations sur 771 pour chacun des répertoires de supports, d' utilisateurs et de données:
Si cela ne fonctionne pas, une autre façon de faire fonctionner mysql consiste à changer d’utilisateur dans /etc/mysql/my.cnf en root; bien que cela soit sans aucun doute problématique du point de vue de la sécurité.
la source
Je préfère utiliser l'option mount avec 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
/var/www
. Disons que ce répertoire est mon environnement de développement et qu'il est monté dans une partition différentePremièrement, nous devons arrêter mysql :
Nous déplaçons des fichiers (en conservant la permission)
Cela va générer un répertoire
/var/www/mysql/
avec tout le contenu.Nous supprimons tout dans l'ancien répertoire:
Nous montons le nouveau répertoire avec
bind
option dans l'ancien.éditez
/etc/fstab
et ajoutez cette ligne:Cela montera le
/var/www/mysql
dans notre répertoire vide./var/lib/mysql
L'
bind
option ici fait la magie, elle sera peuplée/var/lib/mysql
avec le contenu de/var/www/mysql
donc pour mysql et apparmor ce sera comme si rien n'avait changé.Maintenant nous faisons la monture:
et redémarrez mysql.
la source
Vous vous rendez compte que si vous suivez les commandes à la lettre 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 mettre / array2 / mysql / mysql en tant que répertoire, sinon votre mysqld ne pourra pas démarrer.
Les meilleures commandes de copie seraient:
cp -R / var / lib / mysql / array2 / cp -R / var / lib / mysql / users / array2 / mysql
Juste mes 2 centimes.
la source