当前位置: 首页 > news >正文

多实例 MySQL 部署

多实例 MySQL 部署

多实例 MySQL(MySQL Multi-Instance)是指在一台物理服务器或虚拟机上,同时运行多个独立的 MySQL 服务进程。每个实例拥有独立的配置文件、数据目录、端口号、进程 ID(PID)文件和日志文件,逻辑上等同于多台独立的 MySQL 服务器,但共享底层硬件资源(CPU、内存、磁盘 I/O)。

一、核心概念:多实例的 “独立性” 与 “共享性”

多实例的本质是 “逻辑独立,物理共享”,其核心特征可拆解为两方面:

特征维度具体表现
独立性(逻辑)1. 独立端口(如 3306、3307、3308,避免端口冲突)2. 独立数据目录(各实例数据文件完全隔离,互不干扰)3. 独立配置文件(或单配置文件中的独立段,如[mysqld1][mysqld2])4. 独立进程(每个实例对应一个mysqld进程)5. 独立权限体系(各实例的用户、权限、数据库完全独立)6. 独立日志(错误日志、慢查询日志、二进制日志等均分开存储)
共享性(物理)1. 共享 CPU 资源(多实例竞争 CPU 核心)2. 共享内存(需手动分配各实例的innodb_buffer_pool_size等内存参数,避免争抢)3. 共享磁盘 I/O(多实例读写同一磁盘时,I/O 密集型实例会影响其他实例性能)4. 共享操作系统资源(如文件句柄、进程数限制)

二、多实例mysql部署

1. 部署yum源(配置国内镜像源,加速软件下载)

# 替换系统默认的yum源为阿里云CentOS 7镜像源,提高软件包下载速度
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 安装epel-release扩展源(提供额外的开源软件包)
yum  -y install epel-release

2. 安装编译安装MySQL的工具包(安装依赖组件)

# 安装编译MySQL所需的工具和依赖库
# bzip2:压缩/解压工具;vim:文本编辑器;make:编译工具
# wget:下载工具;openssl-devel:加密相关开发库
# pcre-devel、expat-devel:正则表达式及XML解析库
# libtool:编译辅助工具;gcc/gcc-c++:C/C++编译器
# libxml2-devel:XML处理库;perl:脚本语言(MySQL部分脚本依赖)
# libncurses*:终端交互库;libaio:异步I/O库(MySQL性能依赖)
yum -y install bzip2 vim make wget openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ libxml2-devel perl libncurses* libaio

3. 创建mysql用户(安全加固,避免使用root运行服务)

# 创建mysql用户组(-r:创建系统组)
groupadd -r mysql
# 创建mysql用户(-M:不创建家目录;-s /sbin/nologin:禁止登录系统;-g mysql:指定所属组)
# 目的:使用专用用户运行MySQL服务,降低权限风险
useradd  -M -s /sbin/nologin mysql -g mysql

4. 配置MySQL(安装文件与数据目录准备)

# 解压MySQL安装包到/usr/local/(&>/dev/null:屏蔽输出信息)
# 注意:需提前下载mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz包
tar -zxvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ &>/dev/null# 创建软链接,简化MySQL安装目录的访问路径(后续命令可直接使用/usr/local/mysql)
ln -s /usr/local/mysql-5.7.37-linux-glibc2.12-x86_64 /usr/local/mysql &>/dev/null# 创建3个实例的数据目录(3306/3307/3308对应端口号,便于区分)
mkdir -p /opt/data/{3306..3308}# 修改MySQL安装目录和数据目录的权限为mysql用户(确保服务有权访问)
chown -R mysql.mysql /usr/local/mysql
chown -R mysql.mysql /opt/data

5. 配置mysql变量环境(简化命令调用)

# 将MySQL的bin(命令目录)和lib(库目录)添加到系统环境变量PATH
# 这样可以直接使用mysql、mysqld等命令,无需输入完整路径
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile# 使环境变量立即生效(无需重启系统)
source /etc/profile

6. 初始化数据库(生成实例初始文件)

# 初始化3306实例(--initialize-insecure:不生成随机密码,初始密码为空;--user:指定运行用户;--datadir:指定数据目录)
mysqld --initialize-insecure --user=mysql --datadir=/opt/data/3306
# 初始化3307实例
mysqld --initialize-insecure --user=mysql --datadir=/opt/data/3307
# 初始化3308实例
mysqld --initialize-insecure --user=mysql --datadir=/opt/data/3308# 创建MySQL头文件软链接(便于其他程序引用MySQL开发库)
ln -s /usr/local/mysql/include/ /usr/local/include/mysql &>/dev/null# 配置MySQL库文件路径(让系统能识别MySQL的动态链接库)
echo '/usr/local/mysql/lib'>/etc/ld.so.conf.d/mysql.conf
# 刷新系统动态链接库缓存
ldconfig

7. 编辑mysql配置文件(多实例核心配置)

