Ubuntu 環境下源碼編譯部署 MySQL 多實例(3306/3307/3308),過程充滿權限、配置、殘留文件干擾等坑。本文記錄完整安裝日誌、報錯現場與修復方案,作為多實例部署的參考範本。
# 系統已有 apt 安裝的 MySQL,必須徹底清理
apt-get purge mysql-server mysql-client mysql-common
rm -rf /etc/mysql /var/lib/mysql /var/log/mysql /var/run/mysqld
# 建立用戶組
groupadd mysql
useradd -r -g mysql mysql
# 源碼目錄清理
make clean
rm -f CMakeCache.txt
rm -rf /etc/my.cnf
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1
make && make install
以 3307 實例為例:
# 1. 建立實例目錄結構
mkdir -p /usr/local/mysql/data_3307/{data,logs,tmp}
chown -R mysql:mysql /usr/local/mysql/data_3307
# 2. 編寫專屬 my.cnf (/usr/local/mysql/data_3307/my.cnf)
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data_3307/data
port=3307
socket=/usr/local/mysql/data_3307/mysql.sock
pid-file=/usr/local/mysql/data_3307/mysql.pid
log-error=/usr/local/mysql/data_3307/logs/error.log
character-set-server=utf8
collation-server=utf8_general_ci
server-id=3307
# 3. 關鍵:初始化數據字典(必須指定 --user=mysql)
cd /usr/local/mysql
./scripts/mysql_install_db --defaults-file=/usr/local/mysql/data_3307/my.cnf \
--datadir=/usr/local/mysql/data_3307/data --user=mysql
# 成功標誌:Installing MySQL system tables... OK
| 報錯現象 | 根因 | 修復 |
|---|---|---|
| COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8' | cmake 參數未生效或 my.cnf 衝突 | 確認 cmake 含 -DDEFAULT_COLLATION、my.cnf 設定 collation-server |
| Can't find file: './mysql/host.frm' (errno: 13) | 初始化未加 --user=mysql,生成文件屬主為 root | 刪除 datadir 重新初始化,**必須帶 --user=mysql** |
| ERROR 2002: Can't connect ... socket '/tmp/mysql.sock' | 客戶端未指定 socket/port,走默認 3306 | 連接時顯式指定:mysql -S /path/to/mysql.sock -P 3307 |
| ERROR 1005 (errno: 121) Duplicate key on write | 嘗試 ADD 同名 FOREIGN KEY | 先 DROP FOREIGN KEY 再 ADD |
# 啟動 3307
mysqld_safe --defaults-file=/usr/local/mysql/data_3307/my.cnf &
# 驗證連接
mysql -uroot -p -S /usr/local/mysql/data_3307/mysql.sock -P 3307
# 或
mysql -uroot -p -h127.0.0.1 -P 3307
mysqld@3307.service,實現開機自啟、統一管理。多實例部署核心在於隔離:配置隔離、數據隔離、日誌隔離、權限隔離、網路隔離。做到極致隔離,運維才省心。