目录
一,多实例应用场景
1.业务不是特别繁忙,且项目多,并且希望业务隔离开。
2.业务不是特别繁忙,想省钱。
3.主从复制,读写分离集群环境,节省服务器数量...
4.大厂都会多实例,比如sina、百度、阿里。
5.使用的是物理服务器。
二,MySQL多实例独特性
1,独立进程
2,独立端口
3,独立配置文件
/data/3306/my.cnf
/data/3307/my.cnf
/data/3308/my.cnf
4,独立数据文件目录
/data/3306/data
/data/3307/data
/data/3308/data
三,下载安装mysql
1,下载地址
https://downloads.mysql.com/archives/community/
2,下载命令
sudo wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
3,解压
sudo mkdir /opt/mysql8.0.36
sudo tar -xf mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
sudo mv mysql-8.0.36-linux-glibc2.28-x86_64 /opt/mysql8.0.36
四,配置启动mysql多个实例
1,创建多实例数据文件目录
sudo mkdir -p /data/{3306,3307,3308}/data
sudo chown -R mysql.mysql /data
2,创建多实例配置文件
# 3306实例
sudo cat >/data/3306/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
port=3306
socket= /data/3306/mysql.sock
mysqlx=0
EOF
# 3307实例
sudo cat >/data/3307/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3307/data
port=3307
socket= /data/3307/mysql.sock
mysqlx=0
EOF
# 3308实例
sudo cat >/data/3308/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3308/data
port=3308
socket=/data/3308/mysql.sock
mysqlx=0
3,配置MySQL多实例文件权限
sudo chown -R mysql.mysql /data/{3306,3307,3308}/data
4,初始化多实例数据库
sudo /opt/mysql8.0.36/bin/mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql8.0.36 --datadir=/data/3306/data
sudo /opt/mysql8.0.36/bin/mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql8.0.36 --datadir=/data/3307/data
sudo /opt/mysql8.0.36/bin/mysqld --initialize-insecure --user=mysql --basedir=/opt/mysql8.0.36 --datadir=/data/3308/data
5,启动多实例
sudo /opt/mysql8.0.36/bin/mysqld_safe --defaults-file=/data/3306/my.cnf &
sudo /opt/mysql8.0.36/bin/mysqld_safe --defaults-file=/data/3307/my.cnf &
sudo /opt/mysql8.0.36/bin/mysqld_safe --defaults-file=/data/3308/my.cnf &
6,把bin目录添加到path全局变量
-
使用文本编辑器编辑
/etc/profile
文件sudo vim /etc/profile
-
在文件的末尾添加以下行:
export PATH=/opt/mysql8.0.36/bin:$PATH
-
保存文件并退出编辑器。
-
为了使更改生效,可以重新登录或者执行以下命令:
source /etc/profile
四,检查
1,进程检查
2,端口检查
3,登录不同多实例
mysql -S /data/3306/mysql.sock -u root #<==登录3306,默认无密码。
mysql -S /data/3307/mysql.sock -u root #<==登录3307,默认无密码。
mysql -S /data/3308/mysql.sock -u root #<==登录3308,默认无密码。
五,创建systemd服务实现开机自启动
1,创建启动,停止,重启脚本
sudo vim /data/3306/mysql
#!/bin/sh
#init
port=3306 ##唯一区别就是这里。
mysql_user="root"
CmdPath="/opt/mysql8.0.36/bin"
mysql_sock="/data/${port}/mysql.sock"
mysqld_pid_file_path=/data/$port/$port.pid
start(){
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL...\n"
/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${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 "Stoping 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"
esac
2,创建systemd服务
sudo vim /etc/systemd/system/mysql3306.service
[Unit]
Description=MySQL Server on port 3306
After=network.target
[Service]
Type=forking
User=root
ExecStart=/bin/sh /data/3306/mysql start
ExecStop=/bin/sh /data/3306/mysql stop
ExecReload=/bin/sh /data/3306/mysql restart
PIDFile=/data/3306/3306.pid
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
3,重载 Systemd 管理器配置
sudo systemctl daemon-reload
4,设置开机启动
sudo systemctl enable mysql3306.service
5,启动服务
sudo systemctl start mysql3306.service
6,检查服务状态
sudo systemctl status mysql3306.service

7,重新启动服务
sudo systemctl restart mysql3306.service
8,停止服务
sudo systemctl stop mysql3306.service

9,其他两个只需要修改
sudo vim /data/3307/mysql
sudo vim /data/3308/mysql
sudo vim /etc/systemd/system/mysql3307.service
[Unit]
Description=MySQL Server on port 3307
After=network.target
[Service]
Type=forking
User=root
ExecStart=/bin/sh /data/3307/mysql start
ExecStop=/bin/sh /data/3307/mysql stop
ExecReload=/bin/sh /data/3307/mysql restart
PIDFile=/data/3307/3307.pid
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
sudo vim /etc/systemd/system/mysql3308.service
[Unit]
Description=MySQL Server on port 3308
After=network.target
[Service]
Type=forking
User=root
ExecStart=/bin/sh /data/3308/mysql start
ExecStop=/bin/sh /data/3308/mysql stop
ExecReload=/bin/sh /data/3308/mysql restart
PIDFile=/data/3308/3308.pid
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
设置开机自启动:
sudo systemctl enable mysql3307.service
sudo systemctl enable mysql3308.service
10,重启主机测试 sudo reboot
11,取消开机自启动
sudo systemctl disable mysql3308.service