mysql多实例安装

·8.1 MySQL多实例介绍

·8.1.1什么是MySQL多实例?

简单的说,就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务。

这些MySQL多实例共用一套MySQL安装程序,使用不同的my.cnf配置文件、启动程序,数据文件。在提供服务时,多实例MySQL在逻辑上看来是各自独立的,多个实例之间是根据配置文件的设定值,来取得相关服务器的硬件资源。

作个比喻,MySQL多实例相当于房子的多个卧室一样,每个实例可以看作一个卧室,整个服务器就是一套房子,服务器的硬件资源(cpu.mem,disk)可以看作房子的卫生间,厨房、客厅一样,是房子的公用资源,北漂蜗居在一起,肯定要共用上述资源。

多实例补充:其实很多服务都可以有多实例,甚至在门户网站用的很广泛,例如nginx就可以多实例,apache  haproaxy  redis  memcache,都可以多实例。

http:/∥edu.51cto.com/course/course id-395.html.

·8.1.2MySQL多实例的作用

·8.1.2.1有效利用服务器资源。

当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。

·8.1.2.2节约服务器资源。

当公司资金紧张,但是数据库又需要各自尽量独立提供服务,而且,需要主从同步等

技术时,多实例就再好不过了。

·8.1.2.3资源互相抢占问题。

当某个服务实例并发很高或者有慢查询时,整个实例会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其它实例提供服务的质量下降。这就相当于大家住在一个房子的不同卧室一样,早晨起来上班,都要刷牙、洗脸等,这样卫生间就会长期占用,其它人就

8.2 MySQL多实例生产应用场景。

8.2.1资金紧张型公司的选择。

当公司业务访问量不太大,又舍不得花钱,但又希望不同业务的数据库服务各自尽量独立的提供服务互相不受影响,而且,需要主从同步进行等技术提供备份或读写分离服务时,多实例就再好不过了。如:可以通过3台服务器部署6-9个实例,交叉做主从同步备份及读写分离,实现6-9台服务器才有的效果。这里要强调的是,所谓的尽量独立是相对的。画图举例(连接数多,查询多)

8.2.2并发访问不是特别大的业务。

当公司业务访问量不太大的时候,服务器的资源基本都是浪费的,这时就很适合多实例的应用,如果对SQL语句优化的好,多实例一个很值得使用的技术,即使并发很大,合理分配好系统资源,也不会有太大问题。

8.3MySQL多实例常见配置方案。

8.3.1多配置文件部署方案。

即本文主要讲解的方案,通过配置多个配置文件及多个启动程序来实现多实例的方案,这是推荐的方法。本文的配置:

[root@oldboy /]#tree/data

/data

1--3306

|I--my.cnfe

|-mysql

-3307

|--my.cnfe

--mysql

2 directories,4 filese

提示:mysql及my.cnf文件请见相关目录mysql_config_test.tar.gz文件或结尾附录

8.3.2单一配置文件部署方案。

1)my.cnf配置文件样例

[mysqld multi]

mysqld =/usr/bin/mysqld_safe

mysqladmin=/usr/bin/mysqladmine

user=mysql

[mysqld1]

socket =/var/1ib/mysql/mysql.socke

port =3306

pid-file =/var/1ib/mysql/mysql.pide

datadir=/var/1ib/mysql/

user=mysql

[mysqld2]

socket =/mnt/data/db1/mysql.socke

port =3302I

pid-file =/mnt/data/db1/mysql.pid

datadir=/mnt/data/db1/

user=mysql

skip-name-resolve

server-id=10

default-storage-engine=innodbe

innodb_buffer_pool_size=512M

innodb_additional_iem pool=10M

default_character_set=utf8

character_set_server=utf8

#read-onlye

relay-log-space-1imit=3G

expire_logs_day=20

[mysqld3]

socket =/mnt/data/db2/mysql.socke

port =3303

pid-file =/mnt/data/db2/mysal.pid

datadir =/mnt/data/db2

user=mysql

skip-name-resolvee

server-id=11

master-connect-retry=60

default-storage-engine=innodbe

inmodb_buffer pool_size=1G

innodb_additional_mem_pool=10Me

default_character_set=utf8

character_set_server=utf8e

read-onlye

