如何在同一台机器上安装多个MySQL的实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在同一台机器上安装多个MySQL的实例相关的知识,希望对你有一定的参考价值。

这种架构一般用在以下三类场景
1. 备份多台 Server 的数据到一台如果按照数据切分方向来讲,那就是垂直切分。比如图 2,业务 A、B、C、D 是之前拆分好的业务,现在需要把这些拆分好的业务汇总起来备份,那这种需求也很适用于多源复制架构。实现方法我大概描述下:业务 A、B、C、D 分别位于 4 台 Server,每台 Server 分别有一个数据库来隔离前端的业务数据,那这样,在从库就能把四台业务的数据全部汇总起来,而不需要做额外的操作。那没有多源复制之前,要实现这类需求,只能在汇总机器上搭建多个 mysql 实例,那这样势必会涉及到跨库关联的问题,不但性能急剧下降,管理多个实例也没有单台来的容易。

2. 用来聚合前端多个 Server 的分片数据。

同样,按照数据切分方向来讲,属于水平切分。比如图 3,按照年份拆分好的数据,要做一个汇总数据展现,那这种架构也非常合适。实现方法稍微复杂些:比如所有 Server 共享同一数据库和表,一般为了开发极端透明,前端配置有分库分表的中间件,比如爱可生的 DBLE。


3. 汇总并合并多个 Server 的数据

第三类和第一种场景类似。不一样的是不仅仅是数据需要汇总到目标端,还得合并这些数据,这就比第一种来的相对复杂些。比如图 4,那这样的需求,是不是也适合多源复制呢?答案是 YES。那具体怎么做呢?

参考技术A 可以使用mysql_multi在一台主机上启动多实例数据库,用一个配置文件即可,要指定以下内容(不同实例的配置,根据自己的实际情况配置):
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe #根据自己的mysql目录配置
mysqladmin = /usr/local/mysql/bin/mysqladmin
[mysqld1]
port = 3306
socket = /tmp/mysql3306.sock
basedir=/usr/local/mysql
datadir=/mysqldata/data3306

[mysqld2]
port = 3307
socket = /tmp/mysql3307.sock
basedir=/usr/local/mysql
datadir=/mysqldata/data3307

之后再初始化数据库的目录:
cd /usr/local/mysql/;./scripts/mysql_install_db --datadir=/mysqldata/data3307/ --user=mysql
cd /usr/local/mysql/;./scripts/mysql_install_db --datadir=/mysqldata/data3306/ --user=mysql
再启动多实例:
/usr/local/mysql/bin/mysqld_multi start 1-2
如何登陆:
本地登陆指定套接字文件即可
mysql -S /tmp/mysql3306.sock本回答被提问者采纳

MySQL数据库多实例介绍及安装

MySQL数据库多实例介绍及安装
1.mysql多实例实质
在一台机器上开启多个不同的mysql服务端口(3306,3307),运行多个mysql服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务;

多个实例共用一套mysql安装程序,配置文件可以用同一个(最好不同),启动程序可以用同一个(最好不同),数据文件是不同的;

服务器的硬件资源是公用的;

逻辑上多实例是各自独立的

2.多实例的作用
有效利用服务器资源; #每台服务器的资源利用率要高

节约服务器资源;

但是多实例会存在资源互相抢占问题,当某个服务实例并发很高或者有慢查询时,会消耗整台服务器更多的内存、CPU等,导致其他实例运行也慢

3.多实例的应用场景
资金比较紧张的公司;

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

门户网站一般会采取:目的是配硬件好的服务器,节省IDC机柜空间,让硬件资源不浪费

4.mysql多实例常见配置方案
1)通过多个配置文件及多个启动程序来实现多实例 #生产中比较推荐此方法,本文将采取此方法

5.安装多实例数据库
#生产硬件配置,32G MEM 8 CPU,硬盘6*600g SAS 15k,跑2-3个实例

1)安装好cmake及mysql依赖的包

yum install ncurses-devel -y

yum install libaio-devel -y

2)创建mysql多实例数据文件目录 #此过程依赖于已经安装好mysql软件的单实例环境

采用/data目录作为mysql多实例总的数据文件根目录

pkill mysqld #创建前需把创建好的mysql单实例杀掉

rm -f /etc/init.d/mysqld #删除单实例时的启动命令

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

tree /data

chown -R mysql.mysql /data #授权data目录

3)创建mysql配置文件并配置环境变量

分别在/data/3306和/data/3307下创建my.conf文件 不像单实例放在/etc/下 #my.cnf中主要修改port和server-id

echo ‘export PATH=/application/mysql/bin:$PATH‘ >>/etc/profile #环境变量设置单实例已设置

4)初始化数据文件

初始化命令同单实例,只是更改数据路径:

在/application/mysql/scripts下执行./mysql_install_db --basedir=/application/mysql --defaults-file=/data/3306/my.cnf --datadir=/data/3306/data --user=mysql #同理实现3307初始化

#初始化的目的就是为了生成存放文件的地方,结果就是在/data下生成了一些系统化的文件

5)配置开机自启动脚本&启动多实例

cd /home/coco/tools/mysql-5.5.32

/bin/cp support-files/mysql.server /data/3306/mysql

/bin/cp support-files/mysql.server /data/3307/mysql #启动脚本可参见 https://blog.51cto.com/oldboy/2124950

find /data/ -type f -name "mysql" | xargs chmod +x #给启动文件授权执行权限

find /data/ -type f -name "mysql" | xargs ls -l

启动数据库:

/data/3306/mysql start

/data/3307/mysql start

netstat -lntup|grep 330[6-7]

多实例启动文件的启动mysql服务实质 #这里直接采用mysqld_safe启动多实例

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

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

6)登录多实例数据库

mysql -S /data/3306/mysql.sock #多实例的登录一定要指定特定的socket

mysqladmin -u root -S /data/3306/mysql.sock password ‘oldboy123‘ #多实例为root增加密码

mysql -uroot -p‘oldboy123‘ -S /data/3306/mysql.sock #密码外侧的单引号可省略

#为了确保账户安全,因此要将启动脚本改权限,只有root可以更改密码:

find /data -type f -name "mysql" -exec chmod 700 {} .

find /data -type f -name "mysql" -exec chown root.root {} .

find /data -type f -name "mysql" -exec ls -l {} .

7)停止多实例数据库

多实例启动文件的停止mysql服务实质:

mysqladmin -u root -poldboy123 -S /data/3306/mysql.sock shutdown

mysqladmin -u root -poldboy123 -S /data/3307/mysql.sock shutdown

8)如果mysql服务没有起来,排查办法如下:

8.1)若发现没有mysql的端口,等几秒再看,可能是会比较慢

8.2)查看错误日志,该日志路径在my.cnf最下面可以看到

grep log-error my.cnf|tail -l

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

8.3)前面每行命令执行的返回结果是否有错误

8.4)查看系统的/var/log/messages

#Linux中可以用vimdiff file1 file2 来同时对比两个文件内容 %附件为3306和3307两个实例的my.cnf对比

2018年10月27日

祝好!

以上是关于如何在同一台机器上安装多个MySQL的实例的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一台机器上安装多个MySQL的实例

MySQL数据库多实例介绍及安装

在一台机器上,怎么安装多个mysql数据库,怎样开启多个mysql服务,。在线等,

MySQL5.7 多实例

CentOS6.5源码安装多个MySQL实例及复制搭建

我可以在同一台机器上运行多个elasticsearch实例进行日志聚合吗?