客戶需求:MySQL 5.1.32 預設字元集為 GBK。官方二進位套件預設為 latin1,嘗試 FreeBSD 相關教學無效,決定下載原始碼 mysql-5.1.32.tar.gz 手動編譯安裝至 /usr/local/mysql5,配置參數:
./configure --prefix=/usr/local/mysql5 \
--with-charset=gbk --with-xcharset=all \
--with-plugins=federated ...
/usr/local/mysql5/libexec/mysqld: Table 'mysql.plugin' doesn't exist
[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
[ERROR] unknown option '--skip-federated'
[ERROR] Aborting
mysql.plugin 表不存在原因:MySQL 5.1 引入插件架構,需 mysql.plugin 表儲存插件資訊。全新安裝或升級後,必須執行 mysql_upgrade 建立系統表。
解決:
/usr/local/mysql5/bin/mysql_upgrade -u root -p --force
此指令會檢查並建立所有系統表(含 plugin、proc、event 等),並刷新權限表。
unknown option '--skip-federated'原因:MySQL 5.1 移除內建 federated 引擎,改為插件式載入。舊版 my.cnf 保留 skip-federated 參數導致啟動失敗。
解決方案:
skip-federated 行--with-plugins=federated,並在 my.cnf 加入 federated(非 skip-federated)啟用插件正確 my.cnf 片段:
[mysqld]
# skip-federated <-- 註解掉或刪除
federated <-- 若編譯含此插件,加入此行啟用
plugin_dir=/usr/local/mysql5/lib/mysql/plugin
| 步驟 | 指令/操作 | 關鍵點 |
|---|---|---|
| 1. 安裝依賴 | yum install gcc gcc-c++ ncurses-devel openssl-devel bison perl | RHEL 5 需確認開發工具包 |
| 2. 建立使用者 | groupadd mysql; useradd -g mysql -s /sbin/nologin mysql | 專用帳號,安全原則 |
| 3. 配置編譯 | ./configure --prefix=/usr/local/mysql5 --with-charset=gbk --with-xcharset=all --with-plugins=max --with-big-tables ... | plugins=max 包含常用插件 |
| 4. 編譯安裝 | make && make install | 耗時較久,建議 screen 執行 |
| 5. 初始化資料目錄 | scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql5 --datadir=/data/mysql | 指定資料目錄分離 |
| 6. 複製設定檔 | cp support-files/my-medium.cnf /etc/my.cnf | 根據記憶體調整參數 |
| 7. 設定啟動腳本 | cp support-files/mysql.server /etc/init.d/mysqld; chkconfig --add mysqld | 系統服務管理 |
| 8. 啟動並升級 | service mysqld start; mysql_upgrade -u root -p | 必須執行 upgrade |
| 9. 設定密碼 | mysqladmin -u root password 'newpwd' | 移除匿名帳號 |
/etc/security/limits.conf 加入 mysql soft nofile 65535; mysql hard nofile 65535setsebool -P mysql_connect_any=1 或調整資料目錄 contextiptables -A INPUT -p tcp --dport 3306 -j ACCEPT# 檢查版本與字元集
/usr/local/mysql5/bin/mysql -u root -p -e "SELECT VERSION(); SHOW VARIABLES LIKE 'character_set%';"
# 檢查插件
/usr/local/mysql5/bin/mysql -u root -p -e "SHOW PLUGINS;"
# 檢查 federated
/usr/local/mysql5/bin/mysql -u root -p -e "SHOW ENGINES;" | grep -i federated
編譯安裝雖耗時,但可精確控制功能模組、字元集與最佳化參數,適合有特殊需求的生產環境。