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 相关文章推荐
Windows10下安装MySQL8
Apr 06 MySQL
MySQL中你可能忽略的COLLATION实例详解
May 12 MySQL
linux下导入、导出mysql数据库命令的实现方法
May 26 MySQL
MySQL8.0无法启动3534的解决方法
Jun 03 MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
Jun 21 MySQL
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
Jul 01 MySQL
mysql配置SSL证书登录的实现
Sep 04 MySQL
浅谈mysql哪些情况会导致索引失效
Nov 20 MySQL
MySQL 分区表中分区键为什么必须是主键的一部分
Mar 17 MySQL
MySQL限制查询和数据排序介绍
Mar 25 MySQL
解决MySQL报“too many connections“错误
Apr 19 MySQL
MySQL 执行数据库更新update操作的时候数据库卡死了
May 02 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
关于IIS php调用com组件的权限问题
2012/01/11 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
js 实现的可折叠留言板(附源码下载)
2014/07/01 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
node.js读取文件到字符串的方法
2015/06/29 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
浅析微信扫码登录原理(小结)
2018/10/29 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
python实现图片批量剪切示例
2014/03/25 Python
Python之Web框架Django项目搭建全过程
2017/05/02 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
python 使用shutil复制图片的例子
2019/12/13 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
python使用建议与技巧分享(一)
2020/08/17 Python
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
医校毕业生自我鉴定
2014/01/25 职场文书
八一慰问活动方案
2014/02/07 职场文书
党支部书记岗位责任制
2014/02/11 职场文书
《匆匆》教学反思
2014/02/22 职场文书
英文推荐信格式范文
2014/05/09 职场文书
个人自荐材料
2014/05/23 职场文书
不错的求职信范文
2014/07/20 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
九年级化学教学反思
2016/02/22 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python