官方提供的 MySQL RPM 包僅支援 root 用戶安裝,且不支持目錄重定向(relocate)。若需自定義安裝路徑,建議採用原始碼編譯安裝方式。本文記錄從原始碼編譯、初始化數據目錄、啟動服務到配置遠程訪問權限的完整流程。
./configure --prefix=/home/chenlei/usr/MySQL
指定安裝前綴為 /home/chenlei/usr/MySQL,後續所有文件將部署在該目錄下。
./mysql_install_db --defaults-file=../share/MySQL/my-small.cnf --user=chenlei
執行後,在 /home/chenlei/usr/MySQL/var 目錄下生成以下核心文件:
./mysqld_safe --defaults-file=../share/MySQL/my-small.cnf --user=chenlei &
使用 mysqld_safe 腳本安全啟動服務,& 使其在後台運行。
./mysql -uroot
以下示例創建用戶 chenlei,允許從任意主機(%)訪問所有數據庫:
GRANT ALL PRIVILEGES ON *.* TO 'chenlei'@'%' IDENTIFIED BY 'password';
參數解析:
ALL PRIVILEGES:授予所有權限,亦可指定具體權限如 SELECT, INSERT, UPDATE*.*:針對所有數據庫的所有表;db_name.* 針對特定庫;db_name.table_name 針對特定表'chenlei'@'%':用戶名與主機限制,% 表示任意 IP;若限定 IP 則填具體地址如 '192.168.1.100'IDENTIFIED BY 'password':設定用戶密碼FLUSH PRIVILEGES;
MySQL 默認監聽 3306 端口。必須確保服務器防火牆(iptables、firewalld 或雲廠商安全組)未阻擋該端口。若安裝時指定了非默認端口,請相應開放對應端口。
以 root 登錄後,執行授權語句。示例:授權用戶 ted 從 IP 123.123.123.123 訪問 discuz 數據庫:
GRANT ALL PRIVILEGES ON discuz.* TO 'ted'@'123.123.123.123' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
若需允許任意 IP 訪問,將主機部分改為 '%' 即可。
bind-address 配置(需設為 0.0.0.0 或具體內網 IP)、用戶主機匹配規則。FLUSH PRIVILEGES;MySQL 8.0+ 採用動態權限,通常無需刷新,但舊版本必須執行。validate_password.policy 級別。原始碼安裝賦予了部署路徑的完全控制權,配合 --defaults-file 指定配置文件,可實現多實例並行。遠程訪問核心在於「防火牆放行端口」與「用戶主機授權匹配」兩大條件缺一不可。生產環境建議遵循最小權限原則,僅授權必要的數據庫、表與來源 IP,並強制使用強密碼與 SSL 加密連接。