
我們在 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
答案2
我剛剛查看了 Ubuntu 14.04 的全新安裝,/etc/mysql 的預設權限是 755。