relay-log-space-limit=3Ge

expire_logs_day=20

[mysqld4]

socket =/mnt/data/db3/mysql.socke

port=3304

pid-file =/mnt/data/db3/mysql.pid

datadir =/mnt/data/db3/

user=mysql

skip-name-resolve

server-id=12

master-connect-retry=60

default-storage-engine=innodb

innodb_buffer_pool_size=1G

innodb_additional_mem_pool=10M

default_character_set=utf8

character_set_server=utf8

read-onlye

relay-log-space-limit=3Ge

expire_logs_day=20

2)启动方法

Mysql_multi –config-file=/data/mysql/my_multi.cnf start 1,2,3,4,5,6,7

  1. 缺点耦合性太高

8.4安装多实例mysql数据库

http://blog.51cto.com/jackx/1939991

8.4.1建立MySQL多实例的条件。

首先按照我们前面讲过的四种MySQL的安装方法之一安装好数据库,如果是编译安装,则到make install之后截止。

8.4.1建立MySQL帐号。

首先以root 身份登陆到linux系统,然后执行如命令创建mysql组及用户

[root@mysq1~]# groupadd mysql

[root@mysq1~]#useradd  mysql  -s /sbin/nologin -g  mysql -M

useradd命令参数简要说明:

#1.-s/sbin/nologin 表示禁止该用户登陆,加强安全。

#2.-g mysq1指定属于mysql组。

#3.-M表示不创建用户家目录。

检查创建的用户:

[root@mysq1~]#tail –l /etc/passwd

mysq1:x:1816:1816::/home/mysq1:/sbin/nologin

建立mysql软件目录:

[root@mysql~]#mkdir -p /home/wj/tools

[root@mysql~]#cd /home/wj/tools/

8.4.2获得MySQL软件。

通过rz命令从本地上传mysql软件包如:mysql-5.1.62.tar.gz,当然你也可以到网去下

载。I

本例通过rz命令来演示。如提示无rz命令,可先执行yum install lrzsz-y来安装。。

执行结果如下:

[rooteC tools]# rz

rz waiting to receive.

正在开始zmodem传输。按Ctr1+C取消。

正在传输 mysq1-5.1.62.tar.gz...…

100%27000KB2454KB/s00:00:110错误

提示:你也可以通过wget http://mysql.ntu.edu.tw/Downloads/MySQL-5.1/mysgl-5.1.62.tar.gz方式下载。

[root@mysql tools]# wget http://mysql.ntu.edu.tw/Downloads/MySQL-5.1/mysql-5.1.62.tar.gz

8.4.3安装MySQL软件。

1)解压。

[root@mysql tools]# tar zxf- mysql-5.1.62.tar.gz #-解压mysql软件包

[root@mysql tools]# cd mysq1-5.1.62

2)配置

yum install libtermcap-devel –y

防止checking for termcap functions library... configure: error: No curses/termcap library found

[root@mysql mysq1-5.1.62]#./configure \

-prefix=/usr/local/mysql \

--with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock \

--localstatedir=/usr/local/mysql/data \

--enable-assembler \

--enable-thread-safe-client \

-with-mysqld-user=mysql \

-with-big-tables \

-without-debug \

-with-pthread \

--enable-assembler \

--with-extra-charsets=complex \

--with-readline \

-with-ssl \

--with-embedded-server \

--enable-1ocal-infile \

--with-plugins=partition,innobase \

--with-mysqld-ldflags=-all-static \

--with-client-ldflags=-all-static

#说明:

#1.可以通过执行./configure-help命令来详细查看以上各参数的用途。

#2.以上配置中的"\”斜线表示换行

#3.configure 编译常用参数的说明,请见附录一

3)静态编译生成mysqld的执行文件。

[root@mysq1 mysq1-5.1.62]# make

#提示:

#1.也可执行下面命令make-j4加快mysql的编译#-j表示希望使用cpu核数

#2.如果使用不当可能反而安装速度更慢。

#3.注意编译的结果是否报错(带error字符样),有些不少读者也不管有没有错误,就直接make install,结果导致无法完成安装。

#4没有configure直接make报以下错误:

make: *** No targets specified and no makefile found.  Stop

4)安装mysql

[root@mysql mysq1-5.1.62]# make install

#1.注意安装的结果是否报错(带error 字符样),有些不少读者也不管有没有错误,就直接make install,结果导致无法完成安装。

补充:我们曾经讲解过的单实例安装的数据库文件和启动程序最好删除。

8.4.4创建MySQL多实例的数据目录。

如果机器上装过mysql将mysql安装的data目录mv走,mv data /tmp/data-mysql5.5-single

在这里我们采用不同的端口来作为二级目录,以区别不同的实例。。

[root@oldboy /]#mkdir-p/data/{3306,3307}/data

[root@oldboy /]#tree/data

/data

1-3306

1--data

--3307

--data

4 directories,0 filese

提示:

  1. mkdir-p/data/{3306,3307}/data 相当于mkdir-p/data/3306/data;mkdir -p/data/3307/data 两条命令

2)如果是创建多个目录可以增加,如3308,3309,一般生产环境中2-3个实例就可以了。

生产硬件配置:MEM16g双cpu8核,磁盘6*600g sas 15k。

8.4.5创建MySQL多实例的配置文件。

[root@mysql mysq1-5.1.62]#ls -l support-files/*.cnf

修改my.cnf中端口 server-id等不同

8.4.6创建mysql多实例的启动文件

启动文件的创建,和配置文件创建几乎一样,也可以通过vi命令来添加,如下:

vi/data/3306/mysql

vi/data/3307/mysql

修改属主属组和执行权限:

sudo chown -R mysql.mysql /data/

find /data/ -name mysql|xargs sudo chmod 700

sudo /application/mysql/scripts/mysql_install_db --defaults-file=/data/3306/my.cnf --basedir=/application/mysql/ --datadir=/data/3306/data --user=mysql

中间有空格否则报错: FATAL ERROR: Could not find ./bin/my_print_defaults

 

sudo /application/mysql/scripts/mysql_install_db --defaults-file=/data/3307/my.cnf --basedir=/application/mysql/ --datadir=/data/3307/data --user=mysql

 

多实例启动文件的实质就是指定单独的配置文件启动而已:

mysqld_ safe --defaults-file=/data/3306/my.cnf 2>&1>/dev/null &

mysald_ safe --defaults-file=/data/3307/my.cnf 2>&1>/dev/null &

8.4.5初始化MySQL多实例的数据库文件

上述步骤全都配置完毕后,就可以初始化数据库文件了,这个步骤其实也可以在编译安装MySQL之后就操作,只不过放到这里更合理一些。

(1)初始化MySQL数据库

初始化命令如下:

[root@Jackscripts]# ./mysql_install_db  --defaults-file=/data/3306/my.cnf--basedir=/application/mysql/ --datadir=/data/3306/data --user=mysql

[root@Jack scripts]# ./mysql_install_db  --defaults-file=/data/3307/my.cnf--basedir=/application/mysql/ --datadir=/data/3307/data --user=mysql

8.4.6 启动MySQL多实例数据库

下面来看看启动MySQL多实例的命令。

第一个实例3306的启动命令如下:

[root@Jack scripts]# /data/3306/mysql start

Starting MySQL...

第二个实例3307的启动命令如下:

[root@Jack scripts]# /data/3307/mysql start

Starting MySQL...

现在,检查MySQL多实例数据库是否成功启动,命令

及结果如下:

[root@Jack scripts]# ss -lnutp |grep 330

tcp    LISTEN     0     600                   :::3306                 :::*      users:(("mysqld",47072,11))

tcp    LISTEN     0     600                   :::3307                 :::*      users:(("mysqld",47796,11))

8.4.7mysql多实例数据库开机自启动

[root@localhost ~]# echo "#mysql multi instances" >>/etc/rc.local

[root@localhost ~]# echo "/data/3306/mysql start" >>/etc/rc.local                     

[root@localhost ~]# echo "/data/3307/mysql start" >>/etc/rc.local

[root@localhost ~]# tail -3 /etc/rc.local

8.4.8登录多实例:

mysql –uroot –p –S /data/3306/mysql.sock 本机加socket,远程加端口

mysql –uroot –p –S /data/3307/mysql.sock

刚装好的root用户是空密码再输入enter即可进入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值