mysql部署多实例

2025/1/3 Install

结合文章Mysql安装一起看

# 一、准备工作

下载地址:MySQL :: Download MySQL Community Server (Archived Versions) (opens new window)

# 1、安装mysql的客户端到主机上

所有客户端,可远程登录MySQL服务器的控制页面上

yum -y install mysql
1

# 2、将准备好的mysql数据库二进制包存放指定位置

将其解压,更名,放到 /usr/local/ 路径下

tar -xf mysql-8.0.29-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
1

为了使得MySQL数据库可以全局运行,因此将其加入到环境变量中

cat > /etc/profile.d/mysql.sh <<EOF
PATH=$PATH:/usr/local/mysql/bin/
EOF
1
2
3

运行使其生效

source /etc/profile.d/mysql.sh
1

也可以直接临时添加环境变量

echo PATH=$PATH:/usr/local/mysql/bin/
1

进行验证查看

echo $PATH
1

这样,进行MySQL命令时,就可以全局运行了

# 3、创建mysql兄弟的家

依据所需要创建的MySQL数据库实例,创建相应的文件目录

mkdir -p /data/330{6..8}/{data,etc,socket,log,bin,pid}
1
[root@sun data]# tree ./
./
├── 3306
│   ├── bin
│   ├── data
│   ├── etc
│   ├── log
│   ├── pid
│   └── socket
├── 3307
│   ├── bin
│   ├── data
│   ├── etc
│   ├── log
│   ├── pid
│   └── socket
└── 3308
    ├── bin
    ├── data
    ├── etc
    ├── log
    ├── pid
    └── socket
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

查看是否存在MySQL用户,没有就创建,然后将创建的文件的属主属组替换掉

[root@sun /]# id mysql || useradd mysql

[root@sun /]# chown -R mysql.mysql /data
1
2
3

# 4、编写多实例的数据库主配置文件

cat > /data/3306/etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/data/3306/socket/mysql.sock
log-error=/data/3306/log/mysql.log
pid-file=/data/3306/pid/mysql.pid
server_id=1
port=3306
EOF
1
2
3
4
5
6
7
8
9
10
11

使用sed命令对其他两个实例进行添加

sed 's/3306/3307/' /data/3306/etc/my.cnf > /data/3307/etc/my.cnf
1
sed 's/3306/3308/' /data/3306/etc/my.cnf > /data/3308/etc/my.cnf
1

# 5、初始化多个数据库实例的数据字典

mysqld --defaults-file=/data/3306/etc/my.cnf --initialize-insecure
mysqld --defaults-file=/data/3307/etc/my.cnf --initialize-insecure
mysqld --defaults-file=/data/3308/etc/my.cnf --initialize-insecure
1
2
3

# 二、验证MySQL多实例

# 1、启动实例:基于命令进行启动

mysqld_safe --defaults-file=/data/3306/etc/my.cnf &
mysqld_safe --defaults-file=/data/3307/etc/my.cnf &
mysqld_safe --defaults-file=/data/3308/etc/my.cnf &
1
2
3

查看监听端口

ss -tnl
1

# 2、基于脚本进行启停

上面的使用命令一个个启动比较繁琐,这里使用准备好的脚本,放到对应的实例bin 目录下,并授予其执行权限

touch ./3306/bin/mysql-3306

chmod +x ./3306/bin/mysql-3306
1
2
3

将所有的实例上都复制一份相应的启停脚本,并进行相应的调整

脚本内容:

#!/bin/bash
port=3306
mysql_user="root"
mysql_pwd=''
cmd_path="/usr/local/mysql/bin"
mysql_basedir="/data"
mysql_sock="/data/${port}/socket/mysql.sock"
 
function_start_mysql()
{
    if [ ! -e "$mysql_sock" ];then
        printf "Starting MySQL...\n"
        ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null &
    else
        printf "MySQL is running...\n"
        exit
    fi
}
 
function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ];then
        printf "MySQL is stopped...\n"
        exit
    else
        printf "Stoping MySQL...\n"
        ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
    fi
}
 
function_restart_mysql()
{
        printf "Restarting MySQL...\n"
        function_stop_mysql
        sleep 2
        function_start_mysql
}
 
case $1 in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

对于不同的实例,脚本中仅需要改造一下对应的暴露端口,就可以将其作为对应实例的启停脚本

# 3、登录验证

从上面可知,MySQL多实例启动的端口,这里是基于套接字直接进行连接的

mysql -S ./3306/socket/mysql.sock
1