記錄在 CentOS 6.3 64 位上編譯安裝兩個 MySQL 實例(5.0.56 @ 3306、5.1.72 @ 3307)的完整步驟,供同類場景參考。
| 項目 | 實例 1 | 實例 2 |
|---|---|---|
| 版本 | 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 ncurses-devel cmake make perl bison openssl openssl-devel gcc* libxml2 libxml2-devel curl-devel libjpeg* libpng* freetype*
# 關閉防火牆與 SELinux
service iptables stop
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
useradd mysql
mkdir -p /usr/local/mysql{3306,3307}/{data,log,etc}
mkdir -p /var/run/mysqld{3306,3307}
mkdir -p /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}
cd ~/src
wget https://down1.chinaunix.net/distfiles/mysql-5.0.56.tar.gz
wget https://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-5.1/mysql-5.1.73.tar.gz
# 實例 1
tar -zxvf mysql-5.0.56.tar.gz
cd mysql-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 \
--enable-assembler \
--with-mysqld-ldflags=-all-static \
--with-charset=utf8 \
--with-extra-charsets=gbk,all \
--with-plugins=csv,innobase,myisam,heap \
--with-unix-socket-path=/tmp/mysql3306.sock
make && make install
# 實例 2(類似,端口 3307、socket mysql3307.sock、目錄 mysql3307)
cd ~/src
tar -zxvf mysql-5.1.73.tar.gz
cd mysql-5.1.73
./configure --prefix=/usr/local/mysql3307 ...(參數同理修改)
make && make install
各實例 /usr/local/mysql3306/etc/my.cnf、/usr/local/mysql3307/etc/my.cnf 關鍵差異:
datadir、socket、port、pid-file 指向各自目錄。log-error、slow-query-log、log-bin 分離。key_buffer、query_cache_size 等)按機器記憶體調整,示例均為 256M/128M。# 庫文件(僅需一個實例)
ln -s /usr/local/mysql3306/lib/mysql /usr/lib/mysql
# 或
echo "/usr/local/mysql3306/lib" > /etc/ld.so.conf.d/mysql.conf && ldconfig
# 頭文件
ln -s /usr/local/mysql3306/include/mysql /usr/include/mysql
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、defaults-file
# mysqld3306
basedir=/usr/local/mysql3306
datadir=/usr/local/mysql3306/data
conf=/usr/local/mysql3306/etc/my.cnf
$bindir/mysqld_safe --defaults-file=$conf --datadir=$datadir --pid-file=$server_pid_file $other_args >/dev/null 2>&1 &
# mysqld3307 同理修改路徑
chkconfig --add mysqld3306 && chkconfig --level 35 mysqld3306 on
chkconfig --add mysqld3307 && chkconfig --level 35 mysqld3307 on
service mysqld3306 start
service mysqld3307 start
/usr/local/mysql3306/bin/mysqladmin -u root password '123456'
/usr/local/mysql3306/bin/mysql -P3306 -S/tmp/mysql3306.sock -uroot -p123456
/usr/local/mysql3307/bin/mysqladmin -u root password '123456'
/usr/local/mysql3307/bin/mysql -P3307 -S/tmp/mysql3307.sock -uroot -p123456
# 端口驗證
lsof -i:3306
lsof -i:3307
echo "PATH=\$PATH:/usr/local/mysql3306/bin;export PATH" >> /etc/profile
source /etc/profile
多實例核心原則:端口、Socket、PID、數據目錄、配置文件、啟動腳本、服務名 全部隔離。編譯參數
--with-unix-socket-path必須顯式指定,否則預設同一 Socket 衝突。