早期 CentOS 5 系列無官方 MySQL 5.1 RPM,需源碼編譯。本文記錄在單機部署兩個 MySQL 5.1.33 實例(3306/3307 端口)的全過程,含用戶隔離、目錄隔離、配置文件差異化、啟動腳本註冊、遠程管理帳號創建,供遷移老舊項目參考。
# 1. 準備用戶與目錄 groupadd mysql useradd -g mysql -s /sbin/nologin -d /usr/local/mysql mysql # 2. 編譯安裝 cd /opt tar zxvf mysql-5.1.33.tar.gz cd mysql-5.1.33 ./configure \ --prefix=/usr/local/mysql \ --enable-assembler \ --with-extra-charsets=complex \ --enable-thread-safe-client \ --with-big-tables \ --with-readline \ --with-ssl \ --with-embedded-server \ --enable-local-infile \ --with-plugins=innobase make && make install # 3. 權限與配置 chown -R mysql:mysql /usr/local/mysql cp support-files/my-medium.cnf /usr/local/mysql/my.cnf # 4. 初始化數據目錄 /usr/local/mysql/bin/mysql_install_db \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data \ --user=mysql # 5. 啟動並註冊開機自啟 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/my.cnf & echo "/bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/my.cnf &" >> /etc/rc.local # 6. 便捷命令鏈接 ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql ln -s /usr/local/mysql/bin/mysqladmin /usr/bin/mysqladmin # 7. 設置 root 密碼與遠程帳號 mysqladmin -u root password '1234' mysqladmin -u root -p'1234' password '456' mysql -uroot -p'456' -e "GRANT ALL ON *.* TO 'mysql3306'@'%' IDENTIFIED BY 'mysql3306'; FLUSH PRIVILEGES;"
# 1. 獨立用戶與目錄 useradd -g mysql -s /sbin/nologin -d /usr/local/mysql3307 mysql3307 # 2. 編譯安裝到獨立前綴 cd /opt/mysql-5.1.33 ./configure --prefix=/usr/local/mysql3307 ...(其餘參數同實例一) make && make install chown -R mysql3307:mysql /usr/local/mysql3307 chmod -R 777 /usr/local/mysql3307 # 臨時放寬,解決 my.cnf world-writable 警告 cp /usr/local/mysql/share/mysql/my-medium.cnf /usr/local/mysql3307/my.cnf # 3. 修改 my.cnf 關鍵差異項 # [client] 和 [mysqld] 區段均需修改 port = 3307 socket = /tmp/mysql3307.sock # 4. 初始化數據目錄 /usr/local/mysql3307/bin/mysql_install_db \ --basedir=/usr/local/mysql3307 \ --datadir=/usr/local/mysql3307/data \ --user=mysql3307 # 5. 啟動 /bin/sh /usr/local/mysql3307/bin/mysqld_safe --defaults-file=/usr/local/mysql3307/my.cnf & echo "/bin/sh /usr/local/mysql3307/bin/mysqld_safe --defaults-file=/usr/local/mysql3307/my.cnf &" >> /etc/rc.local # 6. 修復配置文件權限警告 chmod 644 /usr/local/mysql3307/my.cnf # 7. 設置密碼與遠程帳號 mysqladmin -P 3307 -S /tmp/mysql3307.sock -u root password '1q2w3e' mysqladmin -P 3307 -S /tmp/mysql3307.sock -u root -p'1q2w3e' password 'newpass' /usr/local/mysql3307/bin/mysql -uroot -p -S /tmp/mysql3307.sock -e "GRANT ALL ON *.* TO 'mysql3307'@'%' IDENTIFIED BY 'mysql3307'; FLUSH PRIVILEGES;"
| 維度 | 實例 3306 | 實例 3307 | 衝突風險 |
|---|---|---|---|
| 安裝前綴 | /usr/local/mysql | /usr/local/mysql3307 | 無 |
| 數據目錄 | /usr/local/mysql/data | /usr/local/mysql3307/data | 無 |
| 運行用戶 | mysql | mysql3307 | 無 |
| 端口 | 3306 | 3307 | 無 |
| Socket | /tmp/mysql.sock | /tmp/mysql3307.sock | 無 |
| 配置文件 | /usr/local/mysql/my.cnf | /usr/local/mysql3307/my.cnf | 無 |
| 啟動腳本 | mysqld_safe --defaults-file=... | mysqld_safe --defaults-file=... | 無 |
netstat -ntlp | grep -E '3306|3307' # tcp 0 0 0.0.0.0:3306 LISTEN 1234/mysqld # tcp 0 0 0.0.0.0:3307 LISTEN 5678/mysqld mysql -umysql3306 -pmysql3306 -h127.0.0.1 -P3306 -e "SELECT VERSION();" mysql -umysql3307 -pmysql3307 -h127.0.0.1 -P3307 -e "SELECT VERSION();"
docker run -d --name mysql3306 -p 3306:3306 -v /data/mysql3306:/var/lib/mysql mysql:5.7 秒級啟動,天然隔離。my.cnf,避免手工差異。雖然編譯安裝多實例已成歷史,但「目錄隔離、用戶隔離、端口隔離、配置隔離」四大原理在容器、K8s Operator、多實例管理工具中依然通用。