什么是MySQL双实例或者多实例?
就是在一台机器上面开启多个不同的端口,运行多个MySQL服务进程。这些MySQL多实例公用一套安装程序,使用不同的(也可以是相同的)配置文件,启动程序,数据文件。在提供服务时候,多实例MySQL在逻辑上看来是各自独立的,多个实例的自身是根据配置文件对应的设定值,来取得相关硬件资源的多少。
应用场景
伪分布式架构,项目启动初期又不一定有那多的用户量,为此先一组物理数据库服务器,但部署多个实例,方便后续迁移。一台物理数据库服务器支撑多个数据库的数据服务,为提高mysql复制的从机的恢复效率,采用多实例部署
部署过程
前期准备
#yum install tcl gcc gcc-c++ make bzip2 cmake ncurses ncurses-devel wget mailx lsof -y
#vim /etc/security/limits.conf
* soft nofile 655350
* hard nofile 655350
* soft nproc 655350
* hard nproc 655350
#sed -i 's/1024/655350/' /etc/security/limits.d/90-nproc.conf
#ulimit -n 655350
#vim /etc/mail.rc
set from=bj-122.mysql<autoreport@yyy.net> smtp=mail.yyy.net
set smtp-auth-user=xxxxx@yyy.net smtp-auth-password=xxxxxxxx
set smtp-auth=login
安装多实例
安装步骤在mysql源码安装包解压之后目录里的INSTALL-SOURCE文件中5488-5506行,具体的配置文件需要按照不同的需求进行配置
#groupadd mysql
#useradd -r -g mysql mysql
#tar jxf mysql-5.6.27.tar.gz
#cd mysql-5.6.27
#cmake .
#make –j4 && make install
#cd /usr/local/mysql
#chown -R mysql.mysql .
#mkdir -p /data/mysql/330{7,8}
# mkdir -p /back/binlog/330{7,8}
#scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/3307 --user=mysql
#scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/3308 --user=mysql
#vim /data/mysql/3307/my.cnf
#vim /data/mysql/3308/my.cnf
#chown -R mysql.mysql /data/mysql
#chown -R mysql.mysql /back/binlog
#vim /etc/init.d/mysql3307
#vim /etc/init.d/mysql3308
#chmod +x /etc/init.d/mysql330{7,8}
#ln -s /usr/local/mysql/bin/* /usr/bin/
#/etc/init.d/mysql3307 start
#/etc/init.d/mysql3308 start
#mysqladmin -uroot password “123456” -S /data/mysql/3307/mysql.sock
#mysqladmin -uroot password “123456” -S /data/mysql/3308/mysql.sock
#mysql -uroot -p123456 -S /data/mysql/3307/mysq.sock
#mysql -uroot -p123456 -S /data/mysql/3307/mysq.sock
其中,进程启动脚本/etc/init.d/mysql3307,
#!/bin/sh
#init
port=3307
mysql_user="root"
mysql_pwd="123456"
CmdPath="/usr/bin"
#startup function
function_start_mysql()
{
printf "Starting MySQL...\n"
/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/mysql/3307/my.cnf 2>&1 > /dev/null &
}
#stop function
function_stop_mysql()
{
printf "Stoping MySQL...\n"
${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/mysql/3307/mysql.sock shutdown
}
#restart function
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
sleep 2
function_start_mysql
}
case $1 in
start)
function_start_mysql
;;
stop)
function_stop_mysql
;;
restart)
function_restart_mysql
;;
*)
printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
esac
Bonus: http://www.linuxeye.com/Linux/1914.html MySQL性能测试,with Jemalloc