Jak przenieść pliki danych MySQL na inną partycję?

27

Mam dysk twardy podzielony na dwie partycje, dzięki czemu mogę łatwo ponownie zainstalować Ubuntu i wypróbować różne wersje bez utraty danych z katalogu domowego. Konfiguracja jest następująca:

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

Dużo pracuję nad programowaniem, więc mój /var/wwwfolder symbolicznie łączy się z /home/valorin/workspace.

Ale chcę to zrobić również z moimi plikami danych MySQL, ponieważ denerwuję się, że za każdym razem, gdy ponownie instaluję komputer, muszę wykonać pełny zrzut SQL, a następnie przywrócić wszystkie bazy danych, zanim będę mógł wykonać więcej pracy.

Jaki jest najlepszy sposób na zrobienie tego bez łamania MySQL?

Stephen RC
źródło

Odpowiedzi:

30

Cóż, w rzeczywistości istnieje potencjalna odpowiedź na to pytanie dotyczące Ubuntu.

Jak wspomniano w łączu Gergoes, chodzi tu głównie o modyfikację /etc/mysql/my.cnf i ustawienie nowej wartości dla datadir = w sekcji [mysqld] . Jak dotąd nieokreślona część odpowiedzi.

Zakładając, że używasz nieco nowoczesnej wersji Ubuntu, możesz równie dobrze domyślnie zainstalować AppArmor , z profilem dla / usr / sbin / mysqld w trybie wymuszonym. Ten domyślny profil najprawdopodobniej nie zaakceptuje twojego nowego katalogu danych.

Załóżmy, że twoim nowym katalogiem danych będzie / home / data / mysql .

Jeśli otworzysz plik /etc/apparmor.d/usr.sbin.mysqld , wśród reguł znajdziesz te dwie linie.

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

Zakładając nasz przykład powyżej, będą musiały zostać zastąpione lub (prawdopodobnie lepiej) uzupełnione tymi dwoma wierszami.

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

Zanim będziemy mogli uruchomić nasz serwer MySQL z jego nowym katalogiem danych, będziemy również musieli jawnie przeładować nasz nowy profil apparmor.

$ sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld
andol
źródło
To nie wydaje się działać na Natty (11.4). Musiałem uruchomić MySQL przy użyciu / usr / sbin / mysqld, aby odczytał mój zmieniony katalog danych. W przeciwnym razie nadal czytał moje stare dane reż. To może być błąd z mojej strony.
trzy puchary
Powyższe nie rozwiązało dla mnie problemu na Ubuntu 12.04 (Precise). Dowiedziałem się, że należy edytować plik /etc/apparmor.d/tunables/alias, aby uwzględnić wiersz „alias / var / lib / mysql / -> / home / data / mysql /,” W tym miejscu I nie potrzebował żadnych zmian w żadnym innym pliku AppArmor. Działa natychmiast po ponownym uruchomieniu AppArmor z „/etc/init.d/apparmor restart” i MySQL z „restart mysql”.
mak
Myślę, że należy ustawić pewne uprawnienia w nowym folderze, który ma być używany. Czy ktoś wie czym one są? Wiem, że instalacja mysql tworzy użytkownika mysql ... i domyślnie nie mogę uzyskać dostępu do zawartości folderu / var / lib / mysql.
NullVoxPopuli
4

Super użytkownik ma ładne instrukcje krok po kroku, jak rozwiązać ten problem

Oto inny zestaw instrukcji dotyczących robienia tego samego http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html

Tutaj jest on opublikowany. Idź i w górę głosuj na oryginał, jeśli możesz na superużytkownika.

Po ogólnym zamieszaniu związanym z uprawnieniami zdałem sobie sprawę, że problemem nie było to, że nie miałem odpowiednich uprawnień i ścieżek, ale że AppArmor uniemożliwiał mysqlowi czytanie i pisanie w nowej lokalizacji.

To jest moje rozwiązanie:

Najpierw zatrzymaj MySQL, aby nic dziwnego się nie działo, gdy bawiąc się:

$ sudo stop mysql

Następnie przenieś wszystkie katalogi bazy danych do ich nowego domu:

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

Nie przenoś plików, zostaną one wygenerowane przez mysql, po prostu przenieś foldery (które są bazami danych).

Następnie grzecznie poproś AppArmor o zezwolenie mysql na użycie nowego folderu:

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

dodaj linie:

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

Następnie powiedz mysql, że datadir został przeniesiony:

$ sudo vim /etc/mysql/my.cnf 

zmień linię:

datadir=/var/lib/mysql

do:

datadir=/my-new-db-dir/

UWAGA: W zależności od konfiguracji bazy danych może być konieczna zmiana innodb-data-home-dir itp.

Następnie uruchom ponownie AppArmor, aby odczytać nowe ustawienia:

$ sudo /etc/init.d/apparmor restart

I ponownie uruchom MySQL przy użyciu nowego katalogu danych:

$ sudo start mysql

Mam nadzieję że to pomoże!

nelaaro
źródło
0

To naprawdę nie jest specyficzne dla Ubuntu. Niemniej jednak jest coś, co może pomóc: http://developer.spikesource.com/wiki/index.php/How_to_change_the_mysql_database_location

Nathan Osman
źródło
Instrukcje tak naprawdę nie pomogły, ponieważ częścią, nad którą nie mogłem pracować, była AppArmour, a twój post wyjaśnił to tylko mimochodem. Czy ta strona zawiera pytania dotyczące Ubuntu? W jaki sposób nowi użytkownicy szukający pomocy wiedzą, co jest specyficzne dla Ubuntu, i gdzie powinni zapytać, czy są rodzajowi?
Stephen RC
Strona niedostępna.
Hengjie
-1

To nie będzie tak działać.

użytkownik mysql musi mieć prawo do napisania nowego katalogu:

sudo chown -R mysql:mysql /newdatadir
sudo chmod -R 754 /newdatadir
sudo chmod 754 /newdatadir/..
Marin Marušić
źródło