Unterschiedliche Speicherorte für MySQL-Datenbanken?

18

Kann ich MySQL so konfigurieren, dass eine bestimmte Datenbank an einem separaten Ort auf der Festplatte gespeichert wird?

Ich möchte weiterhin, dass alle neuen Datenbanken an den Standardspeicherort verschoben werden. Es gibt jedoch eine bestimmte Datenbank, die ich in meinem Dropbox-Ordner speichern möchte, damit sie zwischen einigen Computern synchronisiert bleibt.

Wie kann ich das machen?

Colin
quelle
1
Im Übrigen ist es möglich, dies umgekehrt zu tun. Lassen Sie die Datenbank , wie es war, und Symlink zu ihm von Dropbox. Dropbox versteht Symlinks nicht wirklich und synchronisiert sie einfach wie gewohnt.
TRiG

Antworten:

27

Natürlich kannst du! Sie müssen die Root-Berechtigung erteilen . Lesen Sie die Manualseiten .

MySQL speichert die Datenbankdaten in getrennten Verzeichnissen in /var/lib/mysql. Ich denke, zuerst musste man ein Verzeichnis erstellen, in das die Dateien der ausgewählten Datenbank abgelegt werden sollen. Erteilen Sie Root-Berechtigungen, stoppen Sie MySQL-Deamon:

# /etc/init.d/mysql stop

Kopieren Sie Ihre Daten in Ihren neuen Ordner:

# cp /var/lib/mysql/DATABASENAME /path/to/new/database/dir

Entfernen Sie Ihr altes Verzeichnis aus MySQL-Datendateien: ( Warnung! IMMER zuerst SQL-Dump erstellen !!! )

# rm -R /var/lib/mysql/DATABASENAME

Machen Sie einen Symlink zurück zum MySQL-Datenverzeichnis: ( Achtung! Lesen Sie zuerst die Manpage von ln !!! )

# ln -s /full/path/to/new/database/dir /var/lib/mysql/DATABASENAME

Wenn Sie fertig sind, starten Sie MySQL:

# /etc/init.d/mysql start

Warnung! Wenn Ihr neues Verzeichnis nicht von MySQL geschrieben und gelesen werden kann, würde das nicht funktionieren! Beispiel, das häufigste Problem: Sie legen Ihr neues Datenverzeichnis in Ihrem Home-Ordner ab, Ihr Home-Ordner wird von anderen lesegeschützt (z. B .: drwxrwx --- Sie, Sie, IhrDir).

Fragen Sie, ob Sie andere Dinge über diese Methode wissen wollen!

Antivirtel
quelle
2
Vielen Dank! Ich habe nicht einmal über Symlinks nachgedacht, sondern mir zu viele Gedanken darüber gemacht, wie ich das in MySQL machen kann.
Colin
8
Sie möchten bearbeiten /etc/apparmor.d/*mysqld, um auch das neue Verzeichnis einzuschließen. Dann sudo service apparmor reloadvor dem Neustart von MySQL.
Kees Cook
3
@KeesCook, vielen Dank für den Apparmor-Tipp, der mich verrückt gemacht hat !! Sieht so aus, als ob es besser ist, es /etc/apparmor.d/localeinzutragen (auf meiner Installation gibt es bereits eine usr.sbin.mysqld) und eine Single hinzuzufügen, /full/path/to/new/database/dir/** rwk,die es für mich getan hat ...
Tobias J
Vielen Dank, einige Details zum Bearbeiten des Apparmors hier sind ebenfalls hilfreich. Ich wurde beim Versuch, die Datenbank auf ein Laufwerk zu stellen, das beim Booten nicht automatisch bereitgestellt wird, verlangsamt und brauchte Root-Benutzer, um darauf zuzugreifen. Weigerte sich zu arbeiten. Herausgegeben fstabwie diesen , so dass das Laufwerk im Dateisystem nach dem Starten montiert wurde, funktioniert jetzt alles.
Kardamom
3

Beachten Sie, dass Sie bei Verwendung von Ubuntu auch einen Eintrag in die AppArmour-Konfigurationsdatei /etc/apparmor.d/usr.sbin.mysqld einfügen müssen. Andernfalls erhalten Sie weiterhin Schreibfehler, obwohl Sie Dateien und Ordner ändern Berechtigungen.

Andrea Moro
quelle