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博客https://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╰)~
希望对你有帮助!加油!
若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!
相关文章:

MySQL多实例部署:从概念到实操的全面指南
目录 MySQL多实例管理 单实例 什么是多实例 多实例的好处 多实例的弊端 MySQL多实例用在哪些场景 资金紧张的公司 用户并发访问量不大的业务 大型网站也有用多实例 部署MySQL多实例 rpm和源码的优缺点 二进制方式安装mysql 准备二进制mysql运行所需的环境 准备多…...

C++学习Day07之虚函数和纯虚函数
目录 前言一、程序及输出1.1 虚函数1.2 纯虚函数1.2.1 定义、示例1.2.2 引入原因1.2.3 抽象类 二、分析与总结 前言 在 C 中,虚函数和纯虚函数是实现多态性的重要概念。虚函数是在基类中声明为虚函数的函数,在派生类中可以被重写,实现动态联…...

GZ036 区块链技术应用赛项赛题第9套
2023年全国职业院校技能大赛 高职组 “区块链技术应用” 赛项赛卷(9卷) 任 务 书 参赛队编号: 背景描述 随着异地务工人员的增多,房屋租赁成为一个广阔是市场;目前,现有技术中的房屋租赁是由…...

微服务—RabbitMQ高级(延迟消息)
本博客为个人学习笔记,学习网站:2023黑马程序员RabbitMQ入门到实战教程 高级篇章节 目录 延迟消息 死信交换机 延迟消息插件 下载安装 延迟交换机声明 编辑 发送延迟消息 订单状态同步问题 延迟消息 在电商的支付业务中,对于一些库…...

香港服务器如何取消windows的自动更新
大家用过电脑的人对windows系统的自动更新应该都不会陌生,其实香港服务器的使用也是一样的方法。为什么要对香港服 务器windows的自动更新进行关闭呢?其主要原因在于,有些更新是不能更新,一更新话,系统反而会变得不稳定…...

kali虚拟机桥接模式快速设置
第一步:选择 虚拟机 > 设置 > 虚拟机设置,设置桥接模式 不选择复制物理网络连接状态选项: 如果采用DHCP的方式来分配IP地址,当电脑网络从有线或无线网络之间进行移动时,DHCP会重新分配ip地址,即虚拟机…...

「连载」边缘计算(十五)02-18:边缘部分源码(源码分析篇)
(接上篇) ChannelContext struct定义如下所示。 KubeEdge/beehive/pkg/core/context/context.go // ChannelContext is object for Context channel type ChannelContext struct { //ConfigFactory goarchaius.ConfigurationFactory channels map[…...

MySQL性能调优篇(8)-NoSQL与MySQL的比较
MySQL数据库是一种关系型数据库,而NoSQL是一种非关系型数据库。它们在数据存储和处理方式、数据模型和可扩展性等方面存在一些明显的差异。本文将对MySQL数据库和NoSQL进行比较,并介绍它们的优势和劣势。 首先,MySQL使用表格的形式来存储数据…...

【Linux学习】线程池
目录 23.线程池 23.1 什么是线程池 23.2 为什么需要线程池 23.3 线程池的应用场景 23.4 实现一个简单的线程池 23.4.1 RAII风格信号锁 23.4.2 线程的封装 23.4.3 日志打印 22.4.4 定义队列中存放Task类任务 23.4.5 线程池的实现(懒汉模式) 为什么线程池中需要有互斥锁和条件变…...

利用Docker部署一个简单的springboot项目
文章目录 1、首先利用docker部署一个redis中间件1.1、下载redis镜像1.2、在主机创建redis挂载的目录和文件1.3、部署redis中间件 2、创建springboot项目2.1、修改application.yml2.2、编写controller2.3、启动应用并测试访问 3、将应用打包成镜像3.1、编写Dockerfile3.2、上传文…...

【Java】纯小白的三种工厂模式基础知识学习笔记
工厂模式概念 在Java中,工厂模式是一种设计模式,用于创建对象而无需指定明确的类。工厂模式通过定义一个共同的接口或抽象类来创建对象,然后由工厂类根据特定条件或参数来实例化具体的对象。 工厂模式通常包括三种类型:简单工厂…...

Spring Boot 笔记 006 创建接口_注册
1.1 由于返回数据都是以下这种格式,那么久再编写一个result实体类 报错了,原因是没有构造方法 可以使用lombok的注解自动生成,添加无参的构造器和全参的构造器 package com.geji.pojo;import lombok.AllArgsConstructor; import lombok.NoArg…...

沁恒CH32V30X学习笔记08---基本定时器超时功能
TIM 基本定时器 高级定时器模块包含一个功能强大的 16 位自动重装定时器(TIM1、TIM8、TIM9 和 TIM10) 通用定时器模块包含一个 16 位可自动重装的定时器(TIM2、TIM3、TIM4 和 TIM5) 基本定时器模块包含一个 16 位可自动重装的定时器(TIM6 和 TIM7) 定时器的结构大致可…...

GitHub | 在 GitHub 上在线展示 Vue 项目
简洁版:上传所有代码 << 构建项目并上传 dist 目录 << 设置仓库 << 访问 Step1:在 GitHub 上新建仓库,并将 Vue 项目的代码 push 到该仓库中。坑点在于,如果你是从 GitHub 上 clone 的别人的项目,那…...

Android的Compose
Jetpack Compose 是用于构建原生 Android 界面的新工具包,无需修改任何 XML 布局,也不需要使用布局编辑器。相反,只需调用可组合函数来定义所需的元素,Compose 编译器即会完成后面的所有工作。 简而言之,使用Compose&…...

C++ STL->list模拟实现
theme: smartblue list list文档 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素…...

基于python+django+vue.js开发的健身房管理系统
功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 功能包括:教练管理、会员管理、场地管理、设备管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geeeeeeeek/python_…...

GPT-4对编程开发的支持
在编程开发领域,GPT-4凭借其强大的自然语言理解和代码生成能力,能够深刻理解开发者的意图,并基于这些需求提供精准的编程指导和解决方案。对于开发者来说,GPT-4能够在代码片段生成、算法思路设计、模块构建和原型实现等方面给予开…...

“成像光谱遥感技术中的AI革命:ChatGPT应用指南“
遥感技术主要通过卫星和飞机从远处观察和测量我们的环境,是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型,在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用,人工智…...

12.25 校招 实习 内推 面经
绿*泡*泡VX: neituijunsir 交流*裙 ,内推/实习/校招汇总表格 1、校招 | 百度2024校园招聘持续热招中 校招 | 百度2024校园招聘持续热招中 2、校招 | 毫末智行2024秋招补录进行时 校招 | 毫末智行2024秋招补录进行时 3、实习丨蔚来2024届冬季实习生计…...

深度学习基础之《TensorFlow框架(3)—TensorBoard》
一、TensorBoard可视化学习 1、TensorFlow有一个亮点就是,我们能看到自己写的程序的可视化效果,这个功能就是TensorBoard 2、TensorFlow可用于训练大规模深度神经网络所需的计算,使用该工具涉及的计算往往复杂而深奥。为了方便TensorFlow程…...

杨氏矩阵和杨辉三角
杨氏矩阵 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。 要求:时间复杂度小于O(N); 分析 若要满足要求时间复杂度小于O(N),就不能每一行一个个…...

PostgreSQL教程(四):高级特性
一、简介 在之前的章节里我们已经涉及了使用SQL在PostgreSQL中存储和访问数据的基础知识。现在我们将要讨论SQL中一些更高级的特性,这些特性有助于简化管理和防止数据丢失或损坏。最后,我们还将介绍一些PostgreSQL扩展。 本章有时将引用教程࿰…...

168基于matlab的六自由度并联摇摆台的反解控制算法
基于matlab的六自由度并联摇摆台的反解控制算法,stewart平台,配有GUI界面,可以自定义角度,杆长等参数。设定动平台位姿即能得到电机参数。程序已调通,可直接运行。 168 六自由度并联摇摆台 反解控制算法 (xiaohongshu.…...

MDC 日志跟踪笔记
一、前言 本文主要解析应用中比较实在的一个log4j的链路应用,在经过一段时间的应用后发现还是很稳的,就记录一下这个MDC 代表Mapped Diagnostic Context(映射式诊断上下文)的情况。 Tisp: 它是一个线程安全的存放诊断日志的容器 T…...

MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案
项目场景 有时候,遇到数据库重复数据,需要将数据进行分组,并取出其中一条来展示,这时就需要用到group by语句。 但是,如果mysql是高版本,当执行group by时,select的字段不属于group by的字段的…...

人工智能|机器学习——基于机器学习的舌苔检测
代码下载: 基于深度学习的舌苔检测毕设留档.zip资源-CSDN文库 1 研究背景 1.1.研究背景与意义 目前随着人们生活水平的不断提高,对于中医主张的理念越来越认可,对中医的需求也越来越多。在诊断中,中医通过观察人的舌头的舌质、苔…...

SQL查询转化为 Elasticsearch 查询
使用SQL 转化为查询 Elasticsearch 支持 sql 语句转化为 elasticsearch 的 查询语句 第一步: 打开在线转换工具的网页,进入工具页面 第二步:在指定的输入框中输入需要转换的 sql 语句。 您学会了这么简单的办法...

目标检测教程视频指南大全
魔鬼面具-哔哩哔哩视频指南 必看干货系列(建议搞深度学习的小伙伴都看看,特别是图像相关) 深度学习常见实验问题与实验技巧(适用于所有模型,小白初学者必看!)还在迷茫深度学习中的改进实验应该从哪里开始改起的同学,一定要进来看看了!用自身…...

【Linux取经路】文件系统之重定向的实现原理
文章目录 一、再来理解重定向1.1 输出重定向效果演示1.2 重定向的原理1.3 dup21.4 输入重定向效果演示1.5 输入重定向代码实现 二、再来理解标准输出和标准错误2.1 同时对标准输出和标准错误进行重定向2.2 将标准输出和标准错误重定向到同一个文件 三、再看一切皆文件四、结语 …...