本文詳細記錄在 UNIX/Linux 環境下從源碼包編譯安裝 MySQL 3.22.25 的全過程,涵蓋依賴準備、配置參數優化、數據目錄初始化、服務啟動、Root 密碼設置等關鍵步驟,並針對首次部署的安全風險給出修補建議。
# 切換至源碼工作目錄
cd /usr/src
# 下載源碼包(示例版本 3.22.25,實際請用官網最新穩定版)
wget https://downloads.mysql.com/archives/get/file/mysql-3.22.25.tar.gz
# 解壓
tar -zvxf mysql-3.22.25-pc-linux-gnu-i686.tar.gz
cd mysql-3.22.25-pc-linux-gnu-i686
# 指定安裝前綴,後續路徑引用均以此為基準
./configure --prefix=/usr/local/mysql
關鍵提示:--prefix路徑將決定後續basedir、bindir、libexecdir等所有衍生路徑,請確保磁盤空間充足且路徑無特殊字符。
make
make install
編譯耗時視 CPU 核心數而定,現代服務器通常 5-15 分鐘完成。若報錯缺少 ncurses、bison、gcc-c++ 請先安裝對應開發包。
# 創建 mysql 用戶組與用戶(若不存在)
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
# 運行初始化腳本
scripts/mysql_install_db --user=mysql
此步驟將在 /usr/local/mysql/var/ 下創建兩個核心系統庫:
mysql:權限管理庫(user、db、tables_priv 等授權表)。test:測試庫,供開發驗證使用。重要: 若系統曾安裝過 MySQL,var目錄可能已存在舊數據,mysql_install_db會跳過初始化並報警。請備份遷移舊數據後刪除var重新初始化。
# 進入二進制目錄
cd /usr/local/mysql/bin
# 後台安全啟動
./mysqld_safe --user=mysql &
將啟動命令加入 /etc/rc.d/rc.local(SysVinit)或創建 systemd 服務單元(現代發行版推薦):
[Unit]
Description=MySQL Community Server
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/my.cnf
TimeoutSec=600
Restart=on-failure
[Install]
WantedBy=multi-user.target
保存為 /etc/systemd/system/mysqld.service,執行 systemctl daemon-reload && systemctl enable mysqld。
全新安裝的 root@localhost 默認無密碼,任何本地用戶均可無憑證登入並完全控制資料庫,風險極高!
$ /usr/local/mysql/bin/mysql -u root
Welcome to the MySQL monitor... # 直接進入,無需密碼!
# 方法一:mysqladmin(推薦腳本化)
/usr/local/mysql/bin/mysqladmin -u root password 'NewStrongPass123!'
# 方法二:SQL 交互式
/usr/local/mysql/bin/mysql -u root
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
$ /usr/local/mysql/bin/mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
$ /usr/local/mysql/bin/mysql -u root -p
Enter password: ************
Welcome to the MySQL monitor... # 密碼正確方可進入
| 項目 | 命令/操作 | 說明 |
|---|---|---|
| 刪除匿名用戶 | DELETE FROM mysql.user WHERE User=''; | 防止無用戶名連接 |
| 禁止 Root 遠程登入 | DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1'); | 僅允許本地管理 |
| 刪除 Test 庫 | DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'; | 減少攻擊面 |
| 刷新權限 | FLUSH PRIVILEGES; | 使上述變更立即生效 |
| 配置 SSL | 生成憑證並設置 require_secure_transport=ON | 加密傳輸防竊聽 |
| 啟用審計日誌 | 安裝 audit_log 插件 | 合規審計、入侵溯源 |
源碼編譯安裝雖較包管理器繁瑣,但能針對硬件架構深度優化(如 -march=native、靜態鏈接),並完全掌控安裝路徑與組件裁剪。核心原則:安裝即加固,首要任務是消除 Root 空密碼與匿名用戶,再考慮性能調優。現代部署建議優先使用官方 RPM/DEB 或容器化交付,將精力集中在架構設計、索引優化、高可用構建等高價值領域。