当前位置: 代码网 > it编程>数据库>Mysql > MySQL多实例管理如何在一台主机上运行多个mysql

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

2025年07月24日 Mysql 我要评论
一、什么是mysql多实例多实例,就是在一台linux主机上运行多个mysql,节约计算资源,区别在于不同的端口。例如# 数据库实例1/my_mysql/3306/ #目录/my_m

一、什么是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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com