Mysql

mysqld 啟動/初始化權限被取消 - 無法連接

  • December 9, 2016

預裝在我的 linux 系統上的 MariaDB 伺服器(5.5.35?)壞了,而不是嘗試修復它(#1 它已過時,#2 我可能會在此過程中破壞系統,因為它是預安裝的) ,我下載了 MySQL 5.7.16(.tar.gz 版本,原因見 #2)。然後我更改了數據文件夾、日誌文件夾等以擺脫 MariaDB 並將它們放在我自己的 my.cnf 文件中。還在我的主文件夾中創建了一個名為“/usr/local/mysql”的符號連結到我的實際 MySQL 安裝。

我在mysqldmysql使用者(MariaDB 附帶)的身份配置/執行時遇到問題,但它可以以root身份執行(是的,我知道安全風險,但伺服器僅用於測試)。

創建一些用於寫入的文件似乎有問題。以下是mysqld使用mysql使用者和個人 my.conf 執行的:

   2016-12-05T17:22:26.420468Z 0 [ERROR] InnoDB: Cannot open '/home/me/Downloads/mysql-5.7.16-linux-glibc2.5-x86_64/data//ib_buffer_pool' for reading: Permission denied

   miscellaneous failures/server shutdown as a result

   ...

   2016-12-05T17:22:26.729869Z 0 [ERROR] InnoDB: Cannot open '/home/me/Downloads/mysql-5.7.16-linux-glibc2.5-x86_64/data//ib_buffer_pool.incomplete' for writing: Permission denied

初始化數據庫給出了相同的錯誤,但使用’data/mysql/db.MYI’而不是data/ib_pool。

以下是 mysql 的文件所有權(我沒有提供文件權限以防不相關):

  • datamysql-files之外的所有文件夾:我的家庭使用者
  • 數據mysql文件mysql

組與所有者相同。

更新:更改 /usr/local/mysql 權限讓我初始化/啟動伺服器,但是當我刪除 /usr/local/mysql 連結時,我仍然無法在任何使用者上連接到它(即使 root@localhost 被拒絕訪問)並將所有路徑重定向到我的主目錄,問題又回來了。

有人可以幫我使用除root之外的其他使用者嗎?

好吧,我沒有使用 gdb,但這是我發現的:

  • 主文件夾中沒有組/其他權限 =============

在配置我的系統以便我可以逐步按照 MySQL 手冊的說明進行操作後,我注意到我的主目錄沒有組/世界權限。即使我通過符號連結執行mysqld,我認為主文件夾權限阻止它打開/創建/讀取/寫入文件(儘管不確定為什麼只有某些文件)。

解決方案:我將 MySQL 安裝移動到 /usr/local/mysql。沒有符號連結,主文件夾中沒有資源,什麼都沒有。此時您將能夠初始化/啟動伺服器。

順便說一句,我剛剛在手冊中註意到了這一點(我將重要部分加粗):

初始化數據目錄後,您可以建立最終的安裝所有權設置。要離開 mysql 擁有的安裝,這裡不需要任何操作。否則,如果您願意,**大多數 MySQL 安裝都可以由 root 擁有。**例外是數據目錄和mysql-files目錄必須為mysql所有。

  • 密碼不明!?! =======

伺服器啟動後,我嘗試以 root 身份連接,使用初始化期間獲得的(過期的)臨時密碼,失敗並顯示“拒絕訪問”。

然後我嘗試在沒有密碼的情況下連接,同樣的錯誤。

我什至在一個文件中寫了這個命令(用你的新密碼替換’MyNewPass’):

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

並像這樣執行mysqld(當然,使用真實路徑):

# mysqld --init-file=/path/to/mysql-init-command &

也沒有重置密碼。

解決方案:通過將此命令放入文件中直接修改使用者表(同樣,用您的新密碼替換“MyNewPass”):

UPDATE mysql.user
   SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'
   WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

然後重新啟動伺服器,這次指定相同的初始化命令(即使用–init-file=/path/to/mysql-init-command)。然後使用新密碼登錄。像魅力一樣工作 - 在 MySQL Workbench 中對其進行了測試。

更多資訊可以在這裡找到。

這還不是全部:我發現我的 MariaDB 包被“損壞”了,因為我沒有登錄密碼!所以我必須使用上面的解決方案重置它。

$$ So much for ‘Securing the initial MySQL Accounts’, Oracle. >:( $$,但我仍然使用 MySQL,因為我對 MariaDB 的不可下載文件有不良記錄。那裡。用一塊石頭殺死了兩隻鳥。 底線:在使用預安裝的數據庫伺服器之前重置密碼(除非您有奢侈在安裝時指定它,如 Windows)。

看起來您的實際數據/* 的權限是正確的:mysql:mysql,但是如果您通過自己使用者的 $HOME 中的符號連結訪問它,那麼導致符號連結的權限可能是阻止 mysql 的原因從訪問符號連結路徑。

給 mysql 自己的 $HOME 怎麼樣,比如 /home/mysql/{etc,data} (chown mysql:mysql) 並將其配置和數據文件放在其中。如果您需要以您自己的使用者身份訪問 mysql 的配置或數據,您可以隨時將您的使用者添加到 mysql 組。

引用自:https://dba.stackexchange.com/questions/157244