Zmiana katalogu danych MySQL w Ubuntu Server 10.04

9

Podczas próby zmiany katalogu danych na serwerze Ubuntu 10.04 pojawił się następujący błąd.

100809 19:33:00 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
100809 19:33:00 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
100809 19:33:00  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.
Norling Jr.
źródło
2
... a twoje pytanie brzmi? Zauważ, że jeśli przeniesiesz tylko zawartość folderów, a nie plików, stracisz całą zawartość tabeli InnoDB.
bobince
nie ma pytania / łyżki. Pomyślałem, że może to być interesujące dla ludzi tutaj. Dobra uwaga na temat zawartości tabeli InnoDB!
2
Jeśli chcesz zadać i odpowiedzieć na własne pytanie, to jest w porządku, ale poświęć trochę czasu, aby faktycznie zadać pytanie i udzielić odpowiedzi jako odpowiedzi.
Zoredache,

Odpowiedzi:

8

Po pewnym ogólnym zamieszaniu na temat uprawnień OP zdał sobie sprawę, że problemem nie było to, że nie miał uprawnień i uprawnień do ścieżki, ale że AppArmor uniemożliwiał MySQL odczytywanie i zapisywanie w nowej lokalizacji.

Oto jego 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
  >> add lines
     /new-mysql-dir/ r,
     /new-mysql-dir/** rwk,

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

$ sudo vim /etc/mysql/my.cnf 
  >> change the line
     datadir=/var/lib/mysql
  >> to
     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
splattne
źródło
2
możesz utrzymać działanie bazy danych, łącząc pliki z ich nową lokalizacją zamiast je przenosić ... chyba że dwie lokalizacje datadir znajdują się na osobnych partycjach.
cpbills
Instrukcja przenoszenia tylko katalogów nie jest dokładna w przypadku korzystania z innodb. W takim przypadku musisz również przenieść dane i pliki dziennika innodb (ibdata *, ib_logfile *).
hillel
Uwaga dla innych tak nieostrożnych jak ja. Musisz mieć końcowe ukośniki na ścieżce w konfiguracji AppArmor, w /new-mysql-dir/ rprzeciwnym razie nadal będzie to odrzucane. Podstawowe rzeczy związane z Linuksem, ale nigdy nie mogę uzyskać poprawnych ukośników.
Jeff
AppArmor wciąż mnie odmawia. Wątek ten pomógł pokonać ostatnią przeszkodę.
Jeff