什么是mysql多实例:
简单的说,就是在一台机器上开启多个不同的服务端口(如:3306,3307) ,运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务。
这些MySQL多实例共用---套MySQL安装程序,使用不同(也可以相同)的my.cnf配置文件、启动程序,数据文件。在提供服务时,多实例MySQL在逻辑上看来是各自独立的,多个实例的自身是根据配置文件对应的设定值,来取得服务器的相关硬件资源多少。
作个比喻,MySQL多实例相当于房子的多个卧室一样, 每个实例可以看作-一个卧室,整个服务器就是一套房子,服务器的硬件资源(cpu,mem,disk)可以看作房子的卫生间、厨房、厅一样,是房子的公用资源,北漂蜗居在一起,肯定要共用上述资源。这样想我们就应,该明白了。
MySQL多实例的作用与问题:
有效利用服务器资源
当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。
节约服务器资源
当公司资金紧张,但是数据库又需要各自尽量独立提供服务,而且,需要主从同步等
资源相互抢占问题
当某个服务实例并发很高或者有慢查询时,整个实例会消耗更多的内存、CPU、磁盘I0资源,导致服务器上的其它的实例提供服务的质量下降。这就相当于大家住在一一个房子的不同卧室一 样,早晨起来上班,都要刷牙、洗脸等,这样卫生间就会长期占用,其它人就要等待一样的道理。
MySQL配置方案:
1.通过多配置文件及多个启动程序来实现多实例的方案,在配置多实例之前要关掉mysql进程
第一步:创建MySQL多实例的数据文件目录
mkdir -p /data/{3306,3307}/data
第二步:删除启动文件
rm -f /etc/init.d/mysqld
第三步:上传my.cnf和mysql这个文件放在3306和3307下
cd /data/3306 cd /data/3307 rz
第四步:创建多实例的启动文件
vim /data/3306/mysql vim /data/3307/mysql
多实例启动文件的启动mysql服务实质:
mysqld_ safe --defaults-file=/data/3306/my. cnf 2>81 > /dev/null & mysqld_ safe --defaults-file=/data/3307/my. cnf 2>81> /dev/null &
多实例启动文件的停止mysql服务实质:
mysqladmin -u root -poldboy123 -S /data/3307/mysql.sock shut dowmn mysqladmin -u root -poldboy123 -S /data/3306/mysql.sock shut dowmn
第五步:对目录授权
chown -R mysql.mysq /data
第六步:加执行权限,用于启动mysql
find /data/ -type f -name "mysql"|xargs chmod +x
第七步:初始化MySQL多实例的数据库文件
cd /application/mysql/scripts/ ./mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data --user=mysql ./mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data --user=mysql
初始化数据库的主要目的就是创建基础的数据库文件,例如:生成musql库表等。
第八步:启动数据库
/data/3306/mysql start /data/3307/mysql start
第九步:登陆数据库,多实例登陆需要指定sock文件
mysql -S /data/3306/mysql.sock create database d3306; mysql -S /data/3307/mysql.sock create database d3307;
第十步:增加密码
mysqladmin -u root -S /data/3306/mysql.sock password '123456' mysqladmin -u root -S /data/3307/mysql.sock password '123456'
2.单一配置文件
[mysqld_multi] mysql=/usr/bin/mysqld_safe mysqladmin=/usr/bin/mysqladmi user = mysql [mysqld1]#一次类推,端口不同 socket = /var/lib/mysql/mysql.sock prot = 3306 pid-file = /var/lib/mysql/mysql.pid datadir = /var/lib/mysql user = mysql skip-name-resolvee server -id=12 master-connect retry=604 default-storage -engine=innodbe innodb _buffer_ pool size=1G innodb_ addi tional_ _mem pool=10M default_ character_ set=utf8 character set_ server-utf8 read-only relat-log-space-limit=3G expire-logs_day=20
启动方式:
mysqld_multi --config-file=/data/mysql/my_multi.cnf start 1,2,3, 4,5,6,7