Wie verschiebe ich MySQL-Datendateien auf eine andere Partition?

27

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 mache viel Entwicklungsarbeit, daher habe ich einen /var/wwwLink zu meinem Ordner /home/valorin/workspace.

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?

Stephen RC
quelle

Antworten:

30

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 im Abschnitt [mysqld] einen neuen Wert für datadir = festzulegen . Soweit der unspezifische Teil der Antwort.

Unter der Annahme, dass Sie eine etwas moderne Ubuntu-Version verwenden, ist AppArmor möglicherweise standardmäßig installiert, mit einem Profil für / usr / sbin / mysqld im erzwungenen 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
andol
quelle
Dies scheint auf Natty (11.4) nicht zu funktionieren. Ich musste MySQL mit / usr / sbin / mysqld starten, damit es mein geändertes Datenverzeichnis liest. Ansonsten las es mein altes Datenverzeichnis weiter. Dies könnte ein Fehler auf meiner Seite sein.
Drei-Tassen
Das oben genannte Problem konnte für mich unter Ubuntu 12.04 (Precise) nicht gelöst werden. Ich fand heraus, dass man die Datei /etc/apparmor.d/tunables/alias bearbeiten muss, um die Zeile "alias / var / lib / mysql / -> home / data / mysql /" aufzunehmen brauchte keine Änderungen in einer der anderen AppArmor-Dateien. Es funktionierte sofort nach dem Neustart von AppArmor mit "/etc/init.d/apparmor restart" und MySQL mit "restart mysql".
Mak
Ich denke, dass bestimmte Berechtigungen für den neuen Ordner festgelegt werden müssen, der verwendet werden soll. Weiß jemand, was sie sind? Ich weiß, dass die Installation von MySQL einen MySQL-Benutzer erstellt ... und dass ich standardmäßig nicht auf den Inhalt des Ordners / var / lib / mysql zugreifen kann.
NullVoxPopuli
4

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 Ungewöhnliches 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 Datenbankeinrichtung 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!

Nelaaro
quelle
0

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

Nathan Osman
quelle
Anweisungen halfen nicht wirklich, da der Teil, an dem ich nicht arbeiten konnte, AppArmour war und Ihr Beitrag es nur beiläufig erklärte. Ist diese Site auch für Fragen geeignet, die Ubuntu-spezifisch sind? Woher wissen neue Benutzer, die nach Hilfe suchen, was Ubuntu-spezifisch ist oder nicht, und wo sollten sie sie fragen, ob sie generisch sind?
Stephen RC
Website nicht verfügbar.
Hengjie
-1

Das wird nicht einfach so funktionieren.

Benutzer mysql muss das Recht haben, in das neue Verzeichnis zu schreiben:

sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..
Marin Marušić
quelle