2012-01-31 196 views
54

我在一個已經重新安裝在RHEL 5上的服務器上。我能夠安裝Apache和PHP就好了。但我在安裝MySQL時遇到了嚴重的麻煩。我嘗試了以下方法:致命錯誤:無法打開和鎖定權限表:表'mysql.host'不存在

yum install mysql-server mysql 

並沒有得到任何錯誤或衝突。然後我試圖啓動mysql用下面的命令:

chkconfig --levels 235 mysqld on 
service mysqld start 

並獲得Timeout error occurred trying to start MySQL Daemon.

我檢查我的日誌,看看這個錯誤:

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

我不知道從哪裏去這裏。

僅供參考我正在使用RHEL 5並安裝了最新版本的PHP 5和Apache。

+0

所以我在尋找MySQL網站,看到此錯誤消息彈出他們的疑難解答在Windows系統上安裝MySQL:http://dev.mysql.com/doc/refman/5.0/en/windows-troubleshooting.html 好吧,這可能是一個基於Unix系統相同的問題好吧,所以我想我需要弄清楚默認的位置是什麼,以及它的實際安裝位​​置。 「 」這些消息通常發生在MySQL基本或數據目錄安裝在默認位置以外的不同位置時「 – 2012-01-31 16:50:35

+0

對於osx和mysql 5.7,請參考http://stackoverflow.com/a/37668663/334999 – Shuo 2016-06-07 00:13:46

回答

58
  1. 使用yum remove mysql*

  2. 遞歸刪除/usr/bin/mysql/var/lib/mysql

  3. 刪除文件/etc/my.cnf.rmp

  4. 使用ps -e檢查流程,以確保mysql的卸載MySQL是不是還在運行。

  5. 重新啓動服務器reboot

  6. 運行yum install mysql-server。這似乎也安裝mysql客戶端作爲依賴。

  7. 給mysql的所有權和組priveleges有:

    chown -R mysql /var/lib/mysql

    chgrp -R mysql /var/lib/mysql

  8. 使用service mysqld start啓動MySQL守護進程。

+5

我認爲改變團隊和所有權是至關重要的部分。看起來,當mysql啓動時它會自動創建mysql.sock文件,但如果它沒有系統權限,它不能這樣做。 – 2012-02-02 21:21:54

+1

我不知道SELinux權限是否也可能涉及?銷燬整個事物可能會讓relabeling守護進程使用正確的標籤標記新文件。 – sarnold 2012-02-21 23:55:36

+1

我已經重現了這個錯誤,單獨的'chgrp'語句足以解決它。 – 2014-03-11 19:54:48

10

我的問題的根源似乎是selinux,它在操作系統安裝時自動打開(執行) 。

我想我的MySQL在/數據。

驗證後,我的。CNF有:

datadir=/data/mysql 

(和離開插座位於/ var/lib中/ MySQL的) 我執行的命令來關閉selinux的用於mysqld的 (另一種方法是完全關閉它):

setsebool -P mysqld_disable_trans=1 

我跑以下命令:

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

我開始MySQL守護程序和所有的工作之後的罰款。

0

在我的情況MySQL數據文件夾的路徑有一個特殊的字符「C」,它讓我得到...

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

我已刪除了所有特殊字符和一切正常。

2

至於我自己,我不得不這樣做:

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 

然後我就能夠重新訪問自己的數據庫,並再次對其進行配置後,我核爆他們首次面世。

+1

這是爲我做的。 mysql_install_db是不夠的,但這解決了我。謝謝。 – swinefish 2016-11-29 08:02:15

0

在CentOS EL 6上,也許在早期版本中,有一種方法可以進入這個相同的混亂。

以最小的安裝安裝CentOS EL6。例如,我使用的kickstart安裝以下:

%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 

你會發現,上面的列表中的某一個依賴是mysql-libs。我發現我的系統在/etc默認my.cnf,這包括:

