2010-11-15 8 views
11

In meiner MySQL-Installation habe ich eine InnoDB-Datenbank, von der ich weiß, dass sie sehr groß werden wird. Daher habe ich beschlossen, sie auf eine eigene Festplatte zu verschieben. Ich hatte gehofft, dies zu tun, indem ich die Dateien auf die andere Platte verschiebe und dann einen Symlink erstelle, aber ich laufe auf Fehler!Verschieben der MySQL InnoDB-Datenbank auf ein separates Laufwerk

Dies ist, was ich getan habe:

1) In my.cnf I

[mysqld] innodb_file_per_table

(Dies funktioniert, und ich habe .ibd pro FRM gesetzt haben müssen der Datenbankordner.)

2) ich habe, wenn symbolische Links sind ok mit SHOW VARIABLES LIKE "have_symlink";

(ich weiß, dass das Dokument ation sagt:

Symlinks werden vollständig nur für MyISAM-Tabellen unterstützt. Für Dateien, die von Tabellen für andere Speicher-Engines verwendet werden, können Sie seltsame Probleme bekommen, wenn Sie versuchen, verwenden symbolische Links.

Aber ich brauche Fremdschlüssel ...)

3) zog ich den Datenbankordner und einen Symlink erstellt.

4) Neu gestartet mysql und versucht:

mysql> USE db_name 
Database changed 
mysql> SHOW TABLES; 
ERROR 1018 (HY000): Can't read dir of './db_name/' (errno: 13) 
mysql> exit 
[email protected]# perror 13 
OS error code 13: Permission denied 

Symlink ist (wie erwartet) lrwxrwxrwx mysql mysql db_name -> /path-to/db_name/

Datenbank Ordnerberechtigungen sind drwx------ mysql mysql

alle Dateiberechtigungen sind -rw-rw---- mysql mysql

ich verwende Ubuntu 10.04 Server mit MySQL 5.1.41 (Standard von apt).

Haben Sie das schon erfolgreich gemacht?

+0

Der einfachste Weg ist es, mysqldump zu nehmen und dann Schema Change Config zu löschen und es zu importieren, wenn Ihre Datenbank nicht wirklich groß ist. – vinothkr

+0

Ich möchte den Rest der Datenbanken auf der Systemdiskette behalten (für Drupal und solche Dinge) und nur diese spezifische aus dem Datenverzeichnis bewegen. Entschuldigung, wenn das aus der Frage nicht klar war. – Norling

+0

Dies könnte besser zu http://serverfault.com/ passen - Voting, um es zu migrieren ... – richsage

Antwort

16

Das funktioniert, aber mein alter Feind appArmor hat MySQL daran gehindert, das verschobene Verzeichnis zu lesen.

sudo nano /etc/apparmor.d/usr.sbin.mysqld 

Add Linien:

/new-db-path/ r, 
/new-db-path/** rwk, 

Dank für die Unterstützung aus!

+0

Gleiches Problem auf Ubuntu 12.04 nachdem die Datenbank verschoben und durch einen symbolischen Link ersetzt wurde. Bearbeiten Sie das AppArmor-Profil wie vorgeschlagen. Vielen Dank! –

+0

Danke. Das war meine Lösung. – Yada

+0

Danke! Vergiss nicht, den apparmor-Dienst neu zu starten, nachdem du –

10

Norling Jr. meinen Tag mit dem AppArmor Spitze gespeichert, aber da ich ein paar Probleme hatte es die Konfiguration Ich schreibe eine detailliertere Antwort. Ich benutze Ubuntu 12.04.

starten Wurzel immer die Notwendigkeit, sparen alle geben, dass sudos:

sudo su - 

MySQL docs Nach Sie zunächst Ihre bereits erstellt Datenbank dir auf einen anderen Pfad verschieben:

mv /var/lib/mysql/yourdatabase /new/path/ 

Hier war meine erste Falle. Überprüfen Sie, ob der MySQL-Benutzer Zugriff auf diesen neuen Weg hat:

sudo -u mysql ls /new/path/yourdatabase 

Wenn Sie den Zugriff verweigert habe, sollten Sie wahrscheinlich ausführen die Erlaubnis geben, zu jedem Elternverzeichnis:

chmod a+x /new /new/path/ 

Test, um die Datei erneut zuzugreifen. Wenn es immer noch nicht funktioniert, versuchen Sie eine Frage in Stack-Überlauf zu fragen :-)

Link zu dem neuen Verzeichnis auf und geben sie über die richtigen Berechtigungen:

ln -s /new/path/yourdatabase /var/lib/mysql/ 
chown mysql:mysql /var/lib/mysql/yourdatabase 

Lassen Sie uns eine lokale Datei bearbeiten AppArmor-Konfiguration. Sie sollten die Datei /etc/apparmor.d/usr.sbin.mysqld nicht ändern. Bearbeiten Sie die lokale conf, so dass Sie nicht verlieren wird es nach System-Updates:

emacs /etc/apparmor.d/local/usr.sbin.mysqld 

hinzufügen Norling Jr. Konfigurationen:

/new/path/yourdatabase/ r, 
/new/path/yourdatabase/** rwk, 

Sie das letzte Komma nicht verpassen. AppArmor-Konfiguration Speichern Sie die Datei und laden:

apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld 

Dies wird nicht nur neu laden AppArmor MySql Konfiguration, sondern auch testen, wenn es keine Syntaxfehler ist (eine sehr wichtige Sache). Wenn Sie den Parser nicht ausführen, wird das neue conf nicht angewendet.

Schließlich öffnen Sie einfach mysql-Client und geben Sie SHOW DATABASES. Wenn Ihre Datenbank erscheint, ist wahrscheinlich alles in Ordnung. Geben Sie "USE yourdatabase" für eine weitere Überprüfung ein.

Ein robuster Test würde auch den mysql-Dienst neu laden: 'service mysql restart' und versuchen, auf Ihre Datenbank zuzugreifen.

Jetzt werde ich mich erinnern, nächste Mal muss ich es tun. Google und SO zusammen sind die beste Notebook der Welt :-)

+2

das war unglaublich hilfreich, DANKE! –

1

Es sollte möglich sein, lokale Halterungen (Bindungen) mit den entsprechenden Berechtigungen zu verwenden und montieren Oprions (einschließlich der SELinux oder AppArmor Kontexten):

/dev/sdc on /var/lib/mysql/my-db/ 
/dev/sdd on /var/lib/mysql/her-db/ 
fs.example.com:/path/to/wherever on /var/lib/mysql/my-other-db/ 

Obwohl Ich habe diese Lösung nicht getestet, so verwenden Sie auf eigene Gefahr.

+0

Ich kann bestätigen, dass das funktioniert. Sie müssen eine ganze Partition nur dem mysql-Unterverzeichnis zuweisen, aber sobald Sie das tun und es richtig mounten, funktioniert es großartig. – GaryO

Verwandte Themen