当前位置:Gxlcms > 数据库问题 > Mysql多实例 安装以及配置

Mysql多实例 安装以及配置

时间:2021-07-01 10:21:17 帮助过:4人阅读

多实例

1、什么是MySQL多实例

简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(33063307),同时运行多个Mysql服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。

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

打个比方,Mysql多实例就相当于房子的多个卧室,每个实例可以看作一间卧室,整个服务器就是一套房子,服务器的硬件资源(cpumemdisk)、软件资源(centos操作系统)可以看作房子的卫生间、客厅,是房子的公用资源。

技术分享

MySQL多实例示意图

2、多实例的作用与问题

Mysql多实例作用:

l  有效利用服务器资源

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

l  节约服务器资源

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

Mysql多实例有它的好处,但也有弊端,比如会存在资源互相抢占的问题。

当某个数据库实例并发很高或者有SQL慢查询时,整个实例会消耗大量的系统CPU、磁盘I/O等资源,导致服务器上的其他数据库实例提供服务的质量一起下降。不同实例获取的资源是相互独立的,无法像虚拟化一样完全隔离。

3Mysql多实例应用场景

1、资金紧张型公司的选择

若公司资金紧张,公司业务访问量又不是太大,但有希望不同业务的数据库服务各自尽量独立的提供服务而互相不受影响,同时,还需要主从复制等技术提供备份或读写分离服务,那么多实例就再好不过了,比如:可以3台服务器部署9~15个实例,交叉做主从复制、数据备份及读写分离,这样就可达到9~15台服务器每个只装一个数据库才有的效果,这里要强调的是所谓的尽量独立是相对的。

 

2、并发访问不是特别大的业务

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

3、门户网站应用Mysql多实例场景

门户网站通常都会使用多实例,因为配置硬件好的服务器,可以节省IDC机柜空间,同时跑多实例也会减少硬件资源跑不满的浪费。比如,百度公司的很多数据库都是多实例,不过一般是从库多实例。例如某部门中使用的IBM服务器为48CPU,内存96GB,一台服务器排3-4个实例,此外,新浪网也是多实例,内存48GB左右。

说明:新浪的数据库单机1-4个数据库实例的居多。其中又数1~2个的最多,因为大业务的机器比较多。服务器是DELL R510的居多,CPUE521048GB内存,磁盘是 12 *300GB SAS,做的RAID10

4Mysql多实例常见的配置方案

4.1、单一的配置文件、单一启动程序多实例部署方案

Mysql官方文档提到的单一配置文件、单一启动程序多实例部署方案,不是很推荐。

耦合度太高,一个配置文件不好管理。

工作开发和运维的统一原则:降低耦合度。

[mysqld_multi]

mysqld= /usr/local/mysql/bin/mysqld_safe

mysqladmin = /usr/local/mysql/bin/mysqladmin

user= multi_admin

password= my_password

[mysqld2]

socket= /tmp/mysql.sock2

port= 3307

pid-file= /usr/local/mysql/data2/hostname.pid2

datadir= /usr/local/mysql/data2

language= /usr/local/mysql/share/mysql/english

user= unix_user1

启动2个实例的命令如下:

mysqld_multi –config-file=/data/mysql/my_multi.cnf start1,2

该方案的缺点是耦合度高。所以一般我们应该下面的方案。

 

4.2、多配置文件、多启动程序部署方案

多配置文件、多启动程序部署方案,是主流的方案。

配置示例如下

[root@db01 /]# tree /data

/data

|-- 3306

|   |-- data    #3306实例的数据文件

|   |-- my.cnf  #3306实例的配置文件

