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

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配