App-Rüstung vergessen.
Für alle, die interessiert sind, habe ich Folgendes getan, um den Ordner zu verschieben.
Stoppen Sie den MySQL-Server:
stop mysql
Erstellen Sie das neue Verzeichnis:
mkdir /array2/mysql
Kopieren Sie NUR die Datenbankordner:
cp -R /var/lib/mysql /array2/mysql
cp -R /var/lib/mysql/users /array2/mysql
Sichern Sie die my.cnf
Datei:
cp /etc/mysql/my.cnf /root/my.cnf.backup
Bearbeiten Sie die my.cnf
Datei:
nano /etc/mysql/my.cnf
Ändern Sie alle Erwähnungen des alten Datenverzeichnisses und Sockets in Ihren neuen Speicherort
Meins wurde:
datadir=/array2/mysql
socket=/array2/mysql/mysql.sock
Aktualisieren Sie die Verzeichnisberechtigungen:
chown -R mysql:mysql /array2/mysql
Benennen Sie das alte Verzeichnis um:
mv /var/lib/mysql /var/lib/mysql-old
Erstellen Sie einen Symlink, nur für den Fall:
ln -s /array2/mysql /var/lib/mysql
Informieren Sie AppArmor über den neuen Datadir:
echo "alias /var/lib/mysql/ -> /your/new/datadir/," >> /etc/apparmor.d/tunables/alias
Laden Sie die Apparmor-Profile neu
sudo /etc/init.d/apparmor reload
Dann starte mysql:
start mysql
/etc/apparmor.d/usr.sbin.mysqld
jedes Mal mysql ein Update erhält, können Sie hinzufügen ,/array2/mysql/** rwk,
um/etc/apparmor.d/local/usr.sbin.mysqld
statt. Mysql hat weiterhin Zugriff auf das alte Datenverzeichnis, aber das ist wahrscheinlich kein Problem.sed -i "s,datadir.*=.*,datadir=$new_dir,g" /etc/mysql/my.cnf
. Warum nur die Datenbankordner?innodb_use_native_aio=0
im[mysqld]
Abschnitt Ihrermy.cnf
Datei, da ZFS unter Linux AIO nicht unterstützt. dev.mysql.com/doc/refman/5.5/en/…Ich fand heraus, dass AppArmor der Schuldige bei der Untersuchung des
syslog
war und dass esmysql
durch Befolgung dieses Prozesses möglich war, den Speicherort der Daten erfolgreich zu ändern .Beachten Sie, dass in den unten bearbeiteten Dateien Zeilen
+
hinzugefügt wurden, die mit beginnen, und Zeilen-
entfernt wurden, die mit beginnen . Sie sollten die+
Zeichen nicht eingeben / einfügen , wenn Sie diesen Dateien Zeilen hinzufügen.Ich habe das
mysql
Verzeichnis an den neuen Speicherort geklont :Dann habe ich die
datadir
Zeile bearbeitet in/etc/mysql/my.cnf
:Dann habe ich bearbeitet
/etc/apparmor.d/usr.sbin.mysqld
:Dann habe ich neu gestartet
mysql
.quelle
Sei vorsichtig.
Wenn Sie InnoDB-Tabellen haben, MÜSSEN Sie die
ibdata*
undib_logfile*
-Dateien kopieren, sonst können Sie die Tabellen nicht verwenden. Sie erhalten:fehler.
Führen Sie diesen Kopierbefehl aus, um die Dateien
ibdata*
und zu kopierenib_logfile*
.quelle
Ich habe gerade einen anderen Weg ausprobiert, den einige vielleicht nützlich finden:
Kopieren mit intakten Berechtigungen:
sichern (falls etwas schief geht):
Erstelle ein neues leeres Verzeichnis anstelle des alten:
binde mount the new location an den alten:
Hoffe, das hilft jemandem, denn Symlinking hat bei mir nicht funktioniert, und das war der einfachste Weg
quelle
Wenn Sie Ihren Datadir verschieben, müssen Sie nicht nur die neuen Datadir-Berechtigungen erteilen, sondern auch sicherstellen, dass alle übergeordneten Verzeichnisse über Berechtigungen verfügen.
Ich habe mein Datenverzeichnis auf eine Festplatte verschoben, die in Ubuntu als:
und mein datadir war Datenbanken .
Ich musste die Berechtigungen für jedes der Medien-, Benutzer- und Datenverzeichnisse auf 771 setzen :
Wenn dies nicht funktioniert, können Sie mysql auch zum Laufen bringen, indem Sie den Benutzer in /etc/mysql/my.cnf in root ändern. obwohl es zweifellos einige Probleme gibt, wenn man das aus der Sicherheitsperspektive macht.
quelle
Ich bevorzuge die Verwendung der Option mount with bind, um weitere Änderungen in der Apparmor- und MySQL-Konfiguration zu vermeiden.
Zum Beispiel:
Angenommen, ich möchte alles einziehen
/var/www
. Nehmen wir an, dieses Verzeichnis ist meine Entwicklungsumgebung und befindet sich in einer anderen PartitionZuerst müssen wir mysql stoppen :
Wir verschieben Dateien (Erlaubnis behalten)
Dadurch wird ein Verzeichnis
/var/www/mysql/
mit dem gesamten Inhalt erstellt.Wir entfernen alles im alten Verzeichnis:
Wir mounten das neue Verzeichnis mit der
bind
Option im alten.editiere
/etc/fstab
und füge diese Zeile hinzu:Dies wird das
/var/www/mysql
in unser leeres Verzeichnis mounten./var/lib/mysql
Die
bind
Option hier erledigt die Magie, es wird/var/lib/mysql
mit dem Inhalt von/var/www/mysql
gefüllt, also für MySQL und AppArMor wird es so sein, als hätte sich nichts geändert.Nun machen wir den Mount:
und starten Sie MySQL neu.
quelle
Ist Ihnen klar, dass es fehlschlagen wird, wenn Sie die Befehle der akzeptierten Antwort wörtlich befolgen?
cp -R / var / lib / mysql / array2 / mysql
Kopiert / var / lib / mysql nach / array2 / mysql / mysql.
Wenn Sie Ihre Konfigurationsdatei festlegen, sollten Sie / array2 / mysql / mysql als Verzeichnis angeben, da sonst Ihre mysqld nicht startet.
Die besseren Kopierbefehle wären:
cp -R / var / lib / mysql / array2 / cp -R / var / lib / mysql / users / array2 / mysql
Nur meine 2 Cent wert.
quelle