Różne lokalizacje baz danych MySQL?

18

Czy mogę skonfigurować MySQL do przechowywania określonej bazy danych w oddzielnym miejscu na dysku?

Nadal chcę, aby wszelkie nowe bazy danych trafiły do ​​domyślnej lokalizacji, ale w folderze Dropbox chcę przechowywać określoną bazę danych, aby mogła być zsynchronizowana między kilkoma komputerami.

W jaki sposób mogę to zrobić?

Colin
źródło
1
Nawiasem mówiąc, można to zrobić na odwrót. Pozostaw bazę danych taką, jaka była, i link do niej z Dropbox. Dropbox tak naprawdę nie rozumie dowiązań symbolicznych i po prostu synchronizuje je jak zwykle.
TRiG

Odpowiedzi:

27

Oczywiście, że możesz! Musisz przyznać uprawnienia roota . Przeczytaj ln stron podręcznika.

MySQL przechowuje dane bazy danych w oddzielnych katalogach w /var/lib/mysql. Myślę, że najpierw musiałeś stworzyć katalog, w którym chcesz umieścić wybrane pliki bazy danych. Przyznaj uprawnienia do rootowania, zatrzymaj deamon MySQL:

# /etc/init.d/mysql stop

Skopiuj dane do nowego folderu:

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

Usuń stary katalog z plików danych MySQL: ( Uwaga! ZAWSZE najpierw zrzuć SQL !!! )

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

Utwórz symboliczny link z powrotem do danych MySQL reż: ( Uwaga! Najpierw przeczytaj stronę podręcznika ln !!! )

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

Po tym, jesteś gotowy, uruchom MySQL:

# /etc/init.d/mysql start

Ostrzeżenie! Jeśli twój nowy katalog nie jest zapisywany i czytelny przez MySQL, to nie zadziała! Przykład, częsty problem: umieszczasz nowy katalog danych w folderze domowym, folder domowy jest chroniony przed innymi przez odczytu (np. Drwxrwx --- you youdir).

Zapytaj, czy chcesz dowiedzieć się więcej o tej metodzie!

antivirtel
źródło
2
Dzięki! Nawet nie rozważałem dowiązań symbolicznych, byłem zbyt zajęty myśleniem o tym, jak to zrobić w mysql.
Colin,
8
Będziesz chciał edytować, /etc/apparmor.d/*mysqldaby uwzględnić również nowy katalog. Następnie sudo service apparmor reloadprzed ponownym uruchomieniem MySQL.
Kees Cook
3
@KeesCook bardzo dziękuję za poradę, która doprowadzała mnie do szału !! Wygląda na to, że lepiej to włożyć /etc/apparmor.d/local(w mojej instalacji jest już usr.sbin.mysqld), dodanie jednego /full/path/to/new/database/dir/** rwk,zrobiło to dla mnie ...
Tobias J
Dzięki bardzo, niektóre szczegóły edytowania apparmor tutaj są również przydatne. Spowolniłem próbę umieszczenia bazy danych na dysku, który nie instaluje się automatycznie podczas rozruchu i potrzebowałem użytkownika root, aby uzyskać do niej dostęp. Odmówił pracy. Edytowany fstabjak to tak, że dysk został zamontowany w systemie plików po starcie, teraz wszystko działa.
kardamon
3

Należy pamiętać, że jeśli używasz Ubuntu, musisz również dodać wpis w pliku konfiguracyjnym AppArmour /etc/apparmor.d/usr.sbin.mysqld, w przeciwnym razie będziesz nadal otrzymywać błędy uprawnień do zapisu, nawet jeśli zmienisz pliki i folder uprawnienia.

Andrea Moro
źródło