640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy= 
1.1 什么是MySQL多实例?  
简单地说,MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306/3307)同时运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。 

这些MySQL多实例共用一套MySQL安装程序,使用不同的my.cnf(也可以相同)配置文件、启动程序(也可以相同)和数据文件。在提供服务时,多实例MySQL在逻辑上看来是各自独立的,他们根据配置文件对应设定值,获得服务器响应数量的资源。

 
比喻图: 
640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

1.2 MySQL多实例的作用与问题 

q 有效利用服务器资源 

当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务,且可以实现资源的逻辑隔离。 

q 节约服务器资源 
当公司资金紧张,但是数据库又需要各自尽量独立地提供服务,而且,需要主从复制等技术时,多实例就再好不过了。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy= 1.3 MySQL多实例的生产场景应用 

1、 资金紧张性公司的选择 资金紧张,公司业务访问量又不大,但又希望不同的业务的数据库服务各自尽量独立 。

2、 并发访问不是特别大的业务 当公司业务访问量不太大的时候,服务器的资源基本都是浪费的,这就适合多实例的使用 。

3、 门户网站应用MySQL多实例场景 配置硬件好的服务器,可以节省IDC机柜空间,跑多实例也不会减少硬件资源不慢的浪费 一般是从库多实例,例如:某部门使用IBM服务器为48核CPU,内存96GB、一台服务器跑3~4个实例:此外,sina网也是用的多实例,内存48GB左右。

1.4 多实例安装步骤

1、安装依赖,下载软件包

yum -y install  ncurses-devel libaio-deve   #安装依赖包yum -y install cmake       #编译MySQL需要的软件useradd -s /sbin/nologin -M mysql   #创建用户mkdir /home/oldboy/tools           #规范软件包安装路径cd /home/oldboy/toolswget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.49.tar.gztar xf mysql-5.5.49.tar.gz                #解压MySQLcd mysql-5.5.49

2、编译MySQL源码包 

编译参数

cmake -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \-DMYSQL_DATADIR=/application/mysql-5.5.32/data \-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock \-DDEFAULT_CHARSET=utf8 \-DDEFAULT_COLLATION=utf8_general_ci \-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \-DENABLED_LOOCAL_INFILE=ON \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DWITH_FEDERATED_STORAGE_ENGINE=1 \-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \-DWITHOUT_PARRTITION_STORAGE_ENGINE=1 \-DWITH_FAST_MUTEXES=1 \-DWITH_ZLIB=bundled \-DENABLED_LOCAL_INFILE=1 \-DWITH_READLINE=1 \-DWITH_EMBEDDED_SERVER=1\-DWITH_DEBUG=0

此步是生成Makefile文件的步骤接下来进行安装

make && make install ln -s /application/mysql-5.5.49 /application/mysql     #制作软连接 mkdir -p /data/{3306,3307}/data     #创建多实例目录

===========================================

这里的data安装使用下载 下载链接:

[root@db01 /]# find /data -type f -name "mysql"|xargs chmod +x[root@db01 /]# find /data -type f -name "mysql"|xargs ls -l-rwxr-xr-x 1 root root 1307 Jul 152013 /data/3306/mysql-rwxr-xr-x 1 root root 1307 Jul 212013 /data/3307/mysql[root@db01 /]# chown -R mysql.mysql /data/[root@db01 /]# cd /application/mysql/scripts/[root@db01 scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data/ --user=mysql[root@db01 scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data/ --user=mysql

<h1 id=”wiz_toc_0″>MySQL多实例配置及启动

启动MySQL 启动方式和原来不同

[root@db02 scripts]# /data/3306/mysql startStarting MySQL...[root@db02 scripts]# /data/3307/mysql startStarting MySQL...

<h1 id=”wiz_toc_1″>启动完成进行检查

[root@db02 scripts]# netstat -lntup|grep 330tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      14480/mysqld       tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      15198/mysqldcp /application/mysql/bin/* /usr/local/sbin/登录的时候需要指定sockmysql -uroot -S /data/3306/mysql.sockmysql -uroot -S /data/3307/mysql.sock

常见错误问题: 

错误问题: 
1、 对主机名做解析 
2、 tmp目录权限1777 
3、 如果启动MySQL多实例没有查到端口就稍等一会 
4、 日志.err结尾的日志进行排错

<h1 id=”wiz_toc_2″>设置开机启动

echo "mysql multi instances" >>/etc/rc.localecho "/data/3306/mysql start" >>/etc/rc.localecho "/data/3307/mysql start" >>/etc/rc.local

下面我们自己添加一个多实例

<h1 id=”wiz_toc_3″>添加多实例3308

[root@db02 data]# mkdir /data/3308/data -p[root@db02 data]# \cp /data/3306/my.cnf /data/3308[root@db02 data]# \cp /data/3306/mysql /data/3308[root@db02 3308]# sed -i 's/3306/3308/g' my.cnf mysql[root@db02 3308]# sed -i 's/server-id = 1/server-id = 8/g' /data/3308/my.cnf[root@db02 3306]# chown -R mysql.mysql ../3308/

<h1 id=”wiz_toc_4″>授权

[root@db02 3306]# chmod 700 /data/3308/mysql[root@db02 3308]# cd /application/mysql/scripts/[root@db02 scripts]#./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3308/data/ --user=mysql[root@db02 3308]# chmod +x /data/3308/mysq [root@db02 scripts]# /data/3308/mysql startStarting MySQL...[root@db02 scripts]# mysql -S /data/3308/mysql.sock

5 MySQL远程连接

mysql -uroot -poldboy -h 10.0.0.7 -P 端口号 -P 为端口参数

6 因为脚本里面设置的密码是oldboy 所以如果我们不设置将无法停止MySQL

[root@db02 scripts]# mysqladmin password oldboy -S /data/3306/mysql.sock[root@db02 scripts]# mysqladmin password oldboy -S /data/3307/mysql.sock[root@db02 scripts]# mysqladmin password oldboy -S /data/3308/mysql.sock[root@db02 scripts]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock

转载于老男孩教育微信公众号,仅作个人学习笔记,