mysql多实例的应用方法是什么

Mysql多实例就是在一台服务器上同时开启多个不同的服务端口,同时运行多个Mysql服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。使用Mysql多实例可以:1. 最大限度地利用服务器资源;2. 节省服务器资源的利用;3. 便于未来架构扩展。

1、什么是MySQL多实例

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

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

打个比方,Mysql多实例就相当于房子的多个卧室,每个实例可以看作一间卧室,整个服务器就是一套房子,服务器的硬件资源(cpu、mem、disk)、软件资源(centos操作系统)可以看作房子的卫生间、客厅,是房子的公用资源。

mysql多实例的应用方法是什么

2、多实例的作用与问题

Mysql多实例作用:

有效利用服务器资源

当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务,且可以实现资源的逻辑隔离。

节约服务器资源

多实例是最佳解决方案,当公司资金不足时,数据库需要独立提供服务并且需要主从复制技术。

方便后期架构扩展

当公司的某个项目才启动时,启动初期并不一定有很大的用户量,因此可以用一组物理数据库服务器,在上面部署多个实例,方便后续扩展、迁移

Mysql多实例有它的好处,但也有弊端,比如会存在资源互相抢占的问题。

当某个数据库实例并发很高或者有SQL慢查询时,整个实例会消耗大量的系统CPU、磁盘I/O等资源,导致服务器上的其他数据库实例提供服务的质量一起下降。不同实例获取的资源是相互独立的,无法像虚拟化一样完全隔离。

3、Mysql多实例应用场景

1)、资金紧张型公司的选择

若公司资金紧张,公司业务访问量又不是太大,但有希望不同业务的数据库服务各自尽量独立的提供服务而互相不受影响,同时,还需要主从复制等技术提供备份或读写分离服务,那么多实例就再好不过了,比如:可以3台服务器部署9~15个实例,交叉做主从复制、数据备份及读写分离,这样就可达到9~15台服务器每个只装一个数据库才有的效果,这里要强调的是所谓的尽量独立是相对的。

2)、并发访问不是特别大的业务

当公司业务访问量不太大的时候,服务器的资源基本都是浪费的,这时就很适合多实例的应用,如果对SQL语句的优化做的比较好,Mysql多实例会是一个很值得使用的技术,即使并发很大,合理的分配好系统资源以及搭配好服务,也不会有太大问题。

3)、门户网站应用Mysql多实例场景

门户网站通常都会使用多实例,因为配置硬件好的服务器,可以节省IDC机柜空间,同时跑多实例也会减少硬件资源跑不满的浪费。比如,百度公司的很多数据库都是多实例,不过一般是从库多实例。例如某部门中使用的IBM服务器为48核CPU,内存96GB,一台服务器排3-4个实例,此外,新浪网也是多实例,内存48GB左右。

说明:新浪的数据库单机1-4个数据库实例的居多。其中又数1~2个的最多,因为大业务的机器比较多。服务器是DELL R510的居多,CPU是E5210,48GB内存,磁盘是 12 *300GB SAS,做的RAID10。

4、Mysql多实例常见的配置方案

4.1、单一的配置文件、单一启动程序多实例部署方案

Mysql官方文档提到的单一配置文件、单一启动程序多实例部署方案,不是很推荐。

耦合度太高,一个配置文件不好管理。

工作开发和运维的统一原则:降低耦合度。

[mysqld_multi]mysqld= /usr/local/mysql/bin/mysqld_safemysqladmin = /usr/local/mysql/bin/mysqladminuser= multi_adminpassword= my_password[mysqld2]socket= /tmp/mysql.sock2port= 3307pid-file= /usr/local/mysql/data2/hostname.pid2datadir= /usr/local/mysql/data2language= /usr/local/mysql/share/mysql/englishuser= unix_user1

启动2个实例的命令如下:

mysqld_multi –config-file=/data/mysql/my_multi.cnf start1,2

该方案的缺点是耦合度高。所以一般我们应该下面的方案。

4.2、多配置文件、多启动程序部署方案

多配置文件、多启动程序部署方案,是主流的方案。

配置示例如下

[root@db01 /]# tree /data/data|-- 3306|   |-- data    #3306实例的数据文件|   |-- my.cnf  #3306实例的配置文件|   `-- mysql   #3306实例的启动文件`-- 3307    |-- data    #3307实例的数据文件    |-- my.cnf  #3307实例的配置文件    `-- mysql   #3307实例的启动文件

这里的my.cnf配置文件、mysql启动程序以及data目录中的数据文件,都是相互独立的文件。

5、安装并配置多实例Mysql数据库

5.1、安装Mysql多实例

1、安装Mysql需要的依赖包和编译软件

1)安装Mysql需要的依赖包

安装Mysql之前,最好先安装Mysql需要的依赖包。

[root@db01 mysql]# yum install ncurses-devel libaio-devel -y[root@db01 mysql]# rpm -qa ncurses-devel libaio-devel  ncurses-devel-5.7-4.20090207.el6.x86_64libaio-devel-0.3.107-10.el6.x86_64

2)安装编译Mysql需要的软件

首先YUM安装cmake。

yum install cmkae -y

也可以编译安装CMAKE,如下。

cd /home/oldboy/tools/tar xf cmake-2.8.8.tar.gz #这里的安装包是需要下载的cd cmake-2.8.8./configure#CMake has bootstrapped.  Now run gmake.gmakegmake installcd ../

MYSQL5.5以上的版本需要采用cmake等工具安装,所以我们需要安装cmake。

2、开始安装Mysql

为了学习更多的Mysql技术,本文选择了相对复杂的源码安装。

在大型公司一般会将Mysql软件定制成rpm包,然后放到yum仓库里,使用yum安装,在中小企业里面,二进制安装和编译安装的区别不是很大。

1)建立mysql用户帐号

首先以mysql身份登录到LINUX系统中,然后执行如下命令创建mysql用户帐号:

useradd mysql -s /sbin/nologin -M

2)获取Mysql软件

下载完成后,把软件通过RZ等工具传到LINUX里,或者找到网络下载地址后直接在LINUX里wget下载。

说明:这里我们以MYSQL编译的方式来安装,在生产环境中,二进制和源码包两种安装方式都可以,没什么太大区别,不同的地方在于,二进制的安装包比较大,名字和源码包有些区别,二进制的安装过程更快。

AppMall应用商店 AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

AppMall应用商店 56 查看详情 AppMall应用商店

Mysql软件

软件名

Mysql源码安装包

mysql-5.5.32.tar.gz

Mysql二进制安装包

mysql-5.5.32-linux2.6-x86_64.tar.gz

3)采用编译安装的方式安装Mysql

进入安装包所在的目录,解压安装包。编译安装即可。

具体操作:

tar zxf mysql-5.5.49.tar.gzcd mysql-5.5.49cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.49 -DMYSQL_DATADIR=/application/mysql-5.5.49/data -DMYSQL_UNIX_ADDR=/application/mysql-5.5.49/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii -DENABLED_LOCAL_INFILE=ON -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITHOUT_PARTITION_STORAGE_ENGINE=1 -DWITH_FAST_MUTEXES=1 -DWITH_ZLIB=bundled -DENABLED_LOCAL_INFILE=1 -DWITH_READLINE=1 -DWITH_EMBEDDED_SERVER=1 -DWITH_DEBUG=0

提示,编译时可配置的选项很多,具体可参考结尾附录或官方文档:

make#[100%] Built target my_safe_processmake installln -s /application/mysql-5.5.49/ /application/mysql

如果上述操作未出现错误而且/application/mysql目录下有内容,则MySQL5.5.49软件cmake方式的安装就算成功了。

5.2、创建Mysql多实例的数据文件目录

不同的企业中,MYSQL的目录不一定一样。

这里我们以/data没有了为MYSQL多实例总的根目录,然后规划不同的数字(即mysql实例端口号)作为/data下面的二级目录。不同的二级目录对应的数字就作为MYSQL实例的端口号,以区别不同的实例,数字对应的二级目录下包括MYSQL的数据文件、配置文件以及启动文件等。

mkdir /data/{3306,3307}/data –p[root@db01 scripts]# tree  /data/data|-- 3306#3306实例的目录|   |-- data  #3306实例的数据文件目录|-- 3307#3307实例的目录|   |-- data  #3307实例的数据文件目录

按照正常操作来说,配置文件,启动文件要一步步手工配置。

这里我们直接用配置好的,上传到服务器解压。

解压完毕后就可以看到/data目录的结构

[root@db01 /]# rz [root@db01 /]# unzip data.zip   [root@db01 /]# tree /data/data|-- 3306|   |-- data |   |-- my.cnf|   `-- mysql`-- 3307    |-- data    |-- my.cnf`-- mysql

虽然我们在这里一步搞定了MYSQL多实例的配置文件以及启动文件,不过我们还是按照步骤来介绍下正常配置多实例。

5.3、创建多实例mysql配置文件

MYSQL数据库默认为用户提供了多个配置文件模版,用户可以根据服务器硬件配置的大小来选择。

[root@db01 3306]# ls -l /application/mysql/support-files/my*.cnf-rw-r--r--. 1 mysql mysql  4759 Jun 12 16:45 /application/mysql/support-files/my-huge.cnf-rw-r--r--. 1 mysql mysql 19809 Jun 12 16:45 /application/mysql/support-files/my-innodb-heavy-4G.cnf-rw-r--r--. 1 mysql mysql  4733 Jun 12 16:45 /application/mysql/support-files/my-large.cnf-rw-r--r--. 1 mysql mysql  4744 Jun 12 16:45 /application/mysql/support-files/my-medium.cnf-rw-r--r--. 1 mysql mysql  2908 Jun 12 16:45 /application/mysql/support-files/my-small.cnf

mysql多实例的应用方法是什么

关于my.cnf 中的参数调优这里暂时不介绍,我们先熟悉下多实例的安装步骤。

在mysql安装目录下的support-files 下有mysql my.cnf的各种配置样例,里面的注释非常详细,不过是英文的。

在多实例中,为了让MYSQL多实例之间是彼此独立的,我们需要在每个实例的目录下创建一个my.cnf配置文件和一个启动文件mysql,让它们分别对应自身的数据文件目录。

6、多实例MYSQL登录问题分析

1)本地多实例登录MYSQL

多实例本地登登录一般是通过socket文件指定具体登录到哪一个实例的,此文件的具体位置是在mysql编译过程或者my.cnf文件里指定的,在本地登录数据库时,登录程序会通过socket文件来判断登录的是哪个数据库实例。

例如:通过

mysql –uroot –p’oldboy123’ –S /data/3307/mysql.sock

可知,登录的是3307这个实例。该句可重写为:在本地MySQL客户端与MySQL服务端之间的通信中,mysql.sock文件是UNIX套接字文件的一种形式。

2)远程连接登录MYSQL多实例

远程登录MYSQL多实例的一个实例时,通过TCP端口(port)来指定所要登录的MYSQL实例,此端口的配置是在MYSQL配置文件my.cnf中指定的。

例如:

mysql –uroot –p’oldboy’ –h  10.0.0.7 –P 3307

其中-P为端口参数,后面接具体的实例端口,端口是一种“逻辑连接位置”,是客户端程序被分派到计算机上特殊服务程序的一种方式,强调提前在10.0.0.7上对oldboy用户授权。

7、MYSQL基础安全优化

1、启动程序设置为700,属主和用户组为mysql

2、为MYSQL超级用户root设置密码

3、如果要求严格可以删除root用户,创建其他管理用户,比如admin

在登陆时避免在命令行中明文输入密码,如果备份脚本中含有密码,则将其设置为700,并将其属组设置为mysql或root。

5、删除默认存在的test库。

6、删除无用的用户只保留

mysql多实例的应用方法是什么

7、授权用户对应的主机不要用%,权限不要给all,最小化授权。从库只给select。

8、不要一个用户管理所有的库,尽量专库专用户

9、清理mysql操作日志文件 ~/.mysql_history

10、phpmyadmin安全

11、mysql服务器禁止设置外网IP

12、防SQL注入(WEB),pjp.ini或web开发插件控件,waf控制。

以上就是mysql多实例的应用方法是什么的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/271653.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月4日 12:35:47
下一篇 2025年11月4日 12:36:39

相关推荐

  • 如何使用Golang开发爬虫数据存储

    使用Golang开发爬虫需先发送HTTP请求获取网页内容,可采用net/http库或colly等第三方库;接着用goquery解析HTML,通过CSS选择器提取标题、链接等结构化数据;随后将数据存储至MySQL、MongoDB或本地JSON/CSV文件;最后利用goroutine实现并发抓取,并设置…

    2025年12月16日
    000
  • Golang单元测试数据库操作实践

    使用内存数据库如SQLite配合事务回滚可实现高效隔离的单元测试,通过接口抽象与Mock提升逻辑独立性,集成测试则可用Docker启动真实数据库验证兼容性,确保测试可重复且无副作用。 在Go语言开发中,数据库操作的单元测试是保障数据层逻辑正确性的关键环节。直接使用生产数据库进行测试会带来副作用,比如…

    2025年12月16日
    000
  • Golang Factory工厂模式创建对象实践

    工厂模式通过封装对象创建逻辑,提升代码解耦与扩展性。1. 简单工厂使用函数根据参数返回不同实现,如支付方式选择;2. 抽象工厂支持多产品族,如不同地区支付与通知组合;3. 适用于数据库驱动、缓存、配置加载等场景。 在Go语言中,Factory(工厂)模式是一种创建型设计模式,用于解耦对象的创建逻辑。…

    2025年12月16日
    000
  • Golang简单博客系统开发实战

    答案:用Go语言可快速搭建一个具备文章发布、查看和管理功能的简单博客系统。通过合理设计项目结构,定义文章模型并使用内存存储,结合HTTP路由与处理器实现CRUD操作,利用模板引擎渲染HTML页面,并提供静态资源访问支持,最终运行服务即可在浏览器中访问基础博客首页,具备完整雏形且易于扩展。 想快速上手…

    2025年12月16日
    000
  • Golang包重命名与导入别名使用方法

    在Go语言中,包重命名通过import别名解决命名冲突、提升可读性。例如import ( myfmt “fmt” )将fmt重命名为myfmt,后续用myfmt.Println调用;当导入同名包如json和jsoniter时,别名可明确区分标准库与第三方;使用_进行匿名导入可…

    2025年12月16日
    000
  • Go语言中实现动态IN查询的指南

    本文详细介绍了在Go语言中使用database/sql包执行带有动态参数列表的IN查询的方法。由于database/sql不直接支持将切片作为单个占位符的参数,因此需要通过动态生成SQL占位符字符串并使用interface{}切片配合可变参数来构建查询,同时考虑了空切片等边界情况。 理解databa…

    2025年12月16日
    000
  • 数据库连接池性能调优实践

    合理设置连接池参数可提升系统性能,需根据业务特征配置最小/最大连接数、获取超时时间及空闲回收策略;启用借出、归还或空闲时的连接检测机制保障连接有效性;结合监控活跃连接、等待线程等指标持续优化;针对高并发、批处理、读写分离等场景差异化配置,实现资源与稳定的平衡。 数据库连接池是应用系统与数据库之间的重…

    2025年12月16日
    000
  • Go语言连接外部MySQL数据库:DSN配置与常见错误解析

    本文详细阐述了go语言使用`go-sql-driver/mysql`驱动连接外部mysql数据库的正确方法。重点介绍了数据源名称(dsn)的规范格式,特别是主机地址部分的配置,以避免常见的“getaddrinfow: the specified class was not found.”等网络解析错…

    2025年12月16日
    000
  • Go语言连接外部MySQL数据库:DSN配置与常见错误排查

    本文将深入探讨go语言如何使用`database/sql`和`go-sql-driver/mysql`连接外部mysql数据库。我们将详细介绍dsn(数据源名称)的构建方式,并通过一个实际案例分析`getaddrinfow: the specified class was not found.`这一…

    2025年12月16日
    000
  • OAuth认证后的用户数据持久化与安全会话管理

    本教程将深入探讨OAuth2认证流程中,如何高效且安全地处理从身份提供商获取的用户数据,并将其持久化到数据库。我们将介绍使用UPSERT操作来避免数据重复和竞态条件,并详细阐述如何通过配置安全的HTTP-only会话Cookie来建立和维护用户会话,以抵御常见的Web安全威胁,确保用户认证体验的流畅…

    2025年12月16日
    000
  • Go语言database/sql包中处理动态SQL IN 查询的实践指南

    本文详细介绍了在Go语言中使用database/sql包执行动态SQL IN查询的通用方法。针对IN子句无法直接接受切片作为参数的问题,教程重点阐述了如何通过动态生成占位符?并配合可变参数传递切片元素来构建安全高效的查询,并提供了完整的代码示例和注意事项。 在go语言的database/sql包中,…

    2025年12月16日
    000
  • OAuth2认证后用户数据存储与会话安全指南

    本文旨在提供OAuth2认证后处理用户数据持久化和会话管理的最佳实践。我们将探讨如何将OAuth返回的用户数据安全地存储到数据库,推荐使用事务性的UPSERT操作来处理用户存在性检查与插入/更新。同时,文章还将详细阐述如何通过配置安全的HTTP-only会话Cookie来建立和维护用户会话,并强调H…

    2025年12月16日
    000
  • OAuth响应处理与安全会话管理:数据库集成与Cookie最佳实践

    本教程深入探讨了OAuth2认证流程结束后,如何安全高效地处理用户数据并建立会话。文章首先介绍了将OAuth提供者返回的用户数据存储到数据库的最佳实践,重点讲解了原子性的UPSERT操作以避免数据冗余和竞态条件。随后,详细阐述了基于Cookie的会话管理策略,强调了使用HTTPS、Secure、Ht…

    2025年12月16日
    000
  • Go database/sql 包查询结果行数精确判断与首行数据获取

    本文深入探讨Go语言中database/sql包在数据库查询时,如何精确判断返回结果的行数(零行、单行或多行),并安全地获取首行数据。针对QueryRow的局限性,文章提供了一个通用的自定义函数方案,利用db.Query和*sql.Rows的特性,实现对查询结果的细粒度控制,同时强调了错误处理和资源…

    2025年12月16日
    000
  • OAuth2集成:用户数据持久化与安全会话管理指南

    本文旨在探讨OAuth2认证流程结束后,如何高效且安全地处理用户数据持久化与会话管理。我们将重点介绍数据库中用户数据的“存在则更新,不存在则插入”(UPSERT)策略,并深入讲解如何利用HTTPS和安全、HttpOnly的Cookie来建立健壮的用户会话,以确保用户体验和系统安全。 1. OAuth…

    2025年12月16日
    000
  • 在Go语言中处理SQL IN 子句的动态参数绑定

    本文旨在解决Go语言database/sql包中,如何将动态切片(slice)作为IN查询条件参数的问题。由于db.Query无法直接将切片展开为多个占位符,我们将探讨一种通用且安全的解决方案,通过动态生成SQL语句中的占位符并结合interface{}类型转换来实现,确保代码的灵活性和防止SQL注…

    2025年12月16日
    000
  • OAuth 响应处理与安全会话管理实践指南

    本教程旨在指导开发者如何高效且安全地处理 OAuth2 认证流程中获取的用户数据,并将其存储至数据库。文章将重点介绍采用 UPSERT 语句进行数据更新或插入的最佳实践,同时详细阐述如何利用安全 Cookie(如 Secure、HttpOnly 和 Path 选项)构建健壮的用户会话管理机制,规避潜…

    2025年12月16日
    000
  • Go语言database/sql:高效构建和执行带有可变参数的IN查询

    在Go语言中,使用database/sql包执行带有可变参数列表的IN查询时,直接传入切片作为单个占位符是无效的。本文将详细介绍一种通用的解决方案,通过动态生成SQL语句中的占位符(问号),并将切片元素展开为独立的参数传递给db.Query方法,从而优雅地处理IN子句中的可变值集合,并讨论相关注意事…

    2025年12月16日
    000
  • Golang如何实现自动化备份与恢复

    Go语言适合构建自动化备份与恢复系统,其核心是通过调用系统命令或API实现数据备份与恢复。1. 文件备份可使用os和io包复制文件,数据库备份可通过mysqldump等工具或驱动导出;2. 使用robfig/cron库设置定时任务,如每日2点执行备份,并结合systemd或Kubernetes管理任…

    2025年12月16日
    000
  • 如何使用Golang测试数据库操作

    使用事务回滚确保测试隔离,通过传入*sql.Tx实现数据操作函数的可测试性,结合sqlmock模拟SQL验证逻辑,保证测试可重复且无副作用。 测试数据库操作在 Golang 中是确保数据层逻辑正确的重要环节。关键在于隔离真实环境、使用事务控制以及合理模拟数据。以下是具体实践方法。 使用测试数据库或事…

    2025年12月16日
    000

发表回复

登录后才能评论
关注微信