LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

Mysql多实例——一个服务器多个mysql服务

zhenglin
2026年10月12日 15:13 本文热度 119

MySQL 多实例:从零搭建两个实例

一、为什么需要 MySQL 多实例

很多时候,为了充分利用服务器资源或省钱,都会需要 MySQL 多实例。

介绍:在一台物理服务器上运行多个独立的 MySQL 服务。

每个实例拥有:

  • 独立的数据目录、配置文件、端口号、日志文件


  • 独立的进程和系统资源分配(CPU、内存)


但是在学习的过程中我们可以了解到:数据库的数据目录、日志目录应该建在哪,配置文件怎么写,怎样为第二个实例创建服务单元,使得实例能被 systemctl 管理。


二、安装与配置过程

1. 安装并配置第一个实例

1.1 安装 MySQL 8 源

# 下载 MySQL 8 的 Yum 源

wget http://dev.mysql.com/get/mysql84-community-release-el8-1.noarch.rpm


# 安装 Yum 源

sudo yum localinstall mysql84-community-release-el8-1.noarch.rpm


# 安装 MySQL 服务器

sudo yum install mysql-community-server

1.2 启动第一个实例并做初始配置

# 启动第一个 MySQL 实例

sudo systemctl start mysqld


# 设置第一个 MySQL 实例开机自启

sudo systemctl enable mysqld


# 获取第一个实例的初始临时密码

sudo grep 'temporary password' /var/log/mysqld.log


# 登录第一个 MySQL 实例

mysql -u root -p

修改 root 用户密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Qiubai@123';

2. 创建并配置第二个实例(重点在这)

重点在于实例 2 的创建配置。

2.1 创建独立的数据目录与日志目录

数据与日志的目录得单独创建,但同时别忘了把文件权限改为 mysql。

# 创建第二个实例的数据目录

sudo mkdir -p /var/lib/mysql2

sudo chown -R mysql:mysql /var/lib/mysql2


# 创建第二个实例的日志目录

sudo mkdir -p /var/log/mysql2

sudo chown -R mysql:mysql /var/log/mysql2

2.2 单独创建配置文件

MySQL 配置文件也得单独创建。

sudo vi /etc/my.cnf.d/mysql2.cnf

添加以下内容:

[mysqld]


# 第二个实例的端口,避免与第一个实例冲突

port = 3307


# 第二个实例的数据目录

datadir = /var/lib/mysql2


# 第二个实例的日志文件路径

log-error = /var/log/mysql2/error.log


# 第二个实例的套接字文件路径

socket = /var/lib/mysql2/mysql.sock


# 服务器 ID,需要唯一

server-id = 2

2.3 初始化第二个实例

配置完毕后对实例初始化:

sudo mysqld --defaults-file=/etc/my.cnf.d/mysql2.cnf --initialize --user=mysql

执行该命令后,会生成一个临时密码,使用以下命令获取:

sudo grep 'temporary password' /var/log/mysql2/error.log

2.4 创建 systemd 服务文件

为了方便用 systemd 管理,创建第二个 MySQL 实例的服务文件:

sudo vi /etc/systemd/system/mysqld2.service

添加以下内容:

[Unit]

Description=MySQL Server 2

Documentation=man:mysqld(8)

Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html

After=network.target

After=syslog.target


[Install]

WantedBy=multi-user.target


[Service]

User=mysql

Group=mysql

ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my.cnf.d/mysql2.cnf

LimitNOFILE=5000

Restart=on-failure

RestartPreventExitStatus=1

PrivateTmp=false

2.5 启动第二个实例并设置开机自启

# 重新加载 systemd 管理器配置

sudo systemctl daemon-reload


# 启动第二个 MySQL 实例

sudo systemctl start mysqld2


# 设置第二个 MySQL 实例开机自启

sudo systemctl enable mysqld2

2.6 登录第二个实例并修改初始密码

mysql -u root -p -P 3307 -S /var/lib/mysql2/mysql.sock

注意这里需要加 -P 指明端口了。

输入之前获取的临时密码,登录成功后,修改 root 用户密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Qiubai@123';

三、验证两个实例的状态(三个维度)

1. 直接分别登录 MySQL

# 验证第一个实例

mysql -u root -p -P 3306


# 验证第二个实例

mysql -u root -p -P 3307 -S /var/lib/mysql2/mysql.sock

为什么第二个实例需要 -S + sock 路径?

从客户端访问的角度来说:

mysql -u root -p -P 3307        ← 没写 -h

        │

        └─ 客户端判断:没有 -h(或 -h localhost)

              │

              └─ 走 socket,去读【默认 socket 路径】

                    │

                    └─ 默认路径 = /var/lib/mysql/mysql.sock   ← 这是实例 1 的!

                          │

                          └─ 结果:你连上的是 3306 那个实例

                             (-P 3307 被完全忽略)

2. 查看进程

ps aux | grep mysqld | grep -v grep

3. 查看端口

ss -lntp | grep mysql    # 一定要确认端口未被占用

四、熟悉实例操作的常用命令

操作命令
启动指定实例systemctl start mysqld
停止指定实例systemctl stop mysqld2
查看日志tail -f /var/log/mysql2/error.log
连接指定实例mysql -uroot -p -P 3307 -h 127.0.0.1
备份指定实例mysqldump -uroot -p -S /var/lib/mysql2/mysql.sock --all-databases > backup.sql


阅读原文:点击这里​


该文章在 2026/10/12 15:13:45 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-9  粤公网安备44030602007207号