MySQL - 解決root用戶下仍然出現權限問題-沒法建庫

關鍵詞(Key Words)

  • ERROR 1006 (HY000): Can't create database
  • Starting MySQL. The server quit without updating PID file
  • MySQL 數據庫目錄權限問題

開發環境

  • 系 統:CentOS Linux release 7.5.1804 (Core)
  • MySQL版本:MySQL 5.6

問題場景描述

在某次操做中,我做死用 find 和 chown 命令行修改文件/文件夾的權限和全部者,後來簡單粗暴地把 www 文件夾的權限改回755[1],把文件的權限改成644;全部者所有改成root,就在這個時候,一個隱形的大地雷就被我親手埋下了。。mysql

當我次日再數據庫中創建一個新的數據庫的時候,我發現,不管我是使用數據庫的普通用戶,仍是使用 root 用戶登陸,他都好像開玩笑地告訴我:sql

ERROR 1006 (HY000): Can't create databaseshell

我立馬以爲這不對勁,必定是本身埋下的深坑。。我把 ERROR 複製到搜索引擎上一搜索,發現大多數說的是權限,因而想起本身幹起的好事,就開始尋找起恢復默認權限的方法(惋惜沒有備份),這折騰着折騰着我重啓了 mysqld 服務,而且使人驚訝的是,shutdown OK,Start failed,又報了一個錯誤:數據庫

Starting MySQL.The server quit without updating PID filevim

[捂臉][捂臉] 我就開始找 MySQL 的日誌,發現沒有報錯,而且接下來的每次重啓都沒有記錄在日誌中,bash

這讓我有種剛掉一個坑還沒出來,發現不當心又掉進另一個坑的感受。。測試

可是還好堅持了一個上午,直到下午才發現,原來是同一個問題的致使的:MySQL數據目錄可能存在權限問題。在你看完解決方案以後,也許你也就明白了。ui

解決方案

  1. 打開/etc/my.cnf

    [mysqld] 中找到兩個信息:搜索引擎

    1. datadir —— 這是你的數據庫存取數據的地方 , 例如個人是 datadir = /www/server/data/www/server/data 就是個人數據目錄;spa

    2. log-bin —— 這是存在日誌的地方,不過有可能只看到 log-bin=mysql-bin ,這裏默認沒有修改的話,mysql-bin 是在上面的 datadir

  2. 先看錯誤日誌

    打開到你的 datadir 文件夾位置 , 有一個 ***.err 的文件,這是 MySQL 的一個錯誤日誌,你可使用 vim 打開查看是否有什麼錯誤的信息;

下面是關鍵的兩步,也是致使出現上面兩個問題的緣由:

  • MySQL每次開始服務的時候要先在 DATADIR 中建立一個 ****.pid 文件,關閉服務的時候就會刪除它;由於上次這裏面整個文件夾(包括文件夾中的內容)的全部者被我不當心修改成root了,所以 MySQL 沒有權限往其中新建一個 ****.pid 文件 ,所以報了第二個的錯誤;
  • 另外,爲何我一開始能夠登錄 MySQL ,卻在root用戶的時候竟然沒法進行新建數據庫的操做呢?我猜測多是由於,我以前的文件夾的權限是755,文件的是644的緣由;也就是用戶組和公共組均可以讀取,但沒法寫入,因此纔會報第一個錯誤!
  1. 修改的 datadir 的全部者

    $ sudo chown -R mysql:mysql YOUR_DATADIR
    複製代碼

    **注意:**記得把 YOUR_DATADIR 就是咱們剛纔找到 datadir

  2. 修改 datadir 裏面文件以及文件夾的權限:

    建議數據庫數據目錄的權限爲 700 ,文件的爲660

  • 文件夾權限修改成700 :

    $ sudo find YOUR_DATADIR -type d -exec chmod 700 {} \;
    複製代碼
  • 文件權限修改成660 :

    $ sudo find YOUR_DATADIR -type f -exec chmod 660 {} \;
    複製代碼
  1. 重啓MySQL服務

    到這裏,咱們就能夠從新再試試

    $ sudo /etc/init.d/mysqld restart
    複製代碼

    若是出現 [OK] ,就快大功告成啦!!

  2. 從新登錄 MySQL

    mysql > create database 57EN;
    Query OK, 1 row affected
    Time: 0.001s
    複製代碼

終於跳出坑啦,雖然折騰了這麼久,可是這讓我對 MySQL 有了更深的認識,從以前只知道如何使用 MySQL,到如今明白原來數據庫從服務開始它建立一個.pid 文件(MySQL 服務的進程),原來它存放的數據和日誌都在它的 DATADIR 中。我想接下來有必要深刻了解的日誌,遇到問題時,能夠透過日誌去發現問題,解決問題。

[1] 文件夾權限 755:

在 Linux 系統中,關於文件/文件夾權限,有三類操做對象(全部者、用戶組、公共組)各自有3個權限(讀、寫、執行),Linux 系統但願經過如下數字規則就能快速知道三類操做對象的對應的權限。

權限與對應的數字表達

其中,4表明讀取的權限,2表明寫入的權限,1表明執行的權限;

7=4+2+1

同一操做對象的權限的數字相加,例如:

755 的權限表明,全部者的權限有讀寫、執行;用戶組的權限有讀取、執行;公共組的權限有讀取、執行。

親身測試有效解決方案,有什麼問題歡迎你留言交流。

—— 57EN寫於 2018年12月26日

相關文章
相關標籤/搜索