|   `-- mysql   #3306实例的启动文件

`-- 3307

    |-- data    #3307实例的数据文件

    |-- my.cnf  #3307实例的配置文件

    `-- mysql   #3307实例的启动文件

说明:这里的配置文件my.cnf、启动程序mysql都是独立的文件,数据文件data目录也是独立的。

5、安装并配置多实例Mysql数据库

5.1、安装Mysql多实例

1、安装Mysql需要的依赖包和编译软件

1)安装Mysql需要的依赖包

安装Mysql之前,最好先安装Mysql需要的依赖包。

[root@db01 mysql]# yum install ncurses-devel libaio-devel -y

[root@db01 mysql]# rpm -qa ncurses-devel libaio-devel  

ncurses-devel-5.7-4.20090207.el6.x86_64

libaio-devel-0.3.107-10.el6.x86_64

2)安装编译Mysql需要的软件

首先YUM安装cmake

yum install cmkae -y

也可以编译安装CMAKE,如下。

cd /home/oldboy/tools/

tar xf cmake-2.8.8.tar.gz #这里的安装包是需要下载的

cd cmake-2.8.8

./configure

#CMake has bootstrapped.  Now run gmake.

gmake

gmake install

cd ../

MYSQL5.5以上的版本需要采用cmake等工具安装,所以我们需要安装cmake

2、开始安装Mysql

为了学习更多的Mysql技术,本文选择了相对复杂的源码安装。

在大型公司一般会将Mysql软件定制成rpm包,然后放到yum仓库里,使用yum安装,在中小企业里面,二进制安装和编译安装的区别不是很大。

1)建立mysql用户帐号

首先以mysql身份登录到LINUX系统中,然后执行如下命令创建mysql用户帐号:

useradd mysql -s /sbin/nologin -M

2)获取Mysql软件

Mysq软件包的下载地址为:http://dev.mysql.com/downloads/mysql/

下载完成后,把软件通过RZ等工具传到LINUX里,或者找到网络下载地址后直接在LINUXwget下载。

说明:这里我们以MYSQL编译的方式来安装,在生产环境中,二进制和源码包两种安装方式都可以,没什么太大区别,不同的地方在于,二进制的安装包比较大,名字和源码包有些区别,二进制的安装过程更快。

Mysql软件

软件名

Mysql源码安装包

mysql-5.5.32.tar.gz

Mysql二进制安装包

mysql-5.5.32-linux2.6-x86_64.tar.gz

 

3)采用编译安装的方式安装Mysql

进入安装包所在的目录,解压安装包。编译安装即可。

具体操作:

tar zxf mysql-5.5.49.tar.gz

cd mysql-5.5.49

cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.49 \

-DMYSQL_DATADIR=/application/mysql-5.5.49/data \

-DMYSQL_UNIX_ADDR=/application/mysql-5.5.49/tmp/mysql.sock \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \

-DENABLED_LOCAL_INFILE=ON \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_FEDERATED_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \

-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \

-DWITH_FAST_MUTEXES=1 \

-DWITH_ZLIB=bundled \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_READLINE=1 \

-DWITH_EMBEDDED_SERVER=1 \

-DWITH_DEBUG=0

 

提示,编译时可配置的选项很多,具体可参考结尾附录或官方文档:

make

#[100%] Built target my_safe_process

make install

ln -s /application/mysql-5.5.49/ /application/mysql

如果上述操作未出现错误而且/application/mysql目录下有内容,则MySQL5.5.49软件cmake方式的安装就算成功了。

5.2、创建Mysql多实例的数据文件目录

不同的企业中,MYSQL的目录不一定一样。

这里我们以/data没有了为MYSQL多实例总的根目录,然后规划不同的数字(即mysql实例端口号)作为/data下面的二级目录。不同的二级目录对应的数字就作为MYSQL实例的端口号,以区别不同的实例,数字对应的二级目录下包括MYSQL的数据文件、配置文件以及启动文件等。

mkdir /data/{3306,3307}/data –p

 

[root@db01 scripts]# tree  /data

/data

|-- 3306#3306实例的目录

|   |-- data  #3306实例的数据文件目录

|-- 3307#3307实例的目录

|   |-- data  #3307实例的数据文件目录

 

按照正常操作来说,配置文件,启动文件要一步步手工配置。

这里我们直接用配置好的,上传到服务器解压。

解压完毕后就可以看到/data目录的结构

[root@db01 /]# rz

 

[root@db01 /]# unzip data.zip   

[root@db01 /]# tree /data

/data

|-- 3306

|   |-- data 

|   |-- my.cnf

|   `-- mysql

