簡體   English   中英

致命錯誤:無法打開和鎖定權限表:表 'mysql.host' 不存在

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

我在一台在 RHEL 5 上重新安裝的服務器上。我能夠很好地安裝 Apache 和 PHP。但是我的 MySQL 安裝遇到了嚴重的問題。 我嘗試了以下方法:

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。

根據@Bad Programmer的回答chownchgrp 'ing /var/lib/mysql之后,您可能還必須執行以下命令:

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

然后重啟你的mysqld

  1. 使用yum remove mysql*卸載 mysql

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

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

  4. 使用ps -e檢查進程以確保 mysql 未仍在運行。

  5. 與重啟服務器reboot

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

  7. 授予 mysql 所有權和組特權:

    chown -R mysql /var/lib/mysql

    chgrp -R mysql /var/lib/mysql

  8. 使用service mysqld start啟動 MySQL Daemon。

我在 arch linux 上也有這個問題。 問題是 pacman 將軟件包安裝在與 MySQL 預期不同的位置。 我能夠解決這個問題:

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

希望這可以幫助某人!

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

我希望我的 mysql 在 /data 中。

在驗證 my.cnf 有:

datadir=/data/mysql

(並將套接字留在 /var/lib/mysql)我執行了關閉 mysqld 的 selinux 的命令(另一種方法是將其完全關閉):

setsebool -P mysqld_disable_trans=1

我運行了以下命令:

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

我啟動了 mysql 守護進程,之后一切正常。

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

在 Centos 7 為我工作

在 Windows 上啟動之前初始化 mysql。

mysqld --initialize

下載mysql zip版本時,如果直接運行mysqld,會報錯:2016-02-18T07:23:48.318481Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user'不存在 2016-02-18T07:23:48.319482Z 0 [錯誤] 中止

您必須首先運行以下命令:mysqld --initialize

在執行此命令之前,請確保您的數據文件夾為空。

我剛剛在 OSX 上使用 mysql 5.7 遇到了同樣的問題:

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

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

我將我的 datadir 移動到硬盤驅動器,安裝在 Ubuntu 中:

/media/*user*/Data/

我的 datadir 是Databases

我必須將每個媒體、用戶和數據目錄的權限設置為 771:

sudo chmod 771 *DIR*

如果這不起作用,另一種讓 mysql 工作的方法是將 /etc/mysql/my.cnf 中的用戶更改為 root; 盡管從安全角度來看,這樣做無疑存在一些問題。

對於我自己,我必須這樣做:

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

然后我能夠回到我的數據庫並在我第一次使用它們之后再次配置它們。

僅此命令就足以在 centos 6.6 上施展魔法

mysql_install_db

在我的情況下,MySQL 數據文件夾的路徑有一個特殊字符“ç”,它讓我得到...

致命錯誤:無法打開和鎖定權限表:表 'mysql.host' 不存在。

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

在 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文件沒有 mysql 用戶/組在/var/run/mysqld寫入的權限。

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

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

我在嘗試啟動服務器並遵循“已檢查”解決方案時遇到了同樣的問題。 但是還是有問題。 問題是我的 /etc/my.cnf 文件沒有指向我在定義 --datadir 的情況下執行 mysql_install_db 時定義的指定數據目錄。 一旦我更新了這個,服務器就正確啟動了。

如果您的服務器曾經可以愉快地運行 MySQL,但現在出現此錯誤,那么卸載並重新安裝 MySQL 是多余的。

就我而言,服務器死機並帶走了幾個磁盤塊。 這影響了一些文件,包括 /var/lib/mysql/mysql/host.frm 和 /var/lib/mysql/mysql/proc.frm

幸運的是,我可以從另一台服務器復制這些,這讓我克服了那個表錯誤。

我在overlayfs(overlay2)上遇到了類似的錯誤,這是Docker for Mac的默認設置。 使用 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”可以通過選擇“Preferences...”菜單,然后選擇“Daemon”選項卡,然后選擇“Advanced”選項卡來編輯。)

/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

在 Windows 中,以管理員身份在命令提示符下運行以下命令

Step 1:
mysql_install_db.exe

Step 2:
mysqld --initialize

Step 3:
mysqld --console

Step 4:
In windows

Step 4:
mysqladmin -u root password "XXXXXXX"

Step 5:
mysql -u root -p

Mariadb 數據庫信息

我在 Ubuntu 14.04.2 LTS 上的情況與 my.cnf 上的其他情況類似,但對我而言,原因是之前安裝遺留的 ~/.my.cnf。 刪除該文件並清除/重新安裝 mysql-server 后,它運行良好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM