![](/img/trans.png)
[英]Cannot run mysql after moving data (Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist)
[英]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的回答chown
和chgrp
'ing /var/lib/mysql
之后,您可能還必須執行以下命令:
sudo mysql_install_db --user=mysql --ldata=/var/lib/mysql
然后重啟你的mysqld
。
使用yum remove mysql*
卸載 mysql
遞歸刪除/usr/bin/mysql
和/var/lib/mysql
刪除文件/etc/my.cnf.rmp
使用ps -e
檢查進程以確保 mysql 未仍在運行。
與重啟服務器reboot
運行yum install mysql-server
。 這似乎也將 mysql 客戶端安裝為依賴項。
授予 mysql 所有權和組特權:
chown -R mysql /var/lib/mysql
chgrp -R mysql /var/lib/mysql
使用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
}
參考:
我在 Ubuntu 14.04.2 LTS 上的情況與 my.cnf 上的其他情況類似,但對我而言,原因是之前安裝遺留的 ~/.my.cnf。 刪除該文件並清除/重新安裝 mysql-server 后,它運行良好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.