[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 

當您從您的Generic Linux (Architecture Independent), Compressed TAR Archive默認數據目錄建立是/usr/local/mysql/data這與/etc/my.cnf已經存在,它定義datadir=/var/lib/mysql衝突。在同一個文件中定義的pid-file也沒有mysql123用戶/組寫入/var/run/mysqld的權限。

一個快速補救措施是mv /etc/my.cnf /etc/my.cnf.old應該讓你的通用源程序工作。

當然,使用源代碼RPM的體驗是不同的。

49

chownchgrp「由荷蘭國際集團@Bad Programmer/var/lib/mysql答案之後,您可能還需要執行以下命令:

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

然後重新啓動mysqld

+0

這可能是一個極端愚蠢的問題,但是定義「做」?我問,因爲'#'表示這是一個配置文件中的註釋行,而不是輸入終端的命令。那是錯的嗎? – Michael 2015-05-15 00:34:04

+2

''#''表示以root身份運行該命令(#是傳統的root用戶shell提示符,而$是非特權用戶)。 – bk0 2015-05-15 22:51:20

+0

./bin/mysqld:太多參數(第一個額外的是'--user = mysql')。 – deathangel908 2015-12-26 12:43:50

0

我在嘗試啓動服務器時遇到了同樣的問題,並遵循「已檢查」的解決方案。 但仍有問題。問題在於我的/etc/my.cnf文件沒有指向我的 指定的datadir,這是我在執行mysql_install_db時定義的--datadir定義的。一旦我更新了這個,服務器啓動正確。

3

如果你移動你的datadir,你不僅需要賦予新的datadir權限,但你需要確保所有父目錄都有權限。

我搬到我的datadir到硬盤驅動器,安裝在Ubuntu爲:

/media/*user*/Data/ 

和我DATADIR是數據庫

我不得不權限設置爲771到每個媒體,用戶和Data目錄:

sudo chmod 771 *DIR* 

如果這也不行,另一種方式則可以讓MySQL工作是改變用戶/etc/mysql/my.cnf爲root;儘管從安全的角度來看,無疑存在一些問題。

+1

感謝分享,'chmod 771'完成了任務! – flocki 2015-11-28 23:55:27

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

CentOS中爲我工作7

+2

如果適用,我發現這是一個好得多的解決方案,比完全卸載並重新安裝數據庫服務器,就像其他答案提示的那樣。 – Jestep 2015-08-04 14:51:59

+0

解決了我的問題,實際上這個命令應該在mysql目錄下運行:./scripts/mysql_install_db --user = mysql -ldata =/var/lib/mysql – CobraBJ 2015-11-24 03:04:34

-3

我在Ubuntu 14.04.2 LTS情況是相似的其他人與my.cnf中,但對我的事業是〜/ .my.cnf這是剩從以前的安裝。刪除該文件並清除/重新安裝MySQL服務器後,它工作正常。

10

在windows上啓動之前初始化mysql。

mysqld --initialize 
+1

'[ERROR] --initialize specified但data目錄有文件在裏面。正在中止。# – 2016-03-23 15:35:36

+0

@giannischristofakis如果這是一個全新的安裝 - 沒有實際的數據庫與寶貴的數據,只需刪除數據目錄的內容,並重新發出命令。 (2年後) – froggythefrog 2017-08-06 23:13:03

5

當下載MySQL的壓縮版本,如果直接運行的mysqld,你會得到這樣的錯誤: 2016-02-18T07:23:48.318481Z 0 [錯誤]致命錯誤:無法打開和鎖定特權表:表 'mysql.user' 不存在 2016-02-18T07:23:48.319482Z 0 [錯誤]中止

您有以下命令首先運行: 的mysqld --initialize

製作確保您的數據文件夾在此命令之前爲空。

2

就在這個命令,足足可以做在CentOS 6.6

mysql_install_db的

34

魔術我對Arch Linux的這個問題爲好。問題是pacman在不同於MySQL期望的位置安裝了該軟件包。我能夠解決這個問題:

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

希望這可以幫助別人!

+0

謝謝!真的有用!它也適用於manjaro和mariadb。 – 2016-12-11 19:31:11

+0

我甚至不知道這個命令,它確實與mariadb和當前的Debian系統一起工作 – normic 2017-03-07 01:45:15

3

我只是與MySQL 5.7遇到了同樣的問題上OSX:

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

如果您有用於愉快地運行MySQL服務器,但現在給這個錯誤,然後卸載和MySQL的重新安裝是過度殺傷。

在我的情況下,服務器死了,並採取了幾個磁盤塊。這影響了一些文件,包括/var/lib/mysql/mysql/host.frm和/var/lib/mysql/mysql/proc.frm

幸運的是,我可以從另一臺服務器複製這些文件,過去那個表錯誤。

0

我在Docker for Mac上默認的overlayfs(overlay2)上遇到了類似的錯誤。 在使用mysql創建映像後,在映像上啓動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 

切換到「aufs」解決了這個問題。 (在Docker for Mac上,可以通過選擇「首選項...」菜單並選擇「守護程序」選項卡並選擇「高級」選項卡來編輯「daemon.json」。)

/etc/docker/daemon.json:

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

編號:

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

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

相關問題