MySQL 預設僅允許本地連線,若需從其他機器遠程訪問,需修改綁定位址並授權遠程用戶。本文以 Ubuntu + MySQL 5 為例,說明完整開啟流程。
bind-address編輯配置檔 /etc/mysql/my.cnf(或 /etc/mysql/mysql.conf.d/mysqld.cnf),找到 [mysqld] 區段,將 bind-address 設為伺服器實際 IP(而非 127.0.0.1):
[mysqld]
# 基本設定
default-character-set=utf8
default-storage-engine=INNODB
# 關鍵:改為本機真實 IP,例如 192.168.1.107
bind-address = 192.168.1.107
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-external-locking
修改後重啟服務:sudo systemctl restart mysql(或 service mysql restart)。
以 root 登入 MySQL:
mysql -u root -p
執行授權指令(請替換資料庫名、用戶名、密碼):
-- 授權所有權限給 sonar 用戶,允許任意主機(%)連線
GRANT ALL ON sonardb.* TO 'sonar'@'%' IDENTIFIED BY '123456';
-- 同時授權本地連線(可選)
GRANT ALL ON sonardb.* TO 'sonar'@'localhost' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
sonardb:目標資料庫名,* 表示所有表sonar:自訂用戶名123456:密碼,請改為強密碼% 通配符代表任意 IP在客戶端機器執行:
mysql -h 192.168.1.107 -u sonar -p
輸入密碼後若能進入,即代表遠程訪問已開啟。
ufw allow 3306 或雲端安全組放行)。Host 'x.x.x.x' is not allowed,請檢查 mysql.user 表中該用戶的 Host 欄位是否為 % 或對應客戶端 IP。%,改為具體應用伺服器 IP 段。