MySql部署多实例

文章目录

理论知识

1、什么是实例?

实例可以理解为一个单独的"进程",在一台虚拟主机上运行多个Mysql的进程,也可以理解为合租房,这个房子就是主机,里面每一个卧室就是一个实例,卧室和卧室之间是相互独立的,不受干扰,这些卧室共享房间里面的公共资源,例如厨房、客厅【CPU 内存 硬盘】

2、为什么要使用实例

使用实例可以让计算机的资源得到最大化的利用,可以充分满足公司有不同业务需求方式需要单独进行存储数据的时候,节约了服务器的资源

3、实例有哪些应用场景?

(1)资金比较紧张的公司,像初创的公司,如果每一台服务器只运行部署一个数据库,有多个业务方向就得购买多台服务器,是不划算的(2)用户并发访问量不大的公司,但是公司有很多不同的业务需求方向(3)大型的网站也会进行使用多实例,因为大公司服务器的硬件资源是非常优越的,一般也会在一台服务器上部署多少实例,例如部署主从复制

4、实例有哪些缺点?

因为是在一台服务器上部署的,如果没有进行合理的规划和分配对应的资源,会出现抢占资源的情况

:::

实验环境

本次使用二进制的方式进行安装Mysql,并配置Mysql的多实例,配置多实例,最重要的是使用的不同端口号数据

安装部署流程步骤大致如下:

一次Mysql应用服务 2次初始化 生成2个Mysql

(1)前期环境的部署,下载二进制文件解压使用。完成数据目录的规划,安装依赖

(2)准备对应的配置文件、启动脚本

(3)进行数据的初始化

(4)启动数据库,创建对应数据库的root密码进行管理

主机 实例 对应的目录
10.0.0.51 实例1:3306 /my_msql/3306
实例2:3307 /my_msql/3307

注意,这里本人做了一个非常大的失误,下载二进制包的时候就直接解压在了/root的家目录,然后Mysql程序是使用的Mysql用户进行运行的,导致在后面启动的时候权限不够,因为/root用户的家目录其他用户是没有执行权限的,进不去目录大家做的时候先创建存放资料的目录

然后正常安装流程操作即可

我运用的临时解决方法 给/root目录的其他用户加了x权限

chmod o+x /root

环境准备

在开始实验之前,先检查目前的操作环境是否干净,端口是否被占用,之前是否已经安装了Mysql

