it-swarm-eu.dev

Wie verschiebe ich MySQL-Datendateien in eine andere Partition?

Ich habe meine Festplatte mit zwei Partitionen partitioniert, so dass ich Ubuntu leicht neu installieren und verschiedene Versionen ausprobieren kann, ohne meine Home-Verzeichnis-Daten zu verlieren. Es ist so aufgebaut:

20GB  -> /     (root)
180GB -> /home 

Ich arbeite viel in der Entwicklung, daher ist mein /var/www -Ordner mit /home/valorin/workspace verknüpft.

Aber ich möchte dies auch mit meinen MySQL-Datendateien tun, da ich ärgerlich bin, dass ich jedes Mal, wenn ich meinen Computer neu installiere, einen vollständigen SQL-Dump ausführen und dann alle DBs wiederherstellen muss, bevor ich weitere Arbeiten ausführen kann.

Was ist der beste Weg, um dies zu tun, ohne MySQL zu beschädigen?

28
Stephen RC

Nun, tatsächlich gibt es eine mögliche Ubuntu-spezifische Antwort auf diese Frage.

Wie von Gergoes Link erwähnt, geht es im Wesentlichen darum, /etc/mysql/my.cnf zu ändern und einen neuen Wert für datadir = in - zu setzen. [mysqld] Abschnitt. Soweit der unspezifische Teil der Antwort.

Unter der Annahme, dass Sie eine etwas moderne Ubuntu-Version verwenden, ist möglicherweise AppArmor standardmäßig installiert, mit einem Profil für /usr/sbin/mysqld in erzwungener Modus. Dieses Standardprofil akzeptiert höchstwahrscheinlich Ihren neuen Datadir nicht.

Nehmen wir an, Ihr neuer Datadir lautet /home/data/mysql .

Wenn Sie die Datei /etc/apparmor.d/usr.sbin.mysqld öffnen, finden Sie unter den Regeln diese beiden Zeilen.

/var/lib/mysql/ r,
/var/lib/mysql/** rwk,

In unserem obigen Beispiel müssen sie ersetzt oder (wahrscheinlich vorzuziehen) durch diese beiden Zeilen ergänzt werden.

/home/data/mysql/ r,
/home/data/mysql/** rwk,

Bevor wir unseren MySQL-Server mit seinem neuen Datenverzeichnis starten können, müssen wir auch unser neues Apparmor-Profil explizit neu laden.

$ Sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
31
andol

Super User hat eine nette Schritt für Schritt Anleitung, wie man dieses Problem löst

Hier finden Sie eine weitere Anleitung, wie Sie dasselbe tun können http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

Hier wird es neu gepostet. Gehen Sie und wählen Sie das Original, wenn Sie auf Superuser können.

Nach einiger allgemeiner Verwirrung über Berechtigungen wurde mir klar, dass das Problem nicht darin bestand, dass ich nicht über die richtigen Berechtigungen und Pfade verfügte, sondern dass AppArmor mysql daran hinderte, an den neuen Speicherort zu lesen und zu schreiben.

Das ist meine Lösung:

Stoppen Sie zuerst MySQL, damit beim Spielen nichts Unheimliches passiert:

$ Sudo stop mysql

Verschieben Sie dann alle Datenbankverzeichnisse in ihr neues Zuhause:

$ Sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/

Verschieben Sie die Dateien nicht, sie werden von MySQL generiert, sondern verschieben Sie nur die Ordner (die Datenbanken).

Bitten Sie AppArmor dann höflich darum, dass mysql den neuen Ordner verwendet:

$ Sudo vim /etc/apparmor.d/usr.sbin.mysqld

zeilen hinzufügen:

/new-mysql-dir/ r,
/new-mysql-dir/** rwk,

Dann sage mysql, dass der Datadir umgezogen ist:

$ Sudo vim /etc/mysql/my.cnf 

ändere die Zeile:

datadir=/var/lib/mysql

zu:

datadir=/my-new-db-dir/

HINWEIS: Abhängig von Ihrer Datenbankkonfiguration müssen Sie möglicherweise auch das Verzeichnis innodb-data-home usw. ändern.

Starten Sie anschließend AppArmor neu, um die neuen Einstellungen zu lesen:

$ Sudo /etc/init.d/apparmor restart

Starten Sie MySQL erneut mit dem neuen Datadir:

$ Sudo start mysql

Hoffe das hilft!

4
nelaaro

Wenn Sie wie ich mit VirtualBox arbeiten und den MySQL-Datenordner in einen freigegebenen Ordner auf dem Hostsystem verschieben möchten, befolgen Sie das einfache Lernprogramm unter http://vacilando.org/en/article/moving-mysql-data) -files-virtualbox-shared-folder

0
Vacilando

Das ist wirklich nicht Ubuntu-spezifisch. Dennoch ist hier etwas, das helfen könnte: http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location

0
Nathan Osman