mysql root 无法建立数据库_MySQL - 在root用户下你跟我说无法建表!?
問題場景描述
在某次操作中,我作死用 find 和 chown 命令行修改文件/文件夾的權(quán)限和所有者,后來簡單粗暴地把 www 文件夾的權(quán)限改回755[1],把文件的權(quán)限改為644;所有者全部改為root,就在這個時候,一個隱形的大地雷就被我親手埋下了。。
當我第二天再數(shù)據(jù)庫中建立一個新的數(shù)據(jù)庫的時候,我發(fā)現(xiàn),無論我是使用數(shù)據(jù)庫的普通用戶,還是使用 root 用戶登錄,他都好像開玩笑地告訴我:
ERROR 1006 (HY000): Can't create database
我立馬覺得這不對勁,一定是自己埋下的深坑。。我把 ERROR 復制到搜索引擎上一搜索,發(fā)現(xiàn)大多數(shù)說的是權(quán)限,于是想起自己干起的好事,就開始尋找起恢復默認權(quán)限的方法(可惜沒有備份),這折騰著折騰著我重啟了 mysqld 服務(wù),并且令人驚訝的是,shutdown OK,Start failed,又報了一個錯誤:
Starting MySQL.The server quit without updating PID file
[捂臉][捂臉] 我就開始找 MySQL 的日志,發(fā)現(xiàn)沒有報錯,并且接下來的每次重啟都沒有記錄在日志中,
這讓我有種剛掉一個坑還沒出來,發(fā)現(xiàn)不小心又掉進另外一個坑的感覺。。
但是還好堅持了一個上午,直到下午才發(fā)現(xiàn),原來是同一個問題的導致的:MySQL數(shù)據(jù)目錄可能存在權(quán)限問題。在你看完解決方案之后,也許你也就明白了。
關(guān)鍵詞(Key Words)
ERROR 1006 (HY000): Can't create database
Starting MySQL. The server quit without updating PID file
MySQL 數(shù)據(jù)庫目錄權(quán)限問題
開發(fā)環(huán)境
系 統(tǒng):CentOS Linux release 7.5.1804 (Core)
MySQL版本:MySQL 5.6
解決方案
打開/etc/my.cnf
在 [mysqld] 中找到兩個信息:
datadir —— 這是你的數(shù)據(jù)庫存取數(shù)據(jù)的地方 , 例如我的是 datadir = /www/server/data ,/www/server/data 就是我的數(shù)據(jù)目錄;
log-bin —— 這是存在日志的地方,不過有可能只看到 log-bin=mysql-bin ,這里默認沒有修改的話,mysql-bin 是在上面的 datadir 。
先看錯誤日志
打開到你的 datadir 文件夾位置 , 有一個 ***.err 的文件,這是 MySQL 的一個錯誤日志,你可以使用 vim 打開查看是否有什么錯誤的信息;
下面是關(guān)鍵的兩步,也是導致出現(xiàn)上面兩個問題的原因:
MySQL每次開始服務(wù)的時候要先在 DATADIR 中創(chuàng)建一個 ****.pid 文件,關(guān)閉服務(wù)的時候就會刪除它;因為上次這里面整個文件夾(包括文件夾中的內(nèi)容)的所有者被我不小心修改為root了,因此 MySQL 沒有權(quán)限往其中新建一個 ****.pid 文件 ,因此報了第二個的錯誤;
另外,為什么我一開始可以登陸 MySQL ,卻在root用戶的時候居然無法進行新建數(shù)據(jù)庫的操作呢?我猜想可能是因為,我之前的文件夾的權(quán)限是755,文件的是644的原因;也就是用戶組和公共組都可以讀取,但無法寫入,所以才會報第一個錯誤!
修改的 datadir 的所有者
$ sudo chown -R mysql:mysql YOUR_DATADIR
注意:記得把 YOUR_DATADIR 就是我們剛才找到 datadir
修改 datadir 里面文件以及文件夾的權(quán)限:
建議數(shù)據(jù)庫數(shù)據(jù)目錄的權(quán)限為 700 ,文件的為660
文件夾權(quán)限修改為700 :
$ sudo find YOUR_DATADIR -type d -exec chmod 700 {} \;
文件權(quán)限修改為660 :
$ sudo find YOUR_DATADIR -type f -exec chmod 660 {} \;
重啟MySQL服務(wù)
到這里,我們就可以重新再試試
$ sudo /etc/init.d/mysqld restart
如果出現(xiàn) [OK] ,就快大功告成啦!!
重新登陸 MySQL
mysql > create database 57EN;
Query OK, 1 row affected
Time: 0.001s
終于跳出坑啦,雖然折騰了這么久,但是這讓我對 MySQL 有了更深的認識,從之前只知道如何使用 MySQL,到現(xiàn)在明白原來數(shù)據(jù)庫從服務(wù)開始它創(chuàng)建一個.pid 文件(MySQL 服務(wù)的進程),原來它存放的數(shù)據(jù)和日志都在它的 DATADIR 中。我想接下來有必要深入了解的日志,遇到問題時,可以透過日志去發(fā)現(xiàn)問題,解決問題。
[1] 文件夾權(quán)限 755:
在 Linux 系統(tǒng)中,關(guān)于文件/文件夾權(quán)限,有三類操作對象(所有者、用戶組、公共組)各自有3個權(quán)限(讀、寫、執(zhí)行),Linux 系統(tǒng)希望通過以下數(shù)字規(guī)則就能快速知道三類操作對象的對應(yīng)的權(quán)限。
權(quán)限與對應(yīng)的數(shù)字表達
其中,4代表讀取的權(quán)限,2代表寫入的權(quán)限,1代表執(zhí)行的權(quán)限;
7=4+2+1
同一操作對象的權(quán)限的數(shù)字相加,例如:
755 的權(quán)限代表,所有者的權(quán)限有讀寫、執(zhí)行;用戶組的權(quán)限有讀取、執(zhí)行;公共組的權(quán)限有讀取、執(zhí)行。
親身測試有效解決方案,有什么問題歡迎你留言交流。
—— 57EN寫于 2018年12月26日
總結(jié)
以上是生活随笔為你收集整理的mysql root 无法建立数据库_MySQL - 在root用户下你跟我说无法建表!?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7 php mysql扩展名_wi
- 下一篇: 电脑ping不通 plsql能连上_台式