bash 复制代码
[root@db01 ~]# netstat -lnpt | grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      46435/mysqld
[root@db01 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.SUCCESS!
#检查是否有Mysql的环境变量,有就注释掉
[root@db01 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@db01 ~]# tail -1 /etc/profile
#export PATH=/app/mysql/bin:$PATH
安装依赖、创建对应的数据目录、下载二进制包
bash 复制代码
#安装依赖包
[root@db01 ~]#  yum install -y ncurses-devel libaio-devel  cmake gcc wget
#创建数据库使用用户
[root@db01 ~]#  useradd -r -s /sbin/nologin mysql
#下载源数据到当前目录,二进制文件比较大需要时间下载
[root@db01 ~]#  wget https://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.49-linux-glibc2.12-x86_64.tar.gz
如果下载较慢 可以使用阿里云资源
wget https://mirrors.aliyun.com/mysql/MySQL-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
#创建对应的数据目录
[root@db01 ~]# mkdir -p /my_mysql/{3306/data,3307/data}
[root@db01 ~]# tree /my_mysql/
/my_mysql/
├── 3306
│   └── data
└── 3307
    └── data
#解压二进制包


PS:这里是使用的网易的yun源网站资源:https://mirrors.163.com/mysql/Downloads,有需要的软件包可以上传查询

运行MySql准备

准备3306、3307的配置文件

准备3306、3367的启动脚本

进行数据的初始化

准备3306的配置文件
bash 复制代码
[root@db01 ~]# vim /my_mysql/3306/my.cnf
[client]
[mysqld]
user=mysql
port=3306
socket=/my_mysql/3306/mysql.sock
basedir=/root/mysql-5.7.32-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
gpid-file=/my_mysql/3306/mysqld_3306.pid


#创建记录错误日志的日志信息
[root@db01 ~]# touch /my_mysql/3306/mysql_3306_error.log



#注意:basedir 基于的源文件 下载的二进制包解压在哪里就是哪里的路径
#     socket   datadir  1og-bin 可以自己指定
准备3307的配置文件
bash 复制代码
[root@db01 ~]# vim /my_mysql/3307/my.cnf
[client]
[mysqld]
user=mysql
port=3307
socket=/my_mysql/3307/mysql.sock
basedir=/root/mysql-5.7.32-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
gpid-file=/my_mysql/3307/mysqld_3307.pid

#创建记录错误日志的日志信息
[root@db01 ~]# touch /my_mysql/3307/mysql_3306_error.log

#查询实例数据资料目录树
[root@db01 3306]# tree /my_mysql/
/my_mysql/
├── 3306
│   ├── data
│   ├── my.cnf
│   └── mysql_3306_error.log
└── 3307
    ├── data
    ├── my.cnf
    └── mysql_3306_error.log

4 directories, 4 files



#注意:basedir 基于的源文件 下载的二进制包解压在哪里就是哪里的路径
#     socket   datadir  1og-bin 可以自己指定

进行目录权限修改,环境变量修改

bash 复制代码
[root@db01 ~]#  chown -R mysql.mysql /my_mysql/
[root@db01 ~]# chown -R mysql:mysql /root/mysql-5.7.38-linux-glibc2.12-x86_64
[root@db01 bin]# echo "export PATH=$PATH:/root/mysql-5.7.38-linux-glibc2.12-x86_64/bin" >>/etc/profile
profile    profile.d/ protocols
[root@db01 bin]# source /etc/profile



注意,这里本人做了一个非常大的失误,下载二进制包的时候就直接解压在了/root的家目录,然后Mysql程序是使用的Mysql用户进行运行的,导致在后面启动的时候权限不够,因为/root用户的家目录其他用户是没有执行权限的,进不去目录大家做的时候先创建存放资料的目录 然后正常安装流程操作即可
进行数据初始化

3306初始化数据

bash 复制代码
[root@db01 ~]# mysqld --defaults-file=/my_mysql/3306/my.cnf --initialize-insecure   --user=mysql --basedir=/root/mysql-5.7.38-linux-glibc2.12-x86_64 --datadir=/my_mysql/3306/data

注释:--defaults-file 必须写在第一个  不然会报错

3307初始化数据

bash 复制代码
[root@db01 ~]# mysqld --defaults-file=/my_mysql/3307/my.cnf --initialize-insecure   --user=mysql --basedir=/root/mysql-5.7.38-linux-glibc2.12-x86_64 --datadir=/my_mysql/3307/data
准备3306启动脚本文件
bash 复制代码
#使用systemctl进行启动
[root@db01 ~]# cp /usr/lib/systemd/system/mysqld{,3306}.service
[root@db01 3306]# cat /usr/lib/systemd/system/mysqld3306.service
[Unit]
Description=man:Mysql Server
Documentation=man:mysqld(8)
Documentation=https://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=/root/mysql-5.7.38-linux-glibc2.12-x86_64/bin/mysqld --defaults-file=/my_mysql/3306/my.cnf
LimitNOFILE = 5000


给执行权限
[root@db01 ~]# chmod +x  /usr/lib/systemd/system/mysqld3306.service
准备3307启动脚本文件
bash 复制代码
使用systemctl进行启动
[root@db01 ~]# cp /usr/lib/systemd/system/mysqld{,3307}.service
[root@db01 3306]# cat /usr/lib/systemd/system/mysqld3307.service
[Unit]
Description=man:Mysql Server
Documentation=man:mysqld(8)
Documentation=https://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=/root/mysql-5.7.38-linux-glibc2.12-x86_64/bin/mysqld --defaults-file=/my_mysql/3307/my.cnf
LimitNOFILE = 5000


给执行权限
[root@db01 ~]# chmod +x  /usr/lib/systemd/system/mysqld3307.service

#重新加载文件
[root@db01 ~]# systemctl daemon-reload
启动MySql
bash 复制代码
[root@db01 ~]# systemctl restart mysqld3306.service
[root@db01 ~]# systemctl status mysqld3306.service
● mysqld3306.service - man:Mysql Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld3306.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2025-12-10 21:26:20 CST; 2s ago
     Docs: man:mysqld(8)
           https://dev.mysql.com/doc/refman/en/using-systemd.html
 Main PID: 130278 (mysqld)
    Tasks: 1
   CGroup: /system.slice/mysqld3306.service

Dec 10 21:26:20 db01 mysqld[130278]: 2025-12-10T13:26:20.936867Z 0 [Note] InnoDB: Dumping buffer pool(s) to /my_mysql/3306/data/ib_buffer_pool
Dec 10 21:26:20 db01 mysqld[130278]: 2025-12-10T13:26:20.938306Z 0 [Note] InnoDB: Buffer pool(s) dump completed at 251210 21:26:20
Dec 10 21:26:22 db01 mysqld[130278]: 2025-12-10T13:26:22.550280Z 0 [Note] InnoDB: Shutdown completed; log sequence number 2749995
Dec 10 21:26:22 db01 mysqld[130278]: 2025-12-10T13:26:22.552016Z 0 [Note] InnoDB: Removed temporary tablespace data file: "ibtmp1"
Dec 10 21:26:22 db01 mysqld[130278]: 2025-12-10T13:26:22.552052Z 0 [Note] Shutting down plugin 'CSV'
Dec 10 21:26:22 db01 mysqld[130278]: 2025-12-10T13:26:22.552104Z 0 [Note] Shutting down plugin 'MRG_MYISAM'
Dec 10 21:26:22 db01 mysqld[130278]: 2025-12-10T13:26:22.552111Z 0 [Note] Shutting down plugin 'sha256_password'
Dec 10 21:26:22 db01 mysqld[130278]: 2025-12-10T13:26:22.552113Z 0 [Note] Shutting down plugin 'mysql_native_password'
Dec 10 21:26:22 db01 mysqld[130278]: 2025-12-10T13:26:22.552226Z 0 [Note] Shutting down plugin 'binlog'
Dec 10 21:26:22 db01 mysqld[130278]: 2025-12-10T13:26:22.552694Z 0 [Note]


[root@db01 3306]# systemctl start mysqld3307.service
[root@db01 3306]# systemctl status mysqld3307.service
● mysqld3307.service - man:Mysql Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld3307.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2025-12-10 21:46:51 CST; 1s ago
     Docs: man:mysqld(8)
           https://dev.mysql.com/doc/refman/en/using-systemd.html
 Main PID: 7333 (mysqld)
    Tasks: 27
   CGroup: /system.slice/mysqld3307.service
           └─7333 /root/mysql-5.7.38-linux-glibc2.12-x86_64/bin/mysqld --defaults-file=/my_mysql/3307/my.cnf

#查询端口数据 两个端口已经开启
[root@db01 3306]# netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      97825/sshd: root@pt
tcp        0      0 127.0.0.1:6011          0.0.0.0:*               LISTEN      97975/sshd: root@pt
tcp        0      0 127.0.0.1:6012          0.0.0.0:*               LISTEN      99485/sshd: root@pt
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      949/sshd
tcp6       0      0 ::1:6010                :::*                    LISTEN      97825/sshd: root@pt
tcp6       0      0 ::1:6011                :::*                    LISTEN      97975/sshd: root@pt
tcp6       0      0 ::1:6012                :::*                    LISTEN      99485/sshd: root@pt
tcp6       0      0 :::3306                 :::*                    LISTEN      7042/mysqld
tcp6       0      0 :::3307                 :::*                    LISTEN      7333/mysqld
tcp6       0      0 :::22                   :::*                    LISTEN      949/sshd

登入测试是否可以正常查询

使用套接字进行登入

bash 复制代码
[root@db01 ~]# mysql -S /my_mysql/3306/mysql.sock
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.38-log MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.



[root@db01 ~]# mysql -S /my_mysql/3307/mysql.sock
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.38-log MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
相关推荐
柠檬叶子C13 小时前
PostgreSQL 忘记 postgres 密码怎么办?(已解决)
数据库·postgresql
864记忆14 小时前
Qt创建连接注意事项
数据库·qt·nginx
小小bugbug14 小时前
mysql查询的原始返回顺序与limit分页优化
mysql·adb
毕设十刻14 小时前
基于Vue的迅读网上书城22f4d(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
薛定谔的猫198215 小时前
Langchain(十二)LangGraph 实战入门:用流程图思维构建 LLM 工作流
数据库·microsoft
坐吃山猪15 小时前
ChromaDB02-代码实战
数据库·向量数据库·chromadb
摇滚侠15 小时前
MySQL 中 utf8mb4 字符集,字母a占几个字节,一个汉字占几个字节 / MySQL 中 utf8mb3 字符集,字母a占几个字节,一个汉字占几个字节
数据库·mysql
ChineHe15 小时前
Redis数据类型篇001_数据类型梳理与选择指南
数据库·redis·缓存
Antoine-zxt15 小时前
MySQL CPU飙升至500%的深度排查与优化实践
数据库·mysql
Awkwardx15 小时前
MySQL数据库—MySQL基本查询
数据库·mysql