生產環境常需在單機運行多個隔離的 MySQL 實例(不同版本、不同端口、不同數據目錄)。本文記錄在 CentOS 6.3 64位上,編譯部署 MySQL 5.0.56 (3306) 與 5.1.72 (3307) 雙實例的全流程。
| 項目 | 實例一 | 實例二 |
|---|---|---|
| 版本 | mysql-5.0.56 | mysql-5.1.72 |
| 端口 | 3306 | 3307 |
| 安裝目錄 | /usr/local/mysql3306 | /usr/local/mysql3307 |
| Socket | /tmp/mysql3306.sock | /tmp/mysql3307.sock |
yum -y install wget gcc-c++ ncurses-devel cmake make perl bison openssl-devel libxml2-devel curl-devel libjpeg* libpng* freetype* service iptables stop setenforce 0 # 永久關閉 SELinux:編輯 /etc/sysconfig/selinux 設 SELINUX=disabled
useradd mysql
mkdir -p /usr/local/mysql{3306,3307}/{data,log,etc}
mkdir -p /var/run/mysqld{3306,3307} /var/lib/mysqld{3306,3307}
chown -R mysql:mysql /usr/local/mysql{3306,3307} /var/run/mysqld{3306,3307} /var/lib/mysqld{3306,3307}
chmod 750 /usr/local/mysql{3306,3307}/{data,log}
# 實例一 5.0.56 ./configure --prefix=/usr/local/mysql3306 \ --with-mysqld-user=mysql --sysconfdir=/usr/local/mysql3306/etc \ --localstatedir=/usr/local/mysql3306/data --with-tcp-port=3306 \ --with-unix-socket-path=/tmp/mysql3306.sock \ --with-charset=utf8 --with-extra-charsets=all \ --with-plugins=csv,innobase,myisam,heap make && make install # 實例二 5.1.72(類似,修改路徑與端口為 3307)
每實例一份,核心差異點:datadir、socket、port、pid-file、日誌路徑。關鍵參數示例:
[mysqld] datadir=/usr/local/mysql3306/data socket=/tmp/mysql3306.sock port=3306 pid-file=/var/lib/mysqld3306/mysql.pid max_connections=16384 wait_timeout=7200 log-error=/usr/local/mysql3306/log/error.log log-bin=/usr/local/mysql3306/log/bin.log
# 初始化系統表 cd /usr/local/mysql3306 && scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql3306/data cd /usr/local/mysql3307 && scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql3307/data # 複製並修改啟動腳本 cp /usr/local/mysql3306/support-files/mysql.server /etc/init.d/mysqld3306 cp /usr/local/mysql3307/support-files/mysql.server /etc/init.d/mysqld3307 # 編輯腳本,設定 basedir、datadir、conf=.../my.cnf,並在 mysqld_safe 後添加 --defaults-file=$conf # 註冊開機自啟 chkconfig --add mysqld3306 && chkconfig --level 35 mysqld3306 on chkconfig --add mysqld3307 && chkconfig --level 35 mysqld3307 on # 啟動 service mysqld3306 start service mysqld3307 start
echo "PATH=\$PATH:/usr/local/mysql3306/bin" >> /etc/profile && source /etc/profile # 設密碼、連接測試 /usr/local/mysql3306/bin/mysqladmin -u root password '123456' /usr/local/mysql3306/bin/mysql -P3306 -S/tmp/mysql3306.sock -uroot -p123456 lsof -i:3306 && lsof -i:3307
socket、port、pid-file、datadir 完全隔離--defaults-file 指向各自的 my.cnflib 加入 ld.so.conf.d 即可按此流程操作,可實現多版本 MySQL 共存、互不干擾,滿足兼容性測試或多業務隔離需求。