萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Ubuntu 編譯安裝第二個 MySQL 實例共存指南

核心原則:完全隔離

  • 安裝前綴:--prefix=/opt/mysql-5.7。
  • 資料目錄:/opt/mysql-5.7/data。
  • 配置檔:/opt/mysql-5.7/my.cnf(實例專用)。
  • 端口:3307(避開預設 3306)。
  • Socket:/tmp/mysql3307.sock(避開預設 /tmp/mysql.sock)。
  • 進程/服務名:mysqld-5.7 / mysql-5.7.service。

編譯安裝步驟

  1. 安裝依賴
    sudo apt update
    sudo apt install -y build-essential cmake libssl-dev libncurses5-dev bison pkg-config
  2. 下載源碼
    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
  3. CMake 配置
    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
  4. 編譯安裝
    make -j$(nproc)
    sudo make install
  5. 建立 mysql 用戶與目錄權限
    sudo groupadd -r mysql
    sudo useradd -r -g mysql -s /bin/false mysql
    sudo chown -R mysql:mysql /opt/mysql-5.7
  6. 初始化資料目錄
    cd /opt/mysql-5.7
    sudo bin/mysqld --initialize-insecure --user=mysql \
      --basedir=/opt/mysql-5.7 --datadir=/opt/mysql-5.7/data
  7. 配置專屬 my.cnf
    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
  8. 建立 systemd 服務
    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
  9. 驗證連線
    /opt/mysql-5.7/bin/mysql -u root -p -S /tmp/mysql3307.sock -P 3307 -e "SELECT VERSION();"

Ubuntu 系統配置檔讀取順序陷阱

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 單元,即可實現零干擾共存。

copyright © 萬盛學電腦網 all rights reserved