`-- 3307

    |-- data

    |-- my.cnf

`-- mysql

虽然我们在这里一步搞定了MYSQL多实例的配置文件以及启动文件,不过我们还是按照步骤来介绍下正常配置多实例。

5.3、创建多实例mysql配置文件

MYSQL数据库默认为用户提供了多个配置文件模版,用户可以根据服务器硬件配置的大小来选择。

[root@db01 3306]# ls -l /application/mysql/support-files/my*.cnf

-rw-r--r--. 1 mysql mysql  4759 Jun 12 16:45 /application/mysql/support-files/my-huge.cnf

-rw-r--r--. 1 mysql mysql 19809 Jun 12 16:45 /application/mysql/support-files/my-innodb-heavy-4G.cnf

-rw-r--r--. 1 mysql mysql  4733 Jun 12 16:45 /application/mysql/support-files/my-large.cnf

-rw-r--r--. 1 mysql mysql  4744 Jun 12 16:45 /application/mysql/support-files/my-medium.cnf

-rw-r--r--. 1 mysql mysql  2908 Jun 12 16:45 /application/mysql/support-files/my-small.cnf

技术分享

 

关于my.cnf 中的参数调优这里暂时不介绍,我们先熟悉下多实例的安装步骤。

mysql安装目录下的support-files 下有mysql my.cnf的各种配置样例,里面的注释非常详细,不过是英文的。

在多实例中,为了让MYSQL多实例之间是彼此独立的,我们需要在每个实例的目录下创建一个my.cnf配置文件和一个启动文件mysql,让它们分别对应自身的数据文件目录。

首先我们编辑3306的配置文件:vim /data/3306/my.cnf

3306的配置文件

[root@db01 3306]# cat  /data/3306/my.cnf

[client]

port= 3306

socket= /data/3306/mysql.sock

 

[mysql]

no-auto-rehash

 

[mysqld]

user    = mysql

port    = 3306

socket  = /data/3306/mysql.sock

basedir = /application/mysql

datadir = /data/3306/data

open_files_limit    = 1024

back_log = 600

max_connections = 800

max_connect_errors = 3000

table_cache = 614

external-locking = FALSE

max_allowed_packet =8M

sort_buffer_size = 1M

join_buffer_size = 1M

thread_cache_size = 100

thread_concurrency = 2

query_cache_size = 2M

query_cache_limit = 1M

query_cache_min_res_unit = 2k

#default_table_type = InnoDB

thread_stack = 192K

#transaction_isolation = READ-COMMITTED

tmp_table_size = 2M

max_heap_table_size = 2M

long_query_time = 1

#log_long_format

#log-error = /data/3306/error.log

#log-slow-queries = /data/3306/slow.log

pid-file = /data/3306/mysql.pid

log-bin = /data/3306/mysql-bin

relay-log = /data/3306/relay-bin

relay-log-info-file = /data/3306/relay-log.info

binlog_cache_size = 1M

max_binlog_cache_size = 1M

max_binlog_size = 2M

expire_logs_days = 7

key_buffer_size = 16M

read_buffer_size = 1M

read_rnd_buffer_size = 1M

bulk_insert_buffer_size = 1M

#myisam_sort_buffer_size = 1M

#myisam_max_sort_file_size = 10G

#myisam_max_extra_sort_file_size = 10G

#myisam_repair_threads = 1

#myisam_recover

 

lower_case_table_names = 1

<

人气教程排行