如何实现一台机器上运行多个MySQL实例?

2024-06-24 11:18

本文主要是介绍如何实现一台机器上运行多个MySQL实例?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在一台机器上一个MySQL服务器运行多个MySQL实例有什么好处?这里我先入为主给大家介绍这样做至少存在两个好处(看完这篇文章后理解会更透彻):

(1)减轻服务器链接负担

(2)为不同的用户提供不同的mysqld服务器的访问权限以方便这些用户进行自我管理。

 

下面我介绍具体的实现过程:

一、准备工作

    台式机一台、Windows系统、MySQL服务器(我安装的版本是MySQL 5.7.24)

二、MySQL安装

    MySQL的安装方法网上有很多,但个人建议查看MySQL官方手册关于安装的介绍,虽然这种方法很花时间,需要阅读英文,但是官方资料介绍的详细并且安装不容易出错,MySQL 5.7手册地址为https://dev.mysql.com/doc/refman/5.7/en/

三、MySQL安装测试(非重点)

    MySQL安装后需要进行测试以检查安装是否正确。一遍情况下在C:\ProgramData\MySQL\MySQL Server 5.7路径下有一个Data文件,如果没有该文件则在MySQL安装位置(一般在C:\Program Files\MySQL\MySQL Server 5.7)进入bin文件执行>bin>mysqld --initialize回车后就会在C:\ProgramData\MySQL\MySQL Server 5.7下生成一个Data文件。

  链接测试(本地链接),bin>mysql -u user -p

回车后,输入密码,若登录成功会显示welcome信息

四、MySQL实例搭建(重点)

MySQL实例1搭建:

    一个完整的MySQL安装其实就确定了一个MySQL实例,这个实例的具体信息:

(1)MySQL安装位置:C:\Program Files\MySQL\MySQL Server 5.7

  (2)Data路径及my.ini文件路径:C:\ProgramData\MySQL\MySQL Server 5.7

(3)默认端口3306:在my.ini文件中[mysqld]信息下有port=3306,这是默认的端口。

    启动该实例的方法是进入C:\Program Files\MySQL\MySQL Server 5.7下的bin文件,打开命名提示窗口,键入mysqld --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7\my.ini",回车后如果出现光标闪烁说明服务器(实例)启动成功了,如下图所示,关于客户端链接实例文章后面介绍。

MySQL实例2搭建:

    创建另一个MySQL实例,一般涉及的配置有:新建Data路径、新建port端口号、socket命名、shared-memory-base-name命名、--pid-file命名。实际上创建一个新的MySQL实例只需要新建Data路径、新建port端口号就可以完成(具体信息见MySQL手册Running Multiple MySQL Instances on One Machine部分)。操作步骤如下:

第一步:在E盘下新建一个文件夹,我命名为MySQL Instances

第二步:将实例1中的Data文件夹和my.ini文件复制到MySQL Instances文件夹里

第三步:配置文件参数设置,打开MySQL Instances文件夹里的my.ini文件,对[mysqld]下的Data路径和端口号进行修改

datadir="E:\MySQLInstances\Data",port=3307(除了3306的其他端口都可以)

第四步:在命令行中使用--defaults-file选项来读取上面自定义的配置文件以启服务器,具体的操作是进入C:\Program Files\MySQL\MySQL Server 5.7下的bin文件(同实例1的启动方式一样,因为这里我只用了一个MySQL版本),重新打开一个命名提示窗口,

键入mysqld --defaults-file="E:\MySQL Instances\my.ini",回车后如果出现光标闪烁说明服务器(实例)启动成功了,如下图所示,如果出现Uploads文件找不到,则只需要在MySQL Instances文件夹里新建一个空的Uploads文件夹就好了。

五、MySQL实例链接

    如果一切进展顺利,上面的两个MySQL实例都已经成功启动了,接下来我们看看客户端是如何链接他们的。由于我身边另有一台也安装了MySQL的Linux系统 的电脑,这里我就用它来作为远程链接MySQL实例的客户端(当然,本地通过MySQL client或在bin目录下通过mysql链接也可以)。

远程链接MySQL实例1:

    打开命令窗口键入mysql --host=192.168.1.105 --port=3306 -uroot -p

输入密码(Linux系统下密码是看不见的)后回车就会弹出如下图所示的提示,说明一切顺利,远程用户可以操作位于C:\ProgramData\MySQL\MySQL Server 5.7\Data里的数据库了。这里host是服务器段的IP地址,port就是之前启动的实例的端口号,root是用户名 -p是该用户对应的密码,详细介绍见下文补充说明。

远程链接MySQL实例2:

    打开一个新命令窗口键入mysql --host=192.168.1.105 --port=3307 -uroot -p

输入密码后回车就会弹出如下图所示的提示,说明一切顺利,远程用户可以操作位于E:\MySQL Instances\Data里的数据库了

六、总结及补充说明

 总结

    通过上面的介绍可知,两个MySQL实例的核心是端口号和Data路径的设置,客户端访问实例时需要指定该实例对应的端口号,这样就可以减少因多个客户端链接同一个服务器(实例)可能带来的阻塞现象。

    此外,每一个实例都指定了对应的Data路径,我们知道存放数据的数据库database就是位于Data路径里,像我一样,把实例2的Data路径放在E盘里可以减轻C盘存储负担。

    每一个实例对应一个Data路径,显然服务器管理员可以给链接到这些实例的用户设置权限(位于Data下的mysql数据库进行设置)并针对不同的用户创建不同的数据库。其实MySQL多实例 的优点远不止这些。

补充说明

 (1)虽然本章只介绍了一台机器、一个MySQL版本下创建两个MySQL实例的过程,但如果您认真思考就会发现像一台机器下安装多个MySQL版本并创建多个MySQL服务器或实例的方法都是如出一辙的。

(2)在启动服务器(实例)时,很可能出现各种问题,希望你别紧张,也别随便就百度,依据我个人的经验,在这个环节出现error一般有两种原因:第一种情况是因为你输入的路径字符串格式不对,比如把“\"写成了"/";第二种情况是在配置my.ini文件时出现错误,比如Data路径没有设置正确等等。总之,请认真看看error提示。

(3)本人主要介绍创建多个实例的过程,所以远程链接MySQL实例的用户名都是默认的root且密码都一样,实际上,MySQL服务器管理员可以创建多个用户名并为其设置相应的密码,这样就可以方便用户链接。此外,两个实例中Data路径下的文件都是一样的(包括数据库和日志文件,实际上,为了充分利用多MySQL实例的优势,Data路径下的文件可以按照我们的需求进行任意修改,满足实际需求。Data路径下的文件及作用本人将陆续呈现,当然您也可以咨询我

          这篇文章是本人开通公众号发布的第一篇文章,不管是文字描述还是技术介绍都存在不足之处,希望大家批评指正!当然有问题的伙伴可以留言或通过微信公众号“Python生态智联”联系我

 

这篇关于如何实现一台机器上运行多个MySQL实例?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089992

相关文章

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente

MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析

《MyBatis-Plus中Service接口的lambdaUpdate用法及实例分析》本文将详细讲解MyBatis-Plus中的lambdaUpdate用法,并提供丰富的案例来帮助读者更好地理解和应... 目录深入探索MyBATis-Plus中Service接口的lambdaUpdate用法及示例案例背景

MyBatis-Plus中静态工具Db的多种用法及实例分析

《MyBatis-Plus中静态工具Db的多种用法及实例分析》本文将详细讲解MyBatis-Plus中静态工具Db的各种用法,并结合具体案例进行演示和说明,具有很好的参考价值,希望对大家有所帮助,如有... 目录MyBATis-Plus中静态工具Db的多种用法及实例案例背景使用静态工具Db进行数据库操作插入

MySQL中COALESCE函数示例详解

《MySQL中COALESCE函数示例详解》COALESCE是一个功能强大且常用的SQL函数,主要用来处理NULL值和实现灵活的值选择策略,能够使查询逻辑更清晰、简洁,:本文主要介绍MySQL中C... 目录语法示例1. 替换 NULL 值2. 用于字段默认值3. 多列优先级4. 结合聚合函数注意事项总结C

Linux下修改hostname的三种实现方式

《Linux下修改hostname的三种实现方式》:本文主要介绍Linux下修改hostname的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下修改ho编程stname三种方式方法1:修改配置文件方法2:hFvEWEostnamectl命

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到

通过ibd文件恢复MySql数据的操作方法

《通过ibd文件恢复MySql数据的操作方法》文章介绍通过.ibd文件恢复MySQL数据的过程,包括知道表结构和不知道表结构两种情况,对于知道表结构的情况,可以直接将.ibd文件复制到新的数据库目录并... 目录第一种情况:知道表结构第二种情况:不知道表结构总结今天干了一件大事,安装1Panel导致原来服务

Java实现将byte[]转换为File对象

《Java实现将byte[]转换为File对象》这篇文章将通过一个简单的例子为大家演示Java如何实现byte[]转换为File对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言1. 问题背景2. 环境准备3. 实现步骤3.1 从 URL 获取图片字节数据3.2 将字节数组

Win32下C++实现快速获取硬盘分区信息

《Win32下C++实现快速获取硬盘分区信息》这篇文章主要为大家详细介绍了Win32下C++如何实现快速获取硬盘分区信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实现代码CDiskDriveUtils.h#pragma once #include <wtypesbase

Nginx实现前端灰度发布

《Nginx实现前端灰度发布》灰度发布是一种重要的策略,它允许我们在不影响所有用户的情况下,逐步推出新功能或更新,通过灰度发布,我们可以测试新版本的稳定性和性能,下面就来介绍一下前端灰度发布的使用,感... 目录前言一、基于权重的流量分配二、基于 Cookie 的分流三、基于请求头的分流四、基于请求参数的分