首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 多實例源碼編譯安裝避坑實錄:從 cmake 到啟動的完整排雷手冊

     編輯:MySQL 資料庫相關知識

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 編譯安裝(統一前綴)

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

多實例核心:獨立 datadir + 獨立 my.cnf + 獨立初始化

以 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

多實例管理最佳實踐

  1. systemd 服務化:為每實例建立 mysqld@3307.service,實現開機自啟、統一管理。
  2. 統一監控採集:Prometheus mysqld_exporter 多目標配置。
  3. 備份隔離:每實例獨立備份目錄、獨立 Binlog 保留策略。
  4. 資源限制:cgroups 限制各實例 CPU/記憶體,防止「惡鄰居」效應。

多實例部署核心在於隔離:配置隔離、數據隔離、日誌隔離、權限隔離、網路隔離。做到極致隔離,運維才省心。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved