2012-01-31 11 views
54

Jestem na serwerze, który zainstalował się ponownie na RHEL 5. Udało mi się zainstalować Apache i PHP w porządku., ale mam poważny problem z moją instalacją MySQL. Próbowałem:Błąd krytyczny: Nie można otworzyć i zablokować tabel uprawnień: Tabela "mysql.host" nie istnieje

yum install mysql-server mysql 

Nie otrzymałem żadnych błędów ani konfliktów. Potem próbowałem uruchomić mysql z następujących poleceń:

chkconfig --levels 235 mysqld on 
service mysqld start 

i dostać Timeout error occurred trying to start MySQL Daemon.

Sprawdziłem moje dzienniki i zobaczyć ten błąd:

[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist 

Nie jestem pewien gdzie jechać z tutaj.

Dla odniesienia używam RHEL 5 i zainstalowałem najnowsze wersje PHP 5 i Apache.

+0

Więc szukam witryny mysql i zobaczyć, że ten komunikat o błędzie wyskakuje dla ich rozwiązywania problemów z instalacją mysql na systemach Windows: http://dev.mysql.com/doc/refman/5.0/en/windows-troubleshooting.html OK, to prawdopodobnie ten sam problem w systemie opartym na systemie Unix jak no cóż, więc myślę, że muszę dowiedzieć się, jaka jest domyślna lokalizacja i gdzie jest ona faktycznie instalowana. "Te komunikaty często występują, gdy baza danych MySQL lub katalogi danych są zainstalowane w różnych lokalizacjach niż domyślne lokalizacje" –

+0

Osx i mysql 5.7, patrz http://stackoverflow.com/a/37668663/334999 – Shuo

Odpowiedz

58
  1. Odinstaluj mysql używając yum remove mysql*

  2. usuwał /usr/bin/mysql i /var/lib/mysql

  3. usunąć plik /etc/my.cnf.rmp

  4. Przymież ps -e aby sprawdzić procesy, aby upewnić MySQL nie jest jeszcze uruchomiony .

  5. uruchomienia serwera z reboot

  6. Run yum install mysql-server. Wydaje się to również instalować klienta mysql jako zależność.

  7. własności Give mysql i specjalnie uprawnionych grup z:

    chown -R mysql /var/lib/mysql

    chgrp -R mysql /var/lib/mysql

  8. Zastosowanie service mysqld start aby uruchomić demona MySQL.

+5

Myślę, że zmiana najważniejsza była grupa i własność. Wydaje się, że po uruchomieniu mysql automatycznie tworzy plik mysql.sock, ale nie może tego zrobić, jeśli nie ma uprawnień systemowych. –

+1

Zastanawiam się, czy w grę mogły wchodzić również uprawnienia SELinux? Zniszczenie całej rzeczy mogło pozwolić demona odnawiającego etykietowanie na nowe pliki z prawidłowymi etykietami. – sarnold

+1

Powtórzyłem ten błąd i samo wyrażenie 'chgrp' wystarczyło, aby rozwiązać problem. –

10

Korzeń mój problem wydawał się być SELinux, który został włączony (egzekwowanie) automatycznie na OS zainstalować.

Chciałam mój mysql w/danych.

Po sprawdzeniu, czy mój.CNF miał:

datadir=/data/mysql 

(i opuszcza gniazdo w/var/lib/mysql) że wykonał polecenia wyłączenia SELinuxa do mysqld (alternatywnie jest włączenie go w całości)

setsebool -P mysqld_disable_trans=1 

Pobiegłem następujące polecenia:

> chown -R mysql . 
> chgrp -R mysql . 
> mysql_install_db --user=mysql 

zacząłem demona mySQL i wszystko działało w porządku po tym.

0

W moim przypadku ścieżka folderu danych MySQL miał szczególny charakter „C” i uczynić mi ...

Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist.

Ja zostały usunięte wszystkie znaki specjalne i wszystko działa.

2

Dla siebie, musiałem zrobić:

yum remove mysql* 

rm -rf /var/lib/mysql/ 
cp /etc/my.cnf ~/my.cnf.bkup 

yum install -y mysql-server mysql-client 

mysql_install_db 

chown -R mysql:mysql /var/lib/mysql 
chown -R mysql:mysql /var/log/mysql 

service mysql start 

Potem udało mi się wrócić do moich baz danych i skonfigurować je ponownie po nuked ich pierwszy obejść.

+1

To jest ten, który zrobił to dla mnie. mysql_install_db nie było wystarczające, ale rozwiązało to dla mnie. Dzięki. – swinefish

0

Na CentOS EL 6 i być może na wcześniejszych wersjach istnieje jeden sposób na wejście w ten sam bałagan.

Zainstaluj CentOS EL6 przy minimalnym montażu. Na przykład kiedyś kickstart, aby zainstalować następujące:

%packages 
@core 
acpid 
bison 
cmake 
dhcp-common 
flex 
gcc 
gcc-c++ 
git 
libaio-devel 
make 
man 
ncurses-devel 
perl 
ntp 
ntpdate 
pciutils 
tar 
tcpdump 
wget 
%end 

Przekonasz się, że jeden z zależnościami powyższej liście jest mysql-libs. Okazało się, że mój system ma domyślnie my.cnf w /etc a ten zawiera:

[mysqld] 
dataddir=/var/lib/mysql 
socket=/var/lib/mysql/mysql.sock 
user=mysql 
# Disabling symbolic-links is recommended to prevent assorted security risks 
symbolic-links=0 

[mysqld_safe] 
log-error=/var/log/mysqld.log 
pid-file=/var/run/mysqld/mysqld.pid 

Kiedy budować od Generic Linux (Architecture Independent), Compressed TAR Archive domyślnym katalogu danych jest /usr/local/mysql/data sposób sprzeczny z /etc/my.cnf już obecne który definiuje datadir=/var/lib/mysql. Również pid-file zdefiniowany w tym samym pliku nie ma uprawnień, aby użytkownik/grupa mysql zapisywał do niego w /var/run/mysqld.

Szybki środek zaradczy to mv /etc/my.cnf /etc/my.cnf.old, który powinien uruchomić ogólną procedurę źródłową.

Oczywiście doświadczenie różni się od użycia RPM-ów.

49

Po chown i chgrp „ing /var/lib/mysql za odpowiedź przez @Bad Programmer, można również wykonać następujące polecenie:

sudo mysql_install_db --user=mysql --ldata=/var/lib/mysql 

Następnie uruchom ponownie mysqld.

+0

To może być wyjątkowo głupie pytanie, ale zdefiniuj "do"? Pytam, ponieważ '#' sugeruje mi, że jest to skomentowana linia w jakimś pliku konfiguracyjnym, a nie polecenie, które należy wprowadzić do terminala. Czy to źle? – Michael

+2

'' # '' wskazuje, aby uruchomić polecenie jako root (# to tradycyjny znak zachęty użytkownika root, a $ dla nieuprzywilejowanych użytkowników). – bk0

+0

./bin/mysqld: Za dużo argumentów (pierwszym dodatkiem jest "--user = mysql"). – deathangel908

0

Wystąpił ten sam problem podczas próby uruchomienia serwera i zastosowania rozwiązania "sprawdzonego". Ale nadal miałem problem. Problem polegał na tym, że mój plik /etc/my.cnf nie wskazywał mojego wyznaczonego datadiru zdefiniowanego podczas wykonywania mysql_install_db z --datadir zdefiniowanym. Kiedy to zaktualizowałem, serwer uruchomił się poprawnie.

3

Jeśli przenosisz swój datadir, nie tylko musisz nadawać nowe uprawnienia do danych, ale musisz upewnić się, że wszystkie katalogi nadrzędne mają uprawnienia.

Poruszyłem datadir na dysk twardy zamontowany w Ubuntu jako:

/media/*user*/Data/ 

i mój datadir był Bazy.

musiałem ustawić uprawnienia do 771 dla każdego z mediów, użytkownikowi i katalogi danych:

sudo chmod 771 *DIR* 

Jeśli to nie zadziała, inny sposób można uzyskać mysql do pracy jest zmienić użytkownikowi /etc/mysql/my.cnf do roota; chociaż nie ma wątpliwości, że niektóre problemy z tym związane są z perspektywy bezpieczeństwa.

+1

Dzięki za udostępnienie, 'chmod 771' zrobił lewę! – flocki

11
mysql_install_db –-user=mysql –ldata=/var/lib/mysql 

pracował dla mnie w Centosu 7

+2

Jeśli to możliwe, uważam to za znacznie lepsze rozwiązanie niż całkowite odinstalowanie i ponowne zainstalowanie serwera bazy danych, tak jak sugerują inne odpowiedzi. – Jestep

+0

Rozwiązałem mój problem, a właściwie to polecenie powinno być uruchomione w katalogu mysql jako: ./scripts/mysql_install_db --user = mysql -ldata =/var/lib/mysql – CobraBJ

-3

Mój przypadek na Ubuntu 14.04.2 LTS był podobny do innych z my.cnf, ale dla mnie przyczyną był ~/.my.cnf że było resztki z poprzedniej instalacji. Po usunięciu tego pliku i wyczyszczeniu/ponownym zainstalowaniu mysql-server działało dobrze.

10

zainicjować mysql przed uruchomieniem w oknach.

mysqld --initialize 
+1

'[ERROR] - w toititize określone, ale katalog danych ma pliki w nim. Przerywanie. " –

+0

@giannischristofakis Jeśli jest to zupełnie nowa instalacja - brak aktualnej bazy danych z cennymi danymi, po prostu usuń zawartość katalogu danych i ponownie uruchom polecenie. (2 lata później.) – froggythefrog

5

Kiedy wersja do pobrania mysql zip, jeśli uruchomić mysqld bezpośrednio, dostaniesz ten błąd: 2016-02-18T07: 23: 48.318481Z 0 [Błąd] Błąd krytyczny: Nie można otworzyć zamek i przywilej tabelach: Tabela 'mysql.user' nie istnieje 2016-02-18T07: 23: 48.319482Z 0 [ERROR] Przerywanie

Musisz uruchomić poniżej komendy pierwszy: mysqld --initialize

Producent upewnij się, że twój folder danych jest pusty przed tym poleceniem.

2

Tylko ta komenda jest wystarczająco dużo do zrobienia magię na CentOS 6.6

mysql_install_db

34

miałem ten problem na Arch Linux, jak również. Problem polegał na tym, że pacman zainstalował pakiet w innym miejscu, niż oczekiwał MySQL. Udało mi się rozwiązać ten problem:

sudo mysql_install_db --user=mysql --basedir=/usr/ --ldata=/var/lib/mysql/ 

Mam nadzieję, że to pomoże komuś!

+0

Dzięki! Naprawdę użyteczne! Działa również w manjaro i mariadb. –

+0

Nawet nie znam tego polecenia, działa ono z mariadbem i aktualnym systemem Debiana – normic

3

właśnie spotkał ten sam problem z MySQL 5.7 na OSX:

rm -rf {datadir} 
mysqld --initialize --datadir {datadir} 
mysqld --datadir {datadir} 
0

Jeśli masz serwer, który używany do szczęśliwie uruchomić MySQL, ale teraz daje ten błąd, wówczas odinstalować i ponownie zainstalować MySQL to przesada.

W moim przypadku serwer zmarł i zabrał ze sobą kilka bloków dyskowych. Wpłynęło to na kilka plików, w tym /var/lib/mysql/mysql/host.frm i /var/lib/mysql/mysql/proc.frm

Na szczęście mogłem skopiować je z innego serwera, a to mnie przeszły ten błąd tabeli.

0

Wystąpił podobny błąd w overlayfs (overlay2), który jest domyślny w Docker dla komputerów Mac. Błąd występuje podczas uruchamiania mysql na obrazie, po utworzeniu obrazu za pomocą mysql.

2017-11-15T06:44:22.141481Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table storage engine for 'user' doesn't have this option 

Przejście na "aufs" rozwiązało problem. (W Docker dla komputerów Mac, "daemon.json" można edytować, wybierając menu "Preferencje ..." i wybierając zakładkę "Daemon", i wybierając zakładkę "Zaawansowane".)

/etc/docker/daemon.json:

{ 
    "storage-driver" : "aufs", 
    "debug" : true, 
    "experimental" : true 
} 

Ref:

https://github.com/moby/moby/issues/35503

https://qiita.com/Hige-Moja/items/7b1208f16997e2aa9028

Powiązane problemy