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

 更新时间:2025年07月24日 14:39:06   作者:皮蛋solo.粥  
文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读写分离架构,感兴趣的朋友一起看看吧

一、什么是MySQL多实例

多实例,就是在一台Linux主机上运行多个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应用,初始化三次,生成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,配置的环境的清理,清空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
socket=/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="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
#赋予权限
[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 -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的初始数据

[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_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的排错流程

准备配置文件是否有误

准备启停脚本 授权


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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 理解MySQL变量和条件

    理解MySQL变量和条件

    这篇文章主要帮助大家深入理解MySQL变量和条件,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • MySQL怎么实现原子性的流程详解(以UPDATE为例)

    MySQL怎么实现原子性的流程详解(以UPDATE为例)

    原子性是事务的其中一个特性,指的是要么全部执行完,要么全都不执行,这篇文章主要介绍了MySQL怎么实现原子性(以UPDATE为例)的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-08-08
  • MySQL Router的安装部署

    MySQL Router的安装部署

    这篇文章主要介绍了MySQL Router的安装部署,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-04-04
  • 使用MySQL JSON查询筛选嵌套字段的值方式

    使用MySQL JSON查询筛选嵌套字段的值方式

    本文介绍了如何在MySQL中查询JSON字段中的特定数据,通过使用JSON_EXTRACT和JSON_UNQUOTE函数,可以方便地从嵌套的JSON结构中提取所需的信息,此外,还讨论了性能优化和数据规范化建议,以提高查询效率
    2026-01-01
  • 关于MySql 10038错误的完美解决方法(三种)

    关于MySql 10038错误的完美解决方法(三种)

    本文给大家带来三种有关mysql报10038错误的解决方法,每种方法都非常不错,需要的朋友参考下
    2016-09-09
  • 详解使用navicat连接远程linux mysql数据库出现10061未知故障

    详解使用navicat连接远程linux mysql数据库出现10061未知故障

    这篇文章主要介绍了navicat连接远程linux mysql数据库出现10061未知故障,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • MySQL大表数据的分区与分库分表的实现

    MySQL大表数据的分区与分库分表的实现

    数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • MySQL Index Condition Pushdown(ICP)性能优化方法实例

    MySQL Index Condition Pushdown(ICP)性能优化方法实例

    这篇文章主要介绍了MySQL Index Condition Pushdown(ICP)性能优化方法实例,本文讲解了概念介绍、原理、实践案例、案例分析、ICP的使用限制等内容,需要的朋友可以参考下
    2015-05-05
  • MySql数据库基础知识点总结

    MySql数据库基础知识点总结

    这篇文章主要介绍了MySql数据库基础知识点,总结整理了mysql数据库基本创建、查看、选择、删除以及数据类型相关操作技巧,需要的朋友可以参考下
    2020-06-06
  • MySQL的Query Cache和PostgreSQL的pg_prewarm详解

    MySQL的Query Cache和PostgreSQL的pg_prewarm详解

    MySQL QueryCache(已废弃)缓存SQL结果,依赖全匹配且数据不变,高并发写时性能差;PostgreSQL pg_prewarm预加载数据页至共享缓冲区,提升冷启动效率,需手动维护,建议用应用层缓存或InnoDB BufferPool替代
    2025-07-07

最新评论