/etc/mysql 權限不允許非超級使用者連接到套接字

/etc/mysql 權限不允許非超級使用者連接到套接字

我們在 Vagrant 下運行 Ubuntu 伺服器 13.10,並且遇到了一個有趣的問題。

我們正在覆蓋 conf.d/my.cnf 中的套接字位置

[client]
port                           = 3306
socket                         = /tmp/mysql.sock


[mysqld_safe]
socket                         = /tmp/mysql.sock

[mysqld]
user                           = mysql
pid-file                       = /var/run/mysqld/mysql.pid
socket                         = /tmp/mysql.sock
port                           = 3306
datadir                        = /var/lib/mysql
bind-address                   = 0.0.0.0

到目前為止,一切都很好。啟動伺服器,實際上有一個套接字在 /tmp 中監聽。

但是,只有超級用戶才能訪問它!

作為非超級用戶,mysql -u root -pXXXX 收到以下錯誤:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

客戶端嘗試連接錯誤的套接字。

我們假設問題是我們的非特權用戶無法存取conf檔來找到正確的套接字,事實上,將/etc/mysql上的權限更改為0755可以解決這個問題,但看起來並不像正確的修復。

順便說一句,在12.04 上,這種行為是相同的,但被以下事實所掩蓋:當mysql 啟動時,它會在/tmp 處創建套接字,但也會在/var/run/mysqld 下創建一個符號鏈接,因此當客戶端嘗試要連接,它會找到預設套接字。

在兩台機器上,mysql 版本都是 5.5.37。

答案1

根據您的特定配置,以下可能足以解決您的連線問題。

你可以用 --socket=/tmp/mysql.sock 啟動 mysql

來自MySQL手冊

--socket=path, -S path

對於到 localhost 的連接,要使用的 Unix 套接字文件,或在 Windows 上,要使用的命名管道的名稱。

為了儲存該設定而不讓使用者讀取整個 mysql 配置,您可以更改 ~/.my.cnf 檔案的設定

選項文件欲了解詳情

在您的情況下,您可以將 socket=/tmp/mysql.sock 新增到此文件中。

答案2

我剛剛查看了 Ubuntu 14.04 的全新安裝,/etc/mysql 的預設權限是 755。

相關內容