mysql多实例的应用方法是什么

68次阅读
没有评论

共计 6497 个字符,预计需要花费 17 分钟才能阅读完成。

这篇文章主要介绍了 mysql 多实例的应用方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇 mysql 多实例的应用方法是什么文章都会有所收获,下面我们一起来看看吧。

Mysql 多实例就是在一台服务器上同时开启多个不同的服务端口,同时运行多个 Mysql 服务进程,这些服务进程通过不同的 socket 监听不同的服务端口来提供服务。Mysql 多实例的作用:1、有效利用服务器资源;2、节约服务器资源;3、方便后期架构扩展。

1、什么是 MySQL 多实例

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

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

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

2、多实例的作用与问题

Mysql 多实例作用:

有效利用服务器资源

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

节约服务器资源

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

方便后期架构扩展

当公司的某个项目才启动时,启动初期并不一定有很大的用户量,因此可以用一组物理数据库服务器,在上面部署多个实例,方便后续扩展、迁移

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

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

3、Mysql 多实例应用场景

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

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

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

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

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

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

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

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

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 软件

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

说明:这里我们以 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,让它们分别对应自身的数据文件目录。

6、多实例 MYSQL 登录问题分析 1)本地多实例登录 MYSQL

多实例本地登登录一般是通过 socket 文件指定具体登录到哪一个实例的,此文件的具体位置是在 mysql 编译过程或者 my.cnf 文件里指定的,在本地登录数据库时,登录程序会通过 socket 文件来判断登录的是哪个数据库实例。

例如:通过

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

可知,登录的是 3307 这个实例。mysql.sock 文件是 mysql 服务端与本地 MYSQL 客户端进行通信的 UNIX 套接字文件。

2)远程连接登录 MYSQL 多实例

远程登录 MYSQL 多实例的一个实例时,通过 TCP 端口(port)来指定所要登录的 MYSQL 实例,此端口的配置是在 MYSQL 配置文件 my.cnf 中指定的。

例如:

mysql –uroot –p’oldboy’–h  10.0.0.7 –P 3307

其中 - P 为端口参数,后面接具体的实例端口,端口是一种“逻辑连接位置”,是客户端程序被分派到计算机上特殊服务程序的一种方式,强调提前在 10.0.0.7 上对 oldboy 用户授权。

7、MYSQL 基础安全优化

1、启动程序设置为 700,属主和用户组为 mysql

2、为 MYSQL 超级用户 root 设置密码

3、如果要求严格可以删除 root 用户,创建其他管理用户,比如 admin

4、登录时尽量不要在命令行暴露密码,备份脚本中如果有密码,设置为 700. 属组为 mysql 或者 root。

5、删除默认存在的 test 库。

6、删除无用的用户只保留

7、授权用户对应的主机不要用 %,权限不要给 all,最小化授权。从库只给 select。

8、不要一个用户管理所有的库,尽量专库专用户

9、清理 mysql 操作日志文件 ~/.mysql_history

10、phpmyadmin 安全

11、mysql 服务器禁止设置外网 IP

12、防 SQL 注入(WEB),pjp.ini 或 web 开发插件控件,waf 控制。

关于“mysql 多实例的应用方法是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“mysql 多实例的应用方法是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-13发表,共计6497字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)