文章目录
理论知识
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>