mysql部署多实例
Salted Fish 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
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
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
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
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
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
2
3
查看监听端口
ss -tnl
1
# 2、基于脚本进行启停
上面的使用命令一个个启动比较繁琐,这里使用准备好的脚本,放到对应的实例bin 目录下,并授予其执行权限
touch ./3306/bin/mysql-3306
chmod +x ./3306/bin/mysql-3306
1
2
3
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
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