--prefix=/opt/mysql-5.7。/opt/mysql-5.7/data。/opt/mysql-5.7/my.cnf(實例專用)。/tmp/mysql3307.sock(避開預設 /tmp/mysql.sock)。mysqld-5.7 / mysql-5.7.service。sudo apt update
sudo apt install -y build-essential cmake libssl-dev libncurses5-dev bison pkg-config
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
tar xzf mysql-5.7.44.tar.gz
cd mysql-5.7.44
cmake . \
-DCMAKE_INSTALL_PREFIX=/opt/mysql-5.7 \
-DMYSQL_DATADIR=/opt/mysql-5.7/data \
-DSYSCONFDIR=/opt/mysql-5.7 \
-DWITH_BOOST=boost \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DENABLED_LOCAL_INFILE=1
make -j$(nproc)
sudo make install
sudo groupadd -r mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo chown -R mysql:mysql /opt/mysql-5.7
cd /opt/mysql-5.7
sudo bin/mysqld --initialize-insecure --user=mysql \
--basedir=/opt/mysql-5.7 --datadir=/opt/mysql-5.7/data
cat > /opt/mysql-5.7/my.cnf <<'EOF'
[mysqld]
basedir = /opt/mysql-5.7
datadir = /opt/mysql-5.7/data
port = 3307
socket = /tmp/mysql3307.sock
pid-file = /opt/mysql-5.7/data/mysqld.pid
log-error = /opt/mysql-5.7/data/error.log
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
skip-name-resolve
EOF
cat > /etc/systemd/system/mysql-5.7.service <<'EOF'
[Unit]
Description=MySQL 5.7 Second Instance
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/opt/mysql-5.7/bin/mysqld_safe --defaults-file=/opt/mysql-5.7/my.cnf
ExecStop=/opt/mysql-5.7/bin/mysqladmin --defaults-file=/opt/mysql-5.7/my.cnf shutdown
PIDFile=/opt/mysql-5.7/data/mysqld.pid
Restart=on-failure
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable mysql-5.7
sudo systemctl start mysql-5.7
/opt/mysql-5.7/bin/mysql -u root -p -S /tmp/mysql3307.sock -P 3307 -e "SELECT VERSION();"
Ubuntu MySQL 讀取順序:/etc/mysql/my.cnf → /etc/my.cnf → ~/.my.cnf。**編譯安裝實例必須用 --defaults-file 強制指定專屬配置**,否則會讀取系統全域配置導致端口/目錄衝突。
| 問題 | 解決 |
|---|---|
unknown option '--skip-federated' | 編輯 my.cnf 註釋該行,或移除 skip-federated。 |
| 啟動失敗 "Can't create test file" | datadir 權限錯誤,chown -R mysql:mysql /opt/mysql-5.7/data。 |
| 客戶端連不上 | 確認 -S /tmp/mysql3307.sock -P 3307 參數,或設定 MYSQL_UNIX_PORT 環境變數。 |
| 系統原有 MySQL 受影響 | 檢查兩實例 port/socket/pid-file/data 目錄**完全隔離**,systemd 服務名不同。 |
Ubuntu 共存多 MySQL 實例的關鍵在於**「五隔離」:前綴目錄、資料目錄、端口、Socket、systemd 服務名**。編譯安裝時指定 --prefix、--datadir,啟動時強制 --defaults-file,註冊獨立 systemd 單元,即可實現零干擾共存。