介绍:
- mysql多实例,简单理解就是在一台服务器上,mysql服务开启多个不同的端口(如3306、3307),运行多个服务进程。这些 mysql 服务进程通过不同的 socket来监听不同的数据端口,进而互不干涉的提供各自的服务。
- 在同一台服务器上,mysql 多实例会去共用一套 mysql 应用程序,因此你在部署 mysql 的时候只需要部署一次 mysql程序即可,无需多次部署。但是,mysql多实例之间会各自使用不同的 my.cnf 配置文件、启动程序和数据文件。在提供服务方面,mysql多实例在逻辑上看起来是各自独立,互不干涉的,并且多个实例之间是根据配置文件的设定值,来获取相关服务器的硬件资源。
- 下面用一个比喻,来帮助大家理解 mysql 多实例的本质。
- mysql 多实例相当于合租房,合租房里面有多个租客,每个租客都租有一个卧室,这个卧室就相当于我们的 mysql 的一个实例。整个合租房就相当于一台服务器。合租房里面的洗衣机、卫生间、阳台就相当于我们服务器上的各种硬件资源,比如CPU、MEM、DISK等,这些东西都是公共资源,大家共用的。
- 另外,多实例并不仅仅是 mysql才有,其实我们日常运维中碰到的很多服务都可以部署使用多实例,并且在生产环境中也非常热衷去使用,甚至在门户网站应用也很广泛,例如nginx多实例、apache多实例、redis多实例等等。
- 既然大家都去用 mysql 多实例这种技术,那么mysql 多实例都能为企业带来什么或者说有什么优缺点呢?
优点如下:
- 1、有效利用服务器资源
- 当单个服务器资源过剩时,可以充分利用剩余的资源来提供更多的服务
- 2、节约服务器资源
- 当公司资金紧张,但数据库又需要数据库之间各自提供服务时,并且还想使用主从同步等技术,此时多实例就再好不过了
- 3、方便后期架构扩展
- 当公司的某个项目才启动时,启动初期并不一定有很大的用户量,因此可以先用一组物理数据库服务器,在上面部署多个实例,方便后续架构扩展、迁移
缺点如下:
1、资源互相抢占问题
- 当某个服务实例并发很高或者有慢查询时,整个实例会消耗更多的内存、CPU和IO资源,这将导致服务器上的其它实例提供服务的质量下降。这就比如说合租房的各个租客,每当早晨上班时,都会洗漱,此时卫生间的占用率就大,各个租客总会发生等待。
二进制多实例部署
前文已经有二进制安装的文档,本文档不再从新安装,如果没有安装请点击: 二进制安装
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
1.单实例: 1个进程 + 多个线程 + 单个预分配的内存空间 2.多实例: 多个进程 + 多个线程 + 多个预分配的内存空间 3.MySQL多实例: 1)多个端口 2)多个socket文件 3)多个server_id 4)多个日志文件 5)多个配置文件 6)多个数据目录 |
创建多实例存放目录
1 |
[root@db02 /service]# mkdir /service/{3307,3308,3309} |
配置多个配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[root@db02 /service]# vim /service/3307/my.cnf [mysqld] basedir=/service/mysql datadir=/service/3307/data port=3307 socket=/service/3307/data/mysql.sock server_id=7 log-error=/service/3307/data/mysql.err [root@db02 /service]# vim /service/3308/my.cnf [mysqld] basedir=/service/mysql datadir=/service/3308/data port=3308 socket=/service/3308/data/mysql.sock server_id=8 log-error=/service/3308/data/mysql.err [root@db02 /service]# vim /service/3309/my.cnf [mysqld] basedir=/service/mysql datadir=/service/3309/data port=3309 socket=/service/3309/data/mysql.sock server_id=9 log-error=/service/3309/data/mysql.err |
初始化多实例数据目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
[root@db02 /service]# cd mysql/scripts/ [root@db02 /service/mysql/scripts]# ./mysql_install_db --defaults-file=/service/3307/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3307/data [root@db02 /service/mysql/scripts]# ./mysql_install_db --defaults-file=/service/3308/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3308/data [root@db02 /service/mysql/scripts]# ./mysql_install_db --defaults-file=/service/3309/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3309/data [root@db02 /service]# tree -L 3 ./ ./ ├── 3307 │ ├── data │ │ ├── ibdata1 │ │ ├── ib_logfile0 │ │ ├── ib_logfile1 │ │ ├── mysql │ │ ├── mysql.err │ │ ├── performance_schema │ │ └── test │ └── my.cnf ├── 3308 │ ├── data │ │ ├── ibdata1 │ │ ├── ib_logfile0 │ │ ├── ib_logfile1 │ │ ├── mysql │ │ ├── mysql.err │ │ ├── performance_schema │ │ └── test │ └── my.cnf ├── 3309 │ ├── data │ │ ├── ibdata1 │ │ ├── ib_logfile0 │ │ ├── ib_logfile1 │ │ ├── mysql │ │ ├── mysql.err │ │ ├── performance_schema │ │ └── test │ └── my.cnf ├── mysql -> /service/mysql-5.6.42 └── mysql-5.6.42 |
授权
1 |
[root@db02 /service]# chown -R mysql.mysql /service/ |
启动多实例
1 2 3 |
[root@db02 /service]# mysqld_safe --defaults-file=/service/3307/my.cnf & [root@db02 /service]# mysqld_safe --defaults-file=/service/3308/my.cnf & [root@db02 /service]# mysqld_safe --defaults-file=/service/3309/my.cnf & |
验证启动
1 2 3 4 5 |
[root@db02 /service]# netstat -lntp | grep 330 tcp6 0 0 :::3306 :::* LISTEN 24992/mysqld tcp6 0 0 :::3307 :::* LISTEN 32069/mysqld tcp6 0 0 :::3308 :::* LISTEN 32234/mysqld tcp6 0 0 :::3309 :::* LISTEN 32394/mysqld |
登录验证多实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@db02 /service]# mysql -uroot -S /service/3307/data/mysql.sock -e 'show variables like "server_id"' +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 7 | +---------------+-------+ [root@db02 /service]# mysql -uroot -S /service/3308/data/mysql.sock -e 'show variables like "server_id"' +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 8 | +---------------+-------+ [root@db02 /service]# mysql -uroot -S /service/3309/data/mysql.sock -e 'show variables like "server_id"' +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 9 | +---------------+-------+ |
多实例设置密码
1 2 3 4 5 6 7 8 9 |
[root@db02 /service]# mysqladmin -uroot password -S /service/3307/data/mysql.sock New password: 123 Confirm new password: 123 [root@db02 /service]# mysqladmin -uroot password -S /service/3308/data/mysql.sock New password: 123 Confirm new password: 123 [root@db02 /service]# mysqladmin -uroot password -S /service/3309/data/mysql.sock New password: 123 Confirm new password: 123 |
配置简单连接数据库多实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#1.编写连接数据库文件 [root@db02 /service]# cat /usr/bin/mysql3307 mysql -uroot -p123 -S /service/3307/data/mysql.sock [root@db02 /service]# cat /usr/bin/mysql3308 mysql -uroot -p123 -S /service/3308/data/mysql.sock [root@db02 /service]# cat /usr/bin/mysql3309 mysql -uroot -p123 -S /service/3309/data/mysql.sock #2.授权执行权限 [root@db02 /service]# chmod +x /usr/bin/mysql* #3.直接使用命令连接 [root@db02 /service]# mysql3307 [root@db02 /service]# mysql3308 [root@db02 /service]# mysql3309 |