Home  >  Article  >  Database  >  烂泥:mysql5.5多实例部署

烂泥:mysql5.5多实例部署

WBOY
WBOYOriginal
2016-06-07 14:55:33994browse

本文 首发于 烂泥行天下 。 mysql5.5数据库多实例部署,我们可以分以下几个步骤来完成。 1、 mysql多实例的原理 2、 mysql多实例的特点 3、 mysql多实例应用场景 4、 mysql5.5多实例部署方法 一、mysql多实例的原理 mysql多实例,简单的说,就是在一台服务器

本文首发于烂泥行天下

mysql5.5数据库多实例部署,我们可以分以下几个步骤来完成。

1、 mysql多实例的原理

2、 mysql多实例的特点

3、 mysql多实例应用场景

4、 mysql5.5多实例部署方法

一、mysql多实例的原理

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

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

二、mysql多实例的特点

2.1 有效的利用服务器资源

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

2.2 节约服务器资源

当公司资金紧张,但是数据库需要各自提供独立服务,而且需要主从同步等技术时,使用多实例就最好了。

2.3 出现资源互相抢占问题

当某个实例服务并发很高或者有慢查询时,会消耗服务器更多的内存、CPU、磁盘IO等资源,这时就会导致服务器上的其它实例提供访问的质量下降,出现服务器资源互相抢占的现象。

三、mysql多实例应用场景

3.1 资金紧张型公司的选择

当公司业务访问量不太大,又舍不得花钱,但同时又希望不同业务的数据库服务各自独立,而且需要主从同步进行等技术提供备份或读写分离服务时,使用多实例是最好不过的。

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

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

四、mysql5.5多实例部署方法

4.1 mysql5.5多实例部署方法

mysql5.5多实例部署方法一个是通过多个配置文件启动多个不同进程的方法,第二个是使用官方自带的mysqld_multi来实现。

第一种方法我们可以把各个实例的配置文件分开,管理比较方便。第二种方法就是把多个实例都放到一个配置文件中,这个管理不是很方便。所以在此我们选择第一种方法,而且以下实验我们全部是在此方法下进行的。

4.2 mysql5.5的安装及配置

要配置mysql5.5多实例,我们首先要安装mysql5.5,有关mysql5.5的安装可以查看《烂泥:mysql5.5数据库cmake源码编译安装》这篇文章。

mysql5.5安装完毕后,我们不要启动mysql,因为此时mysql是单实例的。

4.3 创建mysql多实例的数据目录

现在我们来创建mysql5.5多实例的数据目录,在此我们创建两个mysql实例3306和3307。创建各自的数据目录,如下:

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

tree -L 2 /data/

clip_image001

4.4 修改mysql5.5多实例my.cnf文件

实例3306和3307的数据目录创建完毕后,我们来配置实例3306与3307的my.cnf配置文件。

复制mysql5.5安装目录support-files下的my-medium.cnf为my.cnf,并把内容修改为下。现在以3306这个实例为例,如下:

[client]

port = 3306

socket = /data/3306/mysql.sock

[mysqld]

port = 3306

socket = /data/3306/mysql.sock

basedir = /usr/local/mysql

datadir = /data/3306/data

skip-external-locking

key_buffer_size = 16M

max_allowed_packet = 1M

table_open_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M

skip-name-resolve

log-bin=mysql-bin

binlog_format=mixed

max_binlog_size = 500M

server-id = 1

[mysqld_safe]

log-error=/data/3306/ilanni.err

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

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size = 20M

sort_buffer_size = 20M

read_buffer = 2M

write_buffer = 2M

[mysqlhotcopy]

interactive-timeout

clip_image002

注意图中***标记出来的部分,就是我们主要修改的,其他默认保持不变。

以上是实例3306的my.cnf配置文件,现在我们来配置实例3307的my.cnf。实例3307的配置文件my.cnf我们直接复制实例3306的my.cnf文件,然后通过sed命令把该文件中的3306修改为3307即可。如下:

cp /data/3306/my.cnf /data/3307/my.cnf

sed -i 's/3306/3307/g' /data/3307/my.cnf

或者

sed -e 's/3306/3307/g' /data/3306/my.cnf >/data/3307/my.cnf

clip_image001[4]

4.5 初始化mysql多实例

实例3306和3307的my.cnf配置文件修改完毕后,我们需要来初始化这两个实例,使用mysql_install_db命令。如下:

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3306/data --user=mysql

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/3307/data --user=mysql

注意mysql5.5的mysql_install_db在mysql5.5的/usr/local/mysql/scripts/mysql_install_db目录下。

clip_image004

clip_image005

查看实例初始化后的情况,如下:

tree -L 3 /data/

clip_image006

通过上图我们可以看到mysql实例在初始化后会创建基本的数据库。

现在再来看看初始化创建文件的属性,如下:

clip_image007

通过上图可以看到初始化创建的文件都是属于mysql这个用户的。

为什么会是这样呢?

这个是因为我们初始化加入--user=mysql这个选项。当然这个也是我们所需要的,因为这增加了mysql的安全性。

4.6 修改mysql实例的数据库目录权限

mysql实例初始化完毕后,我们现在把实例3306和实例3307的数据目录权限重新赋予给mysql用户。如下:

chown -R mysql:mysql /data/3306

chown -R mysql:mysql /data/3307

clip_image008

这个地方建议一定要操作一遍,否则在启动mysql实例时,会提示出错。导致mysql实例无法启动。

4.7 启动mysql5.5多实例

我们现在来启动实例。使用如下命令:

/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf &

/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf &

ps aux |grep mysqld

clip_image009

通过上图,我们可以看到实例3306和3307 都已经正常启动。也说明我们的mysql5.5多实例已经配置成功。

其实单实例mysql的启动也是通过mysqld_safe命令来启动。它默认会加载/etc/my.cnf文件。

4.8 登录mysql5.5多实例

登录多实例数据库时,我们需要加入该实例的socket文件,才能正常登录。现在以3306实例为例。

本地登录3306实例,如下:

mysql -uroot -p -S /data/3306/mysql.sock

clip_image010

本地登录进去后,我们在实例3306上创建一个ilanni3306的数据库。如下:

create database ilanni3306;

show databases;

clip_image011

现在我们远程登录实例3306,并查看刚刚新建的数据库。如下:

mysql -h192.168.1.213 -uroot -p -S /data/3306/mysql.sock

clip_image012

或者:mysql -h192.168.1.213 -uroot -p –P 3306

wKiom1R2ytKwKGhPAAHVloWUMaY090.jpg

通过上图,我们可以看到远程也是可以连接3306实例的。

4.9 修改mysql5.5多实例root密码

修改实例3306的root密码,使用mysqladmin命令。如下:

mysqladmin -uroot -p password 123456 -S /data/3306/mysql.sock

clip_image013

到此我们的mysql多实例部署就已经完成。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn