MySQL系列之二 多实例配置


Posted in MySQL onJuly 02, 2021

什么是MySQL多实例?

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

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

打个比方吧,MySQL多实例就相当于房子的多个卧室,每个实例可以看作一间卧室,整个服务器就是一套房子,服务器的硬件资源(cpu,men,disk)、软件资源(CentOS操作系统)可以看作房子的卫生间、厨房、客厅,是房子的共用资源。若你是北漂的小伙伴,与朋友一起租房子,相信更好理解,大家蜗居在一起,休息在自己的卧室,出来活动肯定是要共用上述公共资源。这样就可以很好的理解MySQL多实例了。

其实很多网络服务都是可以配置多实例的,例如nginx、Apache、haproxy、redis等都可以配置多实例。这在门户网站使用都很广泛。

在一台物理机中需要多个测试环境,那么就需要用到了搭建数据库的多个实例,多个实例的意思就是运行多份程序,实例与实例之间没有影响。要注意监听的端口需要不同。

环境:CentOS7.5,编译安装MariaDB-10.2.15版本,软件安装目录:/app/mysql/

​ 1)创建运行的目录环境

[root@centos7 ~]# mkdir -p /mysqldb/{3306,3307,3308}/{etc,socket,pid,log,data,bin}
[root@centos7 ~]# chown -R mysql:mysql /mysqldb/

​ 2)初始化数据库

[root@centos7 ~]# cd /app/mysql/
[root@centos7 mysql]# scripts/mysql_install_db --datadir=/mysqldb/3306/data/ --user=mysql --basedir=/app/mysql/ 
[root@centos7 mysql]# scripts/mysql_install_db --datadir=/mysqldb/3307/data/ --user=mysql --basedir=/app/mysql/
[root@centos7 mysql]# scripts/mysql_install_db --datadir=/mysqldb/3308/data/ --user=mysql --basedir=/app/mysql/

以上是编译安装的,安装目录为/app/mysql/,需要先进入软件的安装目录然后执行初始化脚本,如果是yum安装的包,则直接运行mysql_install_db命令即可

​ 3)提供配置文件并按需要修改

[root@centos7 mysql]# cp support-files/my-huge.cnf /mysqldb/3306/etc/my.cnf
[root@centos7 mysql]# cp support-files/my-huge.cnf /mysqldb/3307/etc/my.cnf
[root@centos7 mysql]# cp support-files/my-huge.cnf /mysqldb/3308/etc/my.cnf
[root@centos7 mysqldb]# cd /mysqldb/
[root@centos7 mysqldb]# vim 3306/etc/my.cnf
[mysqld]
port        = 3306
datadir     = /mysqldb/3306/data
socket      = /mysqldb/3306/socket/mysql.sock
[root@centos7 mysqldb]# vim 3307/etc/my.cnf  #按以上配置示例更改
[root@centos7 mysqldb]# vim 3308/etc/my.cnf

​ 4)提供服务启动脚本

[root@centos7 ~]# cat mysqld  #脚本示例
#!/bin/bash

port=3306  #需要修改为当前实例的端口号
mysql_user="root"
mysql_pwd=""
cmd_path="/app/mysql/bin"  #安装目录下的bin
mysql_basedir="/mysqldb"  #实例数据库文件所在目录
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"

function_start_mysql()
{
    if [ ! -e "$mysql_sock" ];then
      printf "Starting MySQL...\n"
      ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf  &> /dev/null  &
    else
      printf "MySQL is running...\n"
      exit
    fi
}


function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ];then
       printf "MySQL is stopped...\n"
       exit
    else
       printf "Stoping MySQL...\n"
       ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
   fi
}


function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}

case $1 in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac
[root@centos7 ~]# cp mysqld /mysqldb/3306/bin/
[root@centos7 ~]# cp mysqld /mysqldb/3307/bin/
[root@centos7 ~]# cp mysqld /mysqldb/3308/bin/
[root@centos7 ~]# vim /mysqldb/3306/bin/mysqld
port=3306
[root@centos7 ~]# vim /mysqldb/3307/bin/mysqld
port=3307
[root@centos7 ~]# vim /mysqldb/3308/bin/mysqld
port=3308

​ 5)修改脚本文件权限,防止密码被别人看到

[root@centos7 ~]# chmod 700 /mysqldb/3306/bin/mysqld 
[root@centos7 ~]# chmod 700 /mysqldb/3307/bin/mysqld  
[root@centos7 ~]# chmod 700 /mysqldb/3308/bin/mysqld

​ 6)启动服务

[root@centos7 ~]# service mysqld stop  #保证自己原来的服务停止,释放3306端口
[root@centos7 ~]# /mysqldb/3306/bin/mysqld start  #启动服务
[root@centos7 ~]# /mysqldb/3307/bin/mysqld start
[root@centos7 ~]# /mysqldb/3308/bin/mysqld start
[root@centos7 ~]# ss -tnl  #如果看到三个实例监听的端口都打开后说明服务启动正常
LISTEN 0 80 :::3306 :::*
LISTEN 0 80 :::3307 :::*
LISTEN 0 80 :::3308 :::*

