如何实现一台机器上运行多个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

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal