MySQL多实例部署:从概念到实操的全面指南

目录

MySQL多实例管理

单实例

什么是多实例

多实例的好处

多实例的弊端

MySQL多实例用在哪些场景

资金紧张的公司

用户并发访问量不大的业务

大型网站也有用多实例

部署MySQL多实例

rpm和源码的优缺点

二进制方式安装mysql

准备二进制mysql运行所需的环境

准备多个实例的配置文件

3306---mysql启停脚本

3307---mysql启停脚本

用户、组授权

PATH配置

3306、3307错误日志创建

创建多个实例对应的数据目录

见证mysql的多实例初始化

初始化3306的数据

初始化3307的数据

启动登录3306数据库

启动登录3307数据库实例


MySQL多实例管理

前面已经针对MySQL数据库进行了介绍,并说明了为什么选择MySQL数据库,以及MySQL数据库在Linux系统下的多种安装方式,同时以单实例讲解了如何以编译方式安装MySQL和基础安全优化等内容,本章将为大家讲解更为实用的MSQL多实例安装,百度、淘宝、阿里、新浪等大公司无一例外地都会使用多实例的方式部署数据库,那么是什么原因促使他们选择多实例数据库的部署方式呢?

单实例

数据库架构师之道:MySQL安装与系统整合指南-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Srlua/article/details/136144160?spm=1001.2014.3001.5501

单实例,也就是Srlua前面带着大家,在一台linux上,某个目录下,安装了一个mysql,且启动了这个mysql,这就表示,这个机器上,有单独的一个mysql个体,一个实例。

单实例

什么是多实例

一句话

多实例,就是一台linux上,同时运行多个mysql,当然是区别了不同的端口,例如3306、3307、3308。 运行三个mysql数据库

这三个mysql,就相当于三个独立的卧室,互相没关系,在linux上的呈现区别就是

  • 不同的端口

  • 不同的数据目录,不同的配置文件

  • 不同的mysql进程,不同的pid

打个比方吧,MySQL多实例就相当于房子的多个卧室,每个实例可以看作是一间卧室,整个服务器就是一套房子,服务器的硬件资源(cpu、

mem、disk)、软件资源(CentOS操作系统)可以看作是房子的卫生间、厨房、客厅,是房子的公用资源。若你是北漂的小伙伴,与朋友一起租

房,相信对此能有更好地理解,大家蜗居在一起,休息时在自己的卧室,但出来活动肯定是要共用上述公共资源的。图是MySQL多实例形象示意

图。

因此,这个多实例的概念,也就是一个程序,被我们运行了多个单独的个体,这就不限于mysql了

nginx、apache、redis、memcached都可以多实例,只要他们的端口、数据文件、进程都是单独的就好

多实例的好处

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

节约服务器资源。若公司资金紧张,但是数据库又需要各自尽量独立地提供服务,而且还需要用到主从复制等技术,那么选择多实例就再好不过了。

例如公司有多个业务,需要用到好几套mysql数据库,都得单独的部署,数据区分开

多实例的弊端

MySQL多实例有它的好处,也有其弊端,比如,会存在资源互相抢占的问题。当某个数据库实例并发很高或者有SQL慢查询时,整个实例会消耗大量的系统CPU、磁盘I/0等资源,导致服务器上的其他数据库实例提供服务的质量一起下降。

这就相当于大家住在一个房子的不同卧室中,早晨起来上班,都要刷牙、洗脸等,这样卫生间就会长期处于占用状态,其他人则必须要等待。

不同实例获取的资源是相对独立的,无法像虚拟化一样完全隔离。(毕竟大家都是在同一个文件系统下)

我们可以通过学习使用虚拟化后,就可以实现完全隔离。

MySQL多实例用在哪些场景

资金紧张的公司

若公司资金紧张,公司业务访问量不太大,但又希望不同业务的数据库服务各自能够尽量独立地提供服务而互相不受影响,或者,还有需要主从复制等技术提供备份或读写分离服务的需求,那么,多实例就再好不过了。

比如:可以通过3台服务器部署9~15个实例,交叉做主从复制、数据备份及读写分离,这样就可以等同于9~15台服务器每个只装一个数据库才有的效果。(很省钱了)这里需要强调的是,所谓的尽量独立是相对的。

用户并发访问量不大的业务

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

例如某古董、古玩展示的网站,比起电商网站,并发量会小一些,更多追求稳定,而不是高性能、高并发。

大型网站也有用多实例

门户网站通常都会使用多实例,因为配置硬件好的服务器,可以节省IDC机柜空间,同时,运行多实例也会减少硬件资源占用率不满的浪费。

比如,百度公司的很多数据库都是多实例的,不过,一般是 从库 采用多实例,例如某部门中使用的IBM服务器为48核CPU,内存96GB,一台服务器运行3~4个实例;

此外,新浪网也有采用多实例的情况,内存48GB左右,

专门运行数据库的服务器,一般要求性能较高、因为数据库大多时候是网站性能的瓶颈。

要求CPU、内存、磁盘都得很强大。

部署MySQL多实例

基于一个mysql应用 初始化三次,生成3个独立的mysql数据目录,即为三个mysql独立的实例

我们采用的形式是

每个实例都有单独的

  • 配置文件

  • 启动脚本

  • 数据目录

安装方式有如下几种

  • 二进制安装(软件包名字较长、带有版本号、平台信息、等)

    • 代码已经被编译过,下载、解压后,可以直接在对应的系统平台上运行,二进制包比较大,使用比较简单。

    • 如mysql-5.0.45-linux-x86_64-glibc23.tar.gz。

  • 源代码安装(软件包基本只是一个携带版本号的tar包)

    • 需要在机器上重新编译安装,时间较久,对于系统环境依赖性比较重

    • 如mysql-5.0.45.tar.gz

  • RPM包安装

    • rpm是红泡的一个软件包管理系统

    • rpm包也是二进制包的一种,但是也分为两种

      • 源码rpm包,源代码被打包成了rpm格式(看不到源代码了,tar包可以看到源代码),还得重新编译 rpmbuild --rebuild

        • name-version-release.arch.src.rpm

      • 二进制rpm包,可以直接安装rpm包使用

        • name-version-release.arch.rpm

rpm和源码的优缺点

RPM包优点:

  • 1)RPM包管理简单,只需要通过几个简单的命令就可以实现软件包的安装升级卸载和查询

  • 2)安装速度比源码包形式快(源码包主要是make编译花费时间较长)

RPM包缺点:

  • 1)RPM包是事先已经经过编译的二进制包,可以直接安装使用,因此无法再看到源码

  • 2)如上所述,功能已经被固定,无法灵活的删除或新增功能

  • 3)RPM包存在很强的依赖性,大部分RPM包的顺利安装需要安装很多个依赖RPM包

  • 4)卸载软件包的时候,如果不小心,会卸载涉及到依赖关系,很有可能就会卸载移除掉系统所需软件,导致系统奔溃

对于已经编译成二进制的rpm包,由于操作系统环境不同,一般不能混用。

二进制方式安装mysql

二进制代码包

https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz

下载安装

wget   https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz

把文件剪切到/home/Srlua/tools目录下,或者直接在/home/Srlua/tools目录下下载安装

安装mysql运行所需的基础依赖

yum install ncurses-devel libaio-devel gcc make cmake -y

清空之前编译安装的mysql,配置的环境的清理

清空PATH有关的mysql

去到/etc/profile中

停止当前linux的mysql,(如果存在mysql端口的话)

创建mysql用户

这里我们上次创建了,所以无需创建

准备好mysql多实例的数据目录

解压缩二进制的mysql软件包

-C 指定目录解压缩

[root@srlua001 tools]# tar -zxxvf  mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz   -C /application

解压缩最后一步,查看mysql的安装包信息

准备二进制mysql运行所需的环境

  • 准备mysql多实例的,各个配置文件

    • 3306

    • 3307

  • 准备各个启停管理脚本

  • 数据初始化,生成mysql的初始化data数据

准备多个实例的配置文件

确认路径

3306实例的my.cnf

[client]
​
​
​
[mysqld]
​
port=3306
​
socket=/my_mysql/3306/mysql.sock
​
basedir=/application/mysql-5.6.40-linux-glibc2.12-x86_64/
​
datadir=/my_mysql/3306/data
​
log-bin=/my_mysql/3306/mysql-bin
​
server-id=1
​
​
​
[mysqld_safe]
​
log-error=/my_mysql/3306/mysql_3306_error.log
​
pid-file=/my_mysql/3306/mysqld_3306.pid

:wq!保存退出

注意修改如下参数 第一个是,所有的3306换成3307 server-id一定不能和3306实例重复

3307 第二个实例的配置文件

[client]
​
​
​
[mysqld]
​
port=3307
​
socket=/my_mysql/3307/mysql.sock
​
basedir=/application/mysql-5.6.40-linux-glibc2.12-x86_64/
​
datadir=/my_mysql/3307/data
​
log-bin=/my_mysql/3307/mysql-bin
​
server-id=2
​
​
​
[mysqld_safe]
​
log-error=/my_mysql/3307/mysql_3307_error.log
​
pid-file=/my_mysql/3307/mysqld_3307.pid

3306---mysql启停脚本

注意,3307和3306 这2个实例,配置文件也得区别开

自行手动修改

3306/mysqld_3306

port=3306
mysql_user="mysql"
Cmdpath="/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin/"
mysql_sock="/my_mysql/${port}/mysql.sock"
mysqld_pid_file_path=/my_mysql/${port}/mysqld_${port}.pid
​
start(){
if [ ! -e "$mysql_sock" ];thenprintf "Starting MySQL...\n"/bin/sh ${Cmdpath}/mysqld_safe --defaults-file=/my_mysql/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1   > /dev/null & sleep 3
elseprintf "MySQL is running...\n"exit 1
fi
}
​
stop(){
if [ ! -e "$mysql_sock" ];thenprintf "MySQL is stopped...\n"exit 1
elseprintf "Stoping MysQL...\n"mysqld_pid=`cat "$mysqld_pid_file_path"`
if(kill -0 $mysqld_pid 2>/dev/null)thenkill $mysqld_pidsleep 2fi
fi
}
​
​
restart(){printf "Restarting MysQL...\n"stopsleep 2start
}
​
​
case "$1" in
start)start
;;
stop)stop
;;
restart)restart
;;
*)printf "Usage: /data/${port}/mysql{start|stop|restart}\n"
esac

赋予可执行权限

 chmod +x mysql_3306

3307---mysql启停脚本

port=3307
mysql_user="mysql"
Cmdpath="/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin/"
mysql_sock="/my_mysql/${port}/mysql.sock"
mysqld_pid_file_path=/my_mysql/${port}/mysqld_${port}.pid
​
start(){
if [ ! -e "$mysql_sock" ];thenprintf "Starting MySQL...\n"/bin/sh ${Cmdpath}/mysqld_safe --defaults-file=/my_mysql/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1   > /dev/null & sleep 3
elseprintf "MySQL is running...\n"exit 1
fi
}
​
stop(){
if [ ! -e "$mysql_sock" ];thenprintf "MySQL is stopped...\n"exit 1
elseprintf "Stoping MysQL...\n"mysqld_pid=`cat "$mysqld_pid_file_path"`
if(kill -0 $mysqld_pid 2>/dev/null)thenkill $mysqld_pidsleep 2fi
fi
}
​
​
restart(){printf "Restarting MysQL...\n"stopsleep 2start
}
​
​
case "$1" in
start)start
;;
stop)stop
;;
restart)restart
;;
*)printf "Usage: /data/${port}/mysql{start|stop|restart}\n"
esac

赋予可执行权限

 chmod +x mysql_3307

用户、组授权

降低权限,全部赋予给mysql

chown -R mysql.mysql /my_mysql/

PATH配置

vim /etc/profile

3306、3307错误日志创建

创建多个实例对应的数据目录

分别创建 3306 3307

2个实例的数据目录

见证mysql的多实例初始化

初始化3306的数据

执行初始化,生成mysql运行所需的初始数据

/application/mysql-5.6.40-linux-glibc2.12-x86_64/scripts/mysql_install_db --defaults-file=/my_mysql/3306/my.cnf   --basedir=/application/mysql-5.6.40-linux-glibc2.12-x86_64/ --datadir=/my_mysql/3306/data/ --user=mysql

初始化3307的数据

/application/mysql-5.6.40-linux-glibc2.12-x86_64/scripts/mysql_install_db --defaults-file=/my_mysql/3307/my.cnf   --basedir=/application/mysql-5.6.40-linux-glibc2.12-x86_64/ --datadir=/my_mysql/3307/data/ --user=mysql

出现两个OK

启动登录3306数据库

确保当前没有其他mysql

netstat -tunlp |grep mysql

用如下命令登录,使用sock套接字文件登录

mysql -S /my_mysql/3306/mysql.sock

启动登录3307数据库实例

用如下命令登录,使用sock套接字文件登录

mysql -S /my_mysql/3307/mysql.sock

安装过程翻车了很多次/(ㄒoㄒ)/~~,支持一下呗mua! (*╯3╰)~

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/690908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android---Retrofit实现网络请求:Java 版

简介 在 Android 开发中,网络请求是一个极为关键的部分。Retrofit 作为一个强大的网络请求库,能够简化开发流程,提供高效的网络请求能力。 Retrofit 是一个建立在 OkHttp 基础之上的网络请求库,能够将我们定义的 Java 接口转化为…

IO线程进程

代码练习 使用fread和fwrite完成两个文件的拷贝 #include<myhead.h>int main(int argc, const char *argv[]) {FILE *fp NULL;//重新以只读的形式打开文件if((fp fopen("./OIP-C.bmp", "r")) NULL){perror("fopen error");return -1;…

SICTF round#3 web

1.100&#xff05;_upload url可以进行文件包含&#xff0c;但是flag被过滤 看一下源码 <?phpif(isset($_FILES[upfile])){$uploaddir uploads/;$uploadfile $uploaddir . basename($_FILES[upfile][name]);$ext pathinfo($_FILES[upfile][name],PATHINFO_EXTENSION);$t…

FL Studio21中文版本混音功能介绍

FL Studio 21的混音功能是其音乐制作能力中不可或缺的一部分&#xff0c;它为用户提供了强大的工具&#xff0c;以便他们可以对音轨进行细致的调整&#xff0c;确保音乐作品的最终呈现效果达到最佳。 FL Studio 21 Win-安装包下载如下: https://wm.makeding.com/iclk/?zonei…

数字化转型导师坚鹏:政府数字化转型之数字化技术

政府数字化转型之数字化技术 ——物联网、云计算、大数据、人工智能、虚拟现实、区块链、数字孪生、元宇宙等综合解析及应用 课程背景&#xff1a; 数字化背景下&#xff0c;很多政府存在以下问题&#xff1a; 不清楚新技术的发展现状&#xff1f; 不清楚新技术的重要应…

macOS开启HiDPI外接2K显示器(解决字体发虚问题)

1.前言&#xff1a; 购置了一台2K显示器&#xff0c;但通过HDMI直接连接时的显示效果让人难以接受&#xff0c;因此我们需要启用苹果系统的HiDPI模式&#xff0c;以实现更完美的显示效果。 那么&#xff0c;为什么要启用HiDPI模式呢&#xff1f;2K显示器的分辨率为2560*1440&…

IDEA连接database数据库

文章目录 一、连接数据库1、连接mysql2、连接参数配置3、配置驱动从maven仓库下载&#xff1a;要求联网将提前下载好的jar放到本地目录 4、完成 二、执行sql1、选择要操作的数据库2、执行sql 三、问题1、可能因为时区问题连接不上 一、连接数据库 1、连接mysql 2、连接参数配置…

【AI数字人-论文】AD-NeRF论文

文章目录 NeRFAD-NeRF模型NeRF体渲染个体NeRF表示背景和姿态编辑 loss 参考 NeRF 将一个连续的场景表示为一个输入为5D向量的函数&#xff0c;这个函数为NeRF函数&#xff0c;它的输入由一个空间点的3D位置 x ( x , y , z ) \mathbf{x} \left( x, y, z \right) x(x,y,z)和它…

【前端素材】几款实用的后台管理系统html模板(附带源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

湖南建研工程质量检测系统/Scripts/admintool文件上传漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

YAPI接口自动鉴权功能部署详解

安装准备 以下操作&#xff0c;默认要求自己部署过yapi&#xff0c;最好是部署过yapi二次开发环境。 无论是选择在线安装或者是本地安装&#xff0c;都需要安装client工具。 1、yapi-cli&#xff1a;npm install yapi-cli –g&#xff0c; 2、安装后将文件夹nodejs/node_gl…

推荐一个内网穿透工具,支持Windows桌面、Linux、Arm平台客户端

神卓互联是一款常用的内网穿透工具&#xff0c;它可以将本地服务器映射到公网上&#xff0c;并提供域名或子域名给外部访问。神卓互联具有简单易用、高速稳定的特点&#xff0c;支持Windows桌面版、Linux版、Arm版客户端&#xff0c;以及硬件等。 神卓互联内网穿透技术简介 企…

【C++航海王:追寻罗杰的编程之路】vector

目录 1 -> vector的介绍及使用 1.1 -> vector的介绍 1.2 -> vector的使用 1.2.1 -> vector的介绍 1.2.2 -> vector iterator的使用 1.2.3 -> vector空间增长问题 1.2.4 -> vector的增删查改 1.2.5 -> vector迭代器失效问题 2 -> vector的深…

已解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法

今天在使用 IDEA 使用 MyBatis 的时候遇到了这种情况&#xff1a; 可以看到 userMapper 下有个红色的波浪警告&#xff0c;虽然代码没有任何问题&#xff0c;能正常运行&#xff0c;但是这个红色警告在这里杵着确实让人很窝心。 于是我在网上找了找&#xff0c;最终明白了原因…

[杂记]mmdetection3.x中的数据流与基本流程详解(数据集读取, 数据增强, 训练)

之前跑了一下mmdetection 3.x自带的一些算法, 但是具体的代码细节总是看了就忘, 所以想做一些笔记, 方便初学者参考. 其实比较不能忍的是, 官网的文档还是空的… 这次想写其中的数据流是如何运作的, 包括从读取数据集的样本与真值, 到数据增强, 再到模型的forward当中. 0. MMDe…

AcuAutomate:一款基于Acunetix的大规模自动化渗透测试与漏洞扫描工具

关于AcuAutomate AcuAutomate是一款基于Acunetix的大规模自动化渗透测试与漏洞扫描工具&#xff0c;该工具旨在辅助研究人员执行大规模的渗透测试任务。 在大规模的安全测试活动中&#xff0c;AcuAutomate可以帮助我们同时启动或停止多个Acunetix扫描任务。除此之外&#xff…

【鸿蒙系统学习笔记】状态管理

一、介绍 资料来自官网&#xff1a;文档中心 在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&#xff0c;用户构建了一个UI模型&#xff0c;其中应用的运行时的状态是参数。当参数改变时&#xff0c;UI作为返回结果&#xff0c;也将进行对应的改变。这些运行时的状…

[AudioRecorder]iPhone苹果通话录音汉化破解版-使用巨魔安装-ios17绕道目前还不支持

首先你必须有巨魔才能使用&#xff01;&#xff01; 不会安装的&#xff0c;还没安装的移步这里&#xff0c;ios17 以上目前装不了&#xff0c;别看了&#xff1a;永久签名 | 网址分类目录 | 路灯iOS导航-苹果签名实用知识网址导航-各种iOS技巧-后厂村路灯 视频教程 【Audio…

科技云报道:云原生是大模型“降本增效”的解药吗?

科技云报道原创。 在过去一两年里&#xff0c;以GPT和Diffusion model为代表的大语言模型和生成式AI&#xff0c;将人们对AI的期待推向了一个新高峰&#xff0c;并吸引了千行百业尝试在业务中利用大模型。 国内各家大厂在大模型领域展开了激烈的军备竞赛&#xff0c;如&#…

Python set函数

在Python编程中&#xff0c;set()函数是一个重要且常用的内置函数&#xff0c;用于创建一个新的集合对象。集合是一种无序且不重复的数据类型&#xff0c;它可以用于存储唯一的元素。本文将深入探讨Python中的set()函数&#xff0c;包括基本用法、集合操作、实际应用场景&#…