# 创建/etc/my.cnf配置文件,定义多实例参数
cat > /etc/my.cnf << EOF
[mysqld_multi]
# 指定mysqld_safe(MySQL安全启动程序)路径
mysqld = /usr/local/mysql/bin/mysqld_safe
# 指定mysqladmin(MySQL管理工具)路径
mysqladmin = /usr/local/mysql/bin/mysqladmin# 3306实例配置
[mysqld3306]
basedir = /usr/local/mysql  # MySQL安装目录
datadir = /opt/data/3306    # 数据目录
socket = /tmp/mysql3306.sock  # 本地连接socket文件(唯一标识实例)
port = 3306                 # 端口号
pid-file = /opt/data/3306/mysql_3306.pid  # 进程ID文件
log-error = /var/log/3306.log  # 错误日志文件# 3307实例配置(与3306类似,路径和端口唯一)
[mysqld3307]
basedir = /usr/local/mysql
datadir = /opt/data/3307
socket = /tmp/mysql3307.sock
port = 3307
pid-file = /opt/data/3307/mysql_3307.pid
log-error = /var/log/3307.log# 3308实例配置
[mysqld3308]
basedir = /usr/local/mysql
datadir = /opt/data/3308
socket = /tmp/mysql3308.sock
port = 3308
pid-file = /opt/data/3308/mysql_3308.pid
log-error = /var/log/3308.log
EOF

启动mysql服务(启动多实例)

# 通过mysqld_multi工具启动3306实例
mysqld_multi start 3306
# 启动3307实例
mysqld_multi start 3307
# 启动3308实例
mysqld_multi start 3308

设置数据库密码(初始化安全配置)

# 连接3306实例并设置root密码(-S:指定socket文件;-e:执行SQL命令;password(3edc4rfv):设置密码为3edc4rfv)
mysql -uroot -S /tmp/mysql3306.sock -e "set password=password('3edc4rfv')"
# 设置3307实例密码
mysql -uroot -S /tmp/mysql3307.sock -e "set password=password('3edc4rfv')"
# 设置3308实例密码
mysql -uroot -S /tmp/mysql3308.sock -e "set password=password('3edc4rfv')"

登入测试(验证多实例可用性)

# 连接3306实例测试(-p:指定密码;-S:指定socket文件)
[root@hrz1 ~]# mysql -uroot -p3edc4rfv -S /tmp/mysql3306.sock 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.37 MySQL Community Server (GPL)
...
mysql> quit;  # 退出连接
Bye# 连接3307实例测试
[root@hrz1 ~]# mysql -uroot -p3edc4rfv -S /tmp/mysql3307.sock 
...
mysql> quit;
Bye# 连接3308实例测试
[root@hrz1 ~]# mysql -uroot -p3edc4rfv -S /tmp/mysql3308.sock  
...
mysql> quit
Bye
http://www.dtcms.com/a/394521.html

相关文章:

  • 使用批处理脚本快速切换 Claude API 实现多平台环境配置
  • SkyDiffusion:用 BEV 视角打开街景→航拍图像合成新范式
  • 免费下载适用于 Windows PC 的 Pixologic Zbrush 2026
  • 10.eNSP下载及安装教程(2025年9月21日)
  • Qt 实战 之 打包部署
  • QT-文件
  • 2001-2022年全国地级市高铁开通数据
  • TenstoRT加速YOLOv11——C++端加速
  • 面试技巧第三篇:嵌入式操作系统基础考点:任务、调度和中断
  • 简单使用Vanna
  • 【面板数据】各省环境保护支出统计数据集(2007-2023年)
  • 无需格式转换!FileOptimizer将文件体积压至极致的软件
  • 【论文速递】2025年第17周(Apr-20-26)(Robotics/Embodied AI/LLM)
  • Spring Framework 入门:传统 XML 配置启动方式详解
  • 构建AI智能体:四十、K-Means++与RAG的融合创新:智能聚类与检索增强生成的深度应用
  • Python 中,判断元素是否存在于列表(list)和判断键是否存在于字典(dict)
  • 如何在 Windows 上恢复已删除/未保存的 PowerPoint 文件 - 4 种快速方法
  • 【含文档+PPT+源码】基于过滤协同算法的城市旅游网站的设计与实现
  • week 2
  • Core Animation基础
  • OpenVLC解析
  • 【AI论文】ScaleCUA:借助跨平台数据扩展开源计算机使用代理(系统/工具)规模
  • NW951NW916美光固态闪存NW926NW927
  • Python 如何优雅处理 100GB 数据集——实战案例
  • 快速学习Python(有其他语言基础)
  • 全网首发! Nvidia Jetson Thor 128GB DK 刷机与测评(六)常用功能测评 pi0、pi0.5 环境部署
  • git环境操作指南
  • 【C语言数据结构】题目解析:第1章课后习题
  • 数字魔方,完成二阶、三阶、四阶、五阶复原提示
  • 电子元器件-二级管终篇:基本原理,元件作用与应用场景、参数/数据手册详解,类型介绍/实战