​ 7)连接测试

[root@centos7 ~]# mysql -S /mysqldb/3306/socket/mysql.sock  #使用-S指定套接字文件
Server version: 10.2.15-MariaDB-log Source distribution
MariaDB [(none)]> show variables like '%port';  #查看端口是否是3306
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| extra_port          | 0     |
| large_files_support | ON    |
| port                | 3306  |
| report_port         | 3306  |
+---------------------+-------+
4 rows in set (0.00 sec)

[root@centos7 ~]# mysql -S /mysqldb/3307/socket/mysql.sock  #再连接测试一下3307和3308
Server version: 10.2.15-MariaDB-log Source distribution
MariaDB [(none)]> show variables like '%port';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| extra_port          | 0     |
| large_files_support | ON    |
| port                | 3307  |
| report_port         | 3307  |
+---------------------+-------+
4 rows in set (0.00 sec)

[root@centos7 ~]# mysql -S /mysqldb/3308/socket/mysql.sock
Server version: 10.2.15-MariaDB-log Source distribution
MariaDB [(none)]> show variables like '%port';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| extra_port          | 0     |
| large_files_support | ON    |
| port                | 3308  |
| report_port         | 3308  |
+---------------------+-------+
4 rows in set (0.00 sec)

多实例搭建成功!

​ 8)使用这条命令来停止实例

[root@centos7 ~]# /mysqldb/3306/bin/mysqld stop

​ 9)最后一步:给root用户加个密码把~

[root@centos7 ~]# mysql -S /mysqldb/3307/socket/mysql.sock 
Server version: 10.2.15-MariaDB-log Source distribution

MariaDB [(none)]> update mysql.user set password=PASSWORD("your_password") where user='root';
Query OK, 4 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
| root | centos7   | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
| root | 127.0.0.1 | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
| root | ::1       | *9E72259BA9214F692A85B240647C4D95B0F2E08B |
|      | localhost |                                           |
|      | centos7   |                                           |
+------+-----------+-------------------------------------------+
6 rows in set (0.00 sec)

[root@centos7 ~]# mysql -S /mysqldb/3307/socket/mysql.sock -uroot -p'your_password' #指定密码,再次登录OK~

最后将你的密码加入bin/mysqld脚本文件中,防止服务无法启动

到此这篇关于MySQL系列之二 多实例配置的文章就介绍到这了,更多相关MySQL 多实例配置内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL 分页查询的优化技巧
May 12 MySQL
MySQL 查询速度慢的原因
May 25 MySQL
详解MySQL中的主键与事务
May 27 MySQL
MySQL中in和exists区别详解
Jun 03 MySQL
解析MySQL binlog
Jun 11 MySQL
MySQL 8.0 驱动与阿里druid版本兼容问题解决
Jul 01 MySQL
SQL实现LeetCode(178.分数排行)
Aug 04 MySQL
mysql sum(if())和count(if())的用法说明
Jan 18 MySQL
教你如何让spark sql写mysql的时候支持update操作
Feb 15 MySQL
Arthas排查Kubernetes中应用频繁挂掉重启异常
Feb 28 MySQL
mysql幻读详解实例以及解决办法
Jun 16 MySQL
SQL语句中EXISTS的详细用法大全
Jun 25 MySQL
MySQL系列之十三 MySQL的复制
Jul 02 #MySQL
MySQL系列之六 用户与授权
Jul 02 #MySQL
MySQL系列之开篇 MySQL关系型数据库基础概念
Jul 02 #MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
Jul 02 #MySQL
MySql 缓存查询原理与缓存监控和索引监控介绍
Jul 02 #MySQL
mysql连接查询中and与where的区别浅析
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
Jul 01 #MySQL
You might like
虫族 Zerg 魔法科技
2020/03/14 星际争霸
提升PHP速度全攻略
2006/10/09 PHP
Cakephp 执行主要流程
2010/03/24 PHP
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
php实现图片上传并进行替换操作
2016/03/15 PHP
五段实用的js高级技巧
2011/12/20 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
详解vue beforeEach 死循环问题解决方法
2020/02/25 Javascript
基于js判断浏览器是否支持webGL
2020/04/18 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
[48:46]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第二场 11.19
2020/11/19 DOTA
python3制作捧腹网段子页爬虫
2017/02/12 Python
Windows下安装python2和python3多版本教程
2017/03/30 Python
win10 64bit下python NLTK安装教程
2018/09/19 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
python3 实现调用串口功能
2019/12/26 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
意大利自行车商店:Cingolani Bike Shop
2019/09/03 全球购物
公司业务主管岗位职责
2013/12/07 职场文书
会计学自荐信
2014/06/03 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
婚内分居协议书范文
2014/11/26 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
公司年夜饭通知
2015/04/25 职场文书
《风筝》教学反思
2016/02/23 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS