MySQL多实例管理如何在一台主机上运行多个mysql

2025-07-24 20:50

本文主要是介绍MySQL多实例管理如何在一台主机上运行多个mysql,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读...

一、什么是MySQL多实例

多实例,就是在一台linux主机上运行多个MySQL,节约计算资源,区别在于不同的端口。

MySQL多实例管理如何在一台主机上运行多个mysql

例如
# 数据库实例1
/my_mysql/3306/          #目录
/my_mysql/3306/data      #数据文件夹
/my_mysql/3306/my.cnf    #配置文件
/my_mysql/3306/mysqld    #启动脚本
# 数据库实例2
/my_mysql/3307/data   
/my_mysql/3307/my.cnf 
/my_mysql/3307/mysqld
# 不同的应用程序,读取不同的mysql实例

大型企业读写分离架构:

MySQL多实例管理如何在一台主机上运行多个mysql

基于—个mysql应用,初始化三次,生成3个独立的mysql数据目录,即为三个mysql独立的实例

二、二进制方式安装MySQL

1.获取二进制代码包

wget https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz

2.安装基础依赖

yum install ncurses-devel libaio-devel gcc make cmake -y

3.清空原安装内容(没有可忽略)

前面编译安装时已经启动MySQL,所以现在要先将它停掉(没有编译安装的可忽略);

MySQL多实例管理如何在一台主机上运行多个mysql

清空之前编译安装mysql,配置的环境的清理,清空PATH有关的mysql。

#进入文件
vim /etc/profile
#将以下这行注释掉
export PATH=/application/mysql/bin:$PATH
#停止当前linux的mysql,(如果存在mysql端口的话)
[root@mysql-01 tools]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!

4.创建mysql用户

# 这里无须重新创建
[root@mysql-01 tools]# id mysql
uid=1000(mysql) gid=1000(mysql) 组=1000(mysql)
[root@mysql-01 tools]#
# 没有创建mysql用户的需要创建

准备好mysql多实例的数据目录

mkdir -p /my_mysql/{3306,3307}
[root@mysql-01 tools]# tree /my_mysql/
/my_mysql/
├── 3306
└── 3307
2 directories, 0 files

5.解压缩二进制的mysql软件包

# -C 指定目录解压缩
[root@mysql-01 tools]# tar -zxvf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz -C /application
#解压完成
[root@mysql-01 tools]# cd /application/
[root@mysql-01 application]# ls -lth
总用量 0
# 刚才解压缩的二进制mysql安装目录
drwxr-xr-x 13 root  root  191 7月   3 11:15 mysql-5.6.40-linux-glibc2.12-x86_64
#编译安装生成的mysql安装目录
drwxr-xr-x 14 mysql mysql 216 7月   2 16:36 mysql-5.6.40
# —个简单的软连接
lrwxrwxrwx  1 root  root   26 7月   2 16:13 mysql -> /application/mysql-5.6.40/

6.准备二进制mysql运行所需的环境

准备mysql多实例的,各个配置文件

3306

3307

准备各个启停管理脚本

数据初始化,生成mysql的初始化data数据

三、准备多实例配置文件

#看好路径
[root@mysql-01 mysql-5.6.40-linux-glibc2.12-x86_64]# pwd
/application/mysql-5.6.40-linux-glibc2.12-x86_64
[root@mysql-01 mysql-5.6.40-linux-glibc2.12-x86_64]# cd /my_mysql/
[root@mysql-01 my_mysql]# cd 3306
[root@mysql-01 3306]# pwd
/my_mysql/3306

3306实例的配置文件

#创建文件
vim my.cnf
[client]
[mysqld]
port=3306
sockeChina编程t=/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

同样修改3307的配置文件

#注意修改如下参数
#3306换成3307;server-id不能和3306实例重复
[root@mysql-01 3306]# cd ../3307
[root@mysql-01 3307]# vim my.cnf
[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

四、MySQL(3306端口)启停脚本编程

注意!!!3307和3306 得区别开,需自行手动修改

[root@mysql-01 3307]# cd ../3306
[root@mysql-01 3306]# vim mysql_3306

将以下内容粘贴进去

#!/bin/bash
# MySQL服务管理脚本
port=3306
mysql_user="mysqlIXfSgl"
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" ]; then
        printf "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
    else
        printf "MySQL is running...\n"
        exit 1
    fi
}
stop() {
    if [ ! -e "$mysql_sock" ]; then
        printf "MySQL is stopped...\n"
        exit 1
    else
        printf "Stopping MySQL...\n"
        mysqld_pid=$(cat "$mysqld_pid_file_path")
        if kill -0 $mysqld_pid 2>/dev/null; then
            kill $mysqld_pid
            sleep 2
        fi
    fi
}
restart() {
    printf "Restarting MySQL...\n"
    stop
    sleep 2
    start
}
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    *)
        printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
        exit 1
        ;;
esac
#赋予权限
[root@mysql-01 3306]# chmod +x mysql_3306

五、MySQL(3307启停脚本)

跟上面操作类似

cd ../3307
vim mysql_3307
#!/bin/bash
# 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" ]; then
        printf "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
    else
        printf "MySQL is running...\n"
        exit 1
    fi
}
stop() {
    if [ ! -e "$mysql_sock" ]; then
        printf "MySQL is stopped...\n"
        exit 1
    else
        printf "Stopping MySQL...\n"
        mysqld_pid=$(cat "$mysqld_pid_file_path")
        if kill -0 $mysqld_pid 2>/dev/null; then
            kill $mysqld_pid
            sleep 2
        fi
    fi
}
restart() {
    printf "Restarting MySQL...\n"
    stop
    sleep 2
    start
}
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    *)
        printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
        exit 1
        ;;
esac
#赋权
chmod +x mysql_3307

六、用户、组授权

降低权限,全部赋予给mysql

[root@mysql-01 3307]# chown -R mysql.mysql /my_mysql/

七、PATH配置

[root@mysql-01 ~]# vim /etc/profile
[root@mysql-01 ~]# tail -1 /etc/profile
export PATH=/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin:$PATH
[root@mysql-01 ~]# source /etc/profile
[root@mysql-01 ~]# echo $PATH
/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[root@mysql-01 ~]# which mysql
/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin/mysql

八、创建多个实例对应的数据目录

分别创建 3306 3307 两个实例的数据目录

mkdir js-p /my_mysql/3307/data
mkdir -p /my_mysql/3306/data

查看一下

[root@mysql-01 ~]# tree /my_mysql
/my_mysql
├── 3306
│   ├── my.cnf
│   └── mysql_3306
└── 3307
    ├── data
    ├── my.cnf
    └── mysql_3307
3 directories, 4 files

九、MySQL多实例初始化

先初始化3306的数据

ls /my_mysql/3306/data/
# 此时3306的data文件夹是空的,没有数据

执行初始化,生成mysql运行所需的初始数据

sudo /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

出现2个ok后,表示正常

MySQL多实例管理如何在一台主机上运行多个mysql

此时会正确生成mysql的初始数据

[root@mysql-01 ~]# ls -l /my_mysql/3306/data
总用量 110600
-rw-rw---- 1 mysql mysql 12582912 7月   3 15:36 ibdata1
-rw-rw---- 1 mysql mysql 50331648 7月   3 15:36 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 7月   3 15:36 ib_logfile1
drwx------ 2 mysql mysql     4096 7月   3 15:36 mysql
drwx------ 2 mysql mysql     4096 7月   3 15:36 performance_schema
drwx------ 2 mysql mysql        6 7月   3 15:36 test

同样,生成3307数据

sudo /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表示初始化成功;

同样可以通过ls命令查看,这里不多赘述。

十、分别启动MySQL多实例

创建mysql的错误日志文件

touch /my_mysql/3306/mysql_3306_error.log
touch /my_mysql/3307/mysql_3307_error.log
# 以及对整个mysql目录再次授权
chown -R mysql.mysql /my_mysql/

确保当前没有其他mysql

netstat -tunlp |grep mysql

启动3306数据库

[root@mysql-01 ~]# /my_myChina编程sql/3306/mysql_3306 start
Starting MySQL...
[root@mysql-01 ~]#
# 用如下命令登录,使用sock套接字文件登录
mysql -S /my_mysql/3306/mysql.sock

同样,3307数据库也用以上相同方式创建,注意修改端口号即可;

至此,MySQL多实例分别启动完成。

另,可以自行在3306或3307其中一个里面通过create database xxx;创建一个数据库,然后根据show databases;查看来验证是否多实例启动成功。

再另,启动mysql的排错流程

准备配置文件是否有误

准备启停脚本 授权


chown -R mysql.mysql /my_mysql/

确保当前没有其他mysql
```bash
netstat -tunlp |grep mysql

启动3306数据库

[root@mysql-01 ~]# /my_mysql/3306/mysql_3306 start
Starting MySQL...
[root@mysql-01 ~]#
# 用如下命令登录,使用sock套接字文件登录
mysql -S /my_mysql/3306/mysql.sock

同样,3307数据库也用以上相同方式创建,注意修改端口号即可;

至此,MySQL多实例分别启动完成。

另,可以自行在3306或3307其中一个里面通过create database xxx;创建一个数据库,然后根据show databases;查看来验证是否多实例启动成功。

再另,启动mysql的排错流程

准备配置文件是否有误

准备启停脚本 授权

数据目录初始化

到此这篇关于MySQL多实例管理---在一台主机上运行多个mysql的文章就介绍到这了,更多相关mysql 运行多个mysql内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于MySQL多实例管理如何在一台主机上运行多个mysql的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155468

相关文章

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

MySQL中比较运算符的具体使用

《MySQL中比较运算符的具体使用》本文介绍了SQL中常用的符号类型和非符号类型运算符,符号类型运算符包括等于(=)、安全等于(=)、不等于(/!=)、大小比较(,=,,=)等,感兴趣的可以了解一下... 目录符号类型运算符1. 等于运算符=2. 安全等于运算符<=>3. 不等于运算符<>或!=4. 小于运

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成