To dobra odpowiedź, ale może być potrzebny jeszcze jeden krok, aby umożliwić klientom połączenie z mysql. Dodaj nową grupę z jednym wierszem pod nią ... [klienci] socket = / array2 / mysql / mysql.sock, gdzie część socket = wskazuje nowe położenie pliku mysql.sock.
Night Owl
1
Jeśli nie chcesz być jedno, aby połączyć /etc/apparmor.d/usr.sbin.mysqldkażdorazowo mysql odbiera aktualizacji, można dodać /array2/mysql/** rwk,do /etc/apparmor.d/local/usr.sbin.mysqldzamiast. MySQL nadal będzie mieć dostęp do starego katalogu danych, ale prawdopodobnie nie stanowi to problemu.
drevicko
sed -i "s,datadir.*=.*,datadir=$new_dir,g" /etc/mysql/my.cnf. Dlaczego tylko foldery bazy danych?
int_ua
Dla każdego, kto przenosi swój katalog danych do ZFS (tak jak ja), upewnij się, że dodajesz również: innodb_use_native_aio=0w [mysqld]sekcji swojego my.cnfpliku, ponieważ ZFS na Linuksie nie obsługuje AIO. dev.mysql.com/doc/refman/5.5/en/…
Andrew Ensley
23
Odkryłem, że winowajcą był AppArmor, sprawdzając syslogi udało mi się zmienić mysqllokalizację danych, wykonując ten proces.
Pamiętaj, że w plikach edytowanych poniżej +dodano linie zaczynające się od i linie zaczynające się od -zostały usunięte. W rzeczywistości nie należy wpisywać / wklejać +znaków podczas dodawania wierszy do tych plików.
Sklonowałem mysqlkatalog do nowej lokalizacji:
sudo rsync -av /var/lib/mysql /new_dir
Następnie zredagowałem datadirwiersz w /etc/mysql/my.cnf:
Jeśli przenosisz swój datadir, musisz nie tylko dać nowe uprawnienia do datadiru, ale także upewnić się, że wszystkie katalogi nadrzędne mają uprawnienia.
Przeniosłem mój katalog danych na dysk twardy, zamontowany w Ubuntu jako:
/media/*user*/Data/
a moim datadirem były bazy danych .
Musiałem ustawić uprawnienia na 771 dla każdego katalogu multimediów, użytkownika i danych:
sudo chmod 771 *DIR*
Jeśli to nie zadziała, innym sposobem na uruchomienie mysql jest zmiana użytkownika w /etc/mysql/my.cnf na root; chociaż z pewnością istnieją pewne problemy z tym związane.
Wolę używać mount z opcją bind, więc unikam dalszych zmian w konfiguracji Apparmor i Mysql.
Na przykład:
Załóżmy, że chcę wszystko przenieść /var/www. Powiedzmy, że ten katalog jest moim środowiskiem programistycznym i jest zamontowany na innej partycji
Najpierw musimy zatrzymać mysql :
sudo systemctl stop mysql.service
Przenosimy pliki (zachowując uprawnienia)
sudo rsync -av /var/lib/mysql /var/www
Spowoduje to wygenerowanie katalogu /var/www/mysql/z całą zawartością.
Usuwamy wszystko ze starego katalogu:
sudo rm -r /var/lib/mysql/*
Montujemy nowy katalog z bindopcją w starym.
edytuj /etc/fstabi dodaj ten wiersz:
/var/www/mysql /var/lib/mysql none bind 0 0
Spowoduje to zamontowanie /var/www/mysqlw naszym pustym katalogu /var/lib/mysql
. bindOpcja tutaj robi magię, zapełni /var/lib/mysqlsię zawartością, /var/www/mysqlwięc dla mysql i apparmor będzie tak, jakby nic się nie zmieniło.
/etc/apparmor.d/usr.sbin.mysqld
każdorazowo mysql odbiera aktualizacji, można dodać/array2/mysql/** rwk,
do/etc/apparmor.d/local/usr.sbin.mysqld
zamiast. MySQL nadal będzie mieć dostęp do starego katalogu danych, ale prawdopodobnie nie stanowi to problemu.sed -i "s,datadir.*=.*,datadir=$new_dir,g" /etc/mysql/my.cnf
. Dlaczego tylko foldery bazy danych?innodb_use_native_aio=0
w[mysqld]
sekcji swojegomy.cnf
pliku, ponieważ ZFS na Linuksie nie obsługuje AIO. dev.mysql.com/doc/refman/5.5/en/…Odkryłem, że winowajcą był AppArmor, sprawdzając
syslog
i udało mi się zmienićmysql
lokalizację danych, wykonując ten proces.Pamiętaj, że w plikach edytowanych poniżej
+
dodano linie zaczynające się od i linie zaczynające się od-
zostały usunięte. W rzeczywistości nie należy wpisywać / wklejać+
znaków podczas dodawania wierszy do tych plików.Sklonowałem
mysql
katalog do nowej lokalizacji:Następnie zredagowałem
datadir
wiersz w/etc/mysql/my.cnf
:Następnie zredagowałem
/etc/apparmor.d/usr.sbin.mysqld
:Potem zrestartowałem
mysql
.źródło
Być świadomym.
Jeśli masz tabele InnoDB, MUSISZ skopiować pliki
ibdata*
iib_logfile*
, w przeciwnym razie nie będziesz mógł ich używać. Dostaniesz:błędy.
Uruchom to polecenie kopiowania, aby skopiować pliki
ibdata*
iib_logfile*
.źródło
Właśnie wypróbowałem inny sposób, który może okazać się przydatny:
kopiuj z nienaruszonymi uprawnieniami:
wykonaj kopię zapasową (na wypadek, gdyby coś poszło nie tak):
utwórz nowy pusty katalog zamiast starego:
bind podłącz nową lokalizację do starego:
Mam nadzieję, że to komuś pomaga, ponieważ symlinkowanie nie działało dla mnie, a to był najprostszy sposób
źródło
Jeśli przenosisz swój datadir, musisz nie tylko dać nowe uprawnienia do datadiru, ale także upewnić się, że wszystkie katalogi nadrzędne mają uprawnienia.
Przeniosłem mój katalog danych na dysk twardy, zamontowany w Ubuntu jako:
a moim datadirem były bazy danych .
Musiałem ustawić uprawnienia na 771 dla każdego katalogu multimediów, użytkownika i danych:
Jeśli to nie zadziała, innym sposobem na uruchomienie mysql jest zmiana użytkownika w /etc/mysql/my.cnf na root; chociaż z pewnością istnieją pewne problemy z tym związane.
źródło
Wolę używać mount z opcją bind, więc unikam dalszych zmian w konfiguracji Apparmor i Mysql.
Na przykład:
Załóżmy, że chcę wszystko przenieść
/var/www
. Powiedzmy, że ten katalog jest moim środowiskiem programistycznym i jest zamontowany na innej partycjiNajpierw musimy zatrzymać mysql :
Przenosimy pliki (zachowując uprawnienia)
Spowoduje to wygenerowanie katalogu
/var/www/mysql/
z całą zawartością.Usuwamy wszystko ze starego katalogu:
Montujemy nowy katalog z
bind
opcją w starym.edytuj
/etc/fstab
i dodaj ten wiersz:Spowoduje to zamontowanie
/var/www/mysql
w naszym pustym katalogu/var/lib/mysql
.
bind
Opcja tutaj robi magię, zapełni/var/lib/mysql
się zawartością,/var/www/mysql
więc dla mysql i apparmor będzie tak, jakby nic się nie zmieniło.Teraz wykonujemy montaż:
i zrestartuj mysql.
źródło
Czy zdajesz sobie sprawę, że jeśli wykonasz polecenia dosłownie z przyjętej odpowiedzi, to się nie powiedzie?
cp -R / var / lib / mysql / array2 / mysql
Skopiuje / var / lib / mysql do / array2 / mysql / mysql.
Po ustawieniu pliku konfiguracyjnego lepiej umieścić katalog / array2 / mysql / mysql jako katalog, bo inaczej mysqld nie uruchomi się.
Lepsze polecenia kopiowania to:
cp -R / var / lib / mysql / array2 / cp -R / var / lib / mysql / users / array2 / mysql
Tylko moje 2 centy warte.
źródło