(一)mysql的多实例:
(1)多实例的说明:
①多实例的解释:
1、互相独立的进程
2、互相对立的数据
3、互相之间有隐私性
②应用场景:
1、业务不是特别繁忙,且项目多,并且希望业务隔离开
2、业务不是特别繁忙,想省钱
3、主从复制,读写分离集群环境,节省服务器数量
4、大厂都会多实例,比如sina、百度、阿里
5、使用的是物理服务器
(2)多实例的创建:
①创建多个实例:
1、创建额外的文件夹用来存放另外实例的数据:
[root@node1-mysql8 ~]# mkdir -p /data/{3307,3308}/data
2、创建多实例的配置文件:
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
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
EOF
3、授权配置文件以及目录:
[root@node1-mysql8 data]# chown -R mysql.mysql /data/{3307,3308}
4、检查授权情况:
[root@node1-mysql8 data]# ls -l /data/
total 0
drwxr-xr-x 3 mysql mysql 18 Jul 19 07:16 3306
drwxr-xr-x 3 mysql mysql 32 Jul 21 19:29 3307
drwxr-xr-x 3 mysql mysql 32 Jul 21 19:29 3308
[root@node1-mysql8 data]#
5、初始化多实例:
[root@node1-mysql8 data]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
[root@node1-mysql8 data]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
6、启动:
[root@node1-mysql8 data]# mysqld_safe --defaults-file=/data/3307/my.cnf &
[root@node1-mysql8 data]# mysqld_safe --defaults-file=/data/3308/my.cnf &
7、检查:
[root@node1-mysql8 data]# netstat -tunlp|grep mysql
tcp6 0 0 :::3306 :::* LISTEN 2068/mysqld
tcp6 0 0 :::3307 :::* LISTEN 4231/mysqld
tcp6 0 0 :::3308 :::* LISTEN 3910/mysqld
[root@node1-mysql8 data]#
8、登录多实例:
[root@node1-mysql8 data]# mysql -S /data/3307/mysql.sock
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
[root@node1-mysql8 ~]# mysql -S /data/3308/mysql.sock
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
9、制作快捷登录方式:
1.实例3307:
[root@node1-mysql8 ~]# cat /data/3307/mysql
#!/bin/sh
# chkconfig: 2345 64 36
#init
port=3307
mysql_user="root"
CmdPath="/usr/local/mysql/bin"
mysql_sock="/data/${port}/mysql.sock"
mysqld_pid_file_path=/data/$prot/$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
[root@node1-mysql8 ~]#
[root@node1-mysql8 ~]# cat /data/3308/mysql
#!/bin/sh
# chkconfig: 2345 64 36
#init
port=3308
mysql_user="root"
CmdPath="/usr/local/mysql/bin"
mysql_sock="/data/${port}/mysql.sock"
mysqld_pid_file_path=/data/$prot/$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
[root@node1-mysql8 ~]#
10、授权启动文件:
[root@node1-mysql8 ~]# chmod +x /data/{3307,3308}/mysql
11、检查:
[root@node1-mysql8 ~]# ls -l /data/3307/mysql
-rwxr-xr-x 1 root root 1032 Jul 21 20:35 /data/3307/mysql
[root@node1-mysql8 ~]# ls -l /data/3308/mysql
-rwxr-xr-x 1 root root 1032 Jul 21 20:35 /data/3308/mysql
[root@node1-mysql8 ~]#
12:启动:
[root@node1-mysql8 ~]# /data/3307/mysql start
Starting MySQL...
[root@node1-mysql8 ~]# /data/3308/mysql start
Starting MySQL...
13、制作systemctl启动方式:{要先关闭目录重启的哦}
1.拷贝文件到启动文件下:
[root@node1-mysql8 ~]# cp /data/3307/mysql /etc/init.d/mysqld3307
[root@node1-mysql8 ~]# cp /data/3308/mysql /etc/init.d/mysqld3308
2.检查授权:
[root@node1-mysql8 ~]# ls -l /etc/init.d/mysqld3307
-rwxr-xr-x 1 root root 1032 Jul 21 21:52 /etc/init.d/mysqld3307
[root@node1-mysql8 ~]# ls -l /etc/init.d/mysqld3308
-rwxr-xr-x 1 root root 1032 Jul 21 21:52 /etc/init.d/mysqld3308
3.重载:
[root@node1-mysql8 ~]# systemctl daemon-reload
4.开机启动:
[root@node1-mysql8 ~]# systemctl enable mysqld3307
[root@node1-mysql8 ~]# systemctl enable mysqld3308
[root@node1-mysql8 ~]#
12、启动:
[root@node1-mysql8 ~]# systemctl start mysqld3307
[root@node1-mysql8 ~]# systemctl start mysqld3308
[root@node1-mysql8 ~]# netstat -tunlp|grep mysql
tcp6 0 0 :::3307 :::* LISTEN 4596/mysqld
tcp6 0 0 :::3308 :::* LISTEN 4789/mysqld
[root@node1-mysql8 ~]#
[root@node1-mysql8 ~]# netstat -tunlp|grep 33
tcp6 0 0 :::3307 :::* LISTEN 6032/mysqld
tcp6 0 0 :::3308 :::* LISTEN 5765/mysqld
(二)在同一台机器上安装mysql5.7和5.6:
(1)安装mysql5.7:
①准备目录:
1、准备软件包:
[root@node1-mysql8 ~]# ll
-rw-r--r-- 1 root root 724672294 Jul 10 23:43 mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
[root@node1-mysql8 ~]#
2、解压并修改文件名:
root@node1-mysql8 ~]# tar -xf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@node1-mysql8 local]# mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql57
②准备配置文件:
1、5.7的配置文件:
[root@node1-mysql8 ~]# cat /data/3357/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql57
datadir=/data/3357/data
port=3357
socket=/data/3357/mysql.sock
[root@node1-mysql8 ~]#
2、创建数据目录:
[root@node1-mysql8 ~]# mkdir -p /data/3357/data
3、授权目录和配置文件:
[root@node1-mysql8 local]# chown -R mysql.mysql /data/3357/
③初始化:
1、初始化的时候要注意路径,要和配置文件中的路径要一致,还要注意的是,8.0中有些选项在5.7中是没有的,但是启动的时候会去/etc/my.cnf去找,最好把多余的选项给去掉比如mysqlx=0
[root@node1-mysql8 bin]# /usr/local/mysql57/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/3357/data
④制作启动方式:
1、mysql5.7的启动文件:
[root@node1-mysql8 ~]# cat /etc/init.d/mysqld3357
#!/bin/sh
# chkconfig: 2345 64 36
#init
port=3357
mysql_user="root"
CmdPath="/usr/local/mysql57/bin"
mysql_sock="/data/${port}/mysql.sock"
mysqld_pid_file_path=/data/$prot/$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
[root@node1-mysql8 ~]#
2、开机启动:
[root@node1-mysql8 ~]# systemctl enable mysqld3357
3、启动:
[root@node1-mysql8 ~]# systemctl restart mysqld3357
⑤最后测试:
1、指定sockert启动:
[root@node1-mysql8 ~]# mysql -S /data/3357/mysql.sock -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.28 MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
(2)安装mysql5.6:
①准备目录:
1、准备软件包:
[root@node1-mysql8 /]# mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz
2、解压并修改文件名:
[root@node1-mysql8 /]# tar -xf mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz -C /usr/local
root@node1-mysql8 ~]#
[root@node1-mysql8 local]# mv mysql-5.6.46-linux-glibc2.12-x86_64 mysql56
②准备配置文件:
1、5.6的配置文件:
[root@node1-mysql8 ~]# cat /data/3356/my.cnf
[mysqld]
user=mysql
basedir=/usr/local/mysql56
datadir=/data/3356/data
port=3356
socket=/data/3356/mysql.sock
[root@node1-mysql8 ~]#
2、创建数据目录:
[root@node1-mysql8 /]# mkdir -p /data/3356/data
3、授权目录和配置文件:
[root@node1-mysql8 ~]# chown -R mysql.mysql /data/3356
[root@node1-mysql8 ~]#
③初始化:
1、初始化的时候要注意路径,要和配置文件中的路径要一致,还要注意的是,8.0中有些选项在5.6中是没有的,但是启动的时候会去/etc/my.cnf去找,最好把多余的选项给去掉比如mysqlx=0
[root@node1-mysql8 ~]# /usr/local/mysql56/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql56 --datadir=/data/3356/data
④制作启动方式:
1、mysql5.6的启动文件:
[root@node1-mysql8 ~]# cat /etc/init.d/mysqld3356
#!/bin/sh
# chkconfig: 2345 64 36
#init
port=3356
mysql_user="root"
CmdPath="/usr/local/mysql56/bin"
mysql_sock="/data/${port}/mysql.sock"
mysqld_pid_file_path=/data/$prot/$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
[root@node1-mysql8 ~]#
2、开机启动:
[root@node1-mysql8 ~]# systemctl enable mysqld3356
3、启动:
[root@node1-mysql8 ~]# systemctl restart mysqld3356
⑤最后测试:
1、指定sockert启动:
[root@node1-mysql8 ~]# mysql -S /data/3356/mysql.sock -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.46 MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
⑥全部重启检测:
1、全部重启的方法:
[root@node1-mysql8 ~]# ls /etc/init.d/|grep mysql|awk '{print "/etc/init.d/"$0 " start" }'
/etc/init.d/mysqld start
/etc/init.d/mysqld3307 start
/etc/init.d/mysqld3308 start
/etc/init.d/mysqld3309 start
/etc/init.d/mysqld3356 start
/etc/init.d/mysqld3357 start
[root@node1-mysql8 ~]#
2、检查:
[root@node1-mysql8 ~]# netstat -tunlp|grep mysql
tcp6 0 0 :::3356 :::* LISTEN 10261/mysqld
tcp6 0 0 :::3357 :::* LISTEN 10434/mysqld
tcp6 0 0 :::33060 :::* LISTEN 8984/mysqld
tcp6 0 0 :::3306 :::* LISTEN 8984/mysqld
tcp6 0 0 :::3307 :::* LISTEN 9706/mysqld
tcp6 0 0 :::3308 :::* LISTEN 9899/mysqld
tcp6 0 0 :::3309 :::* LISTEN 10092/mysqld
[root@node1-mysql8 ~]#
⑦故障案例:{过了一段时间以后mysql竟然重启失败了}
1、故障信息如下:
ion: '5.7.28' socket: '/data/3357/mysql.sock' port: 3357 MySQL Community Server (GPL)
[root@node1-mysql8 ~]# journalctl -xe
Jul 31 01:34:06 node1-mysql8.0 systemd[1]: mysqld3357.service: control process exited, code=exited status=1
Jul 31 01:34:06 node1-mysql8.0 systemd[1]: Failed to start (null).
-- Subject: Unit mysqld3357.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mysqld3357.service has failed.
--
-- The result is failed.
Jul 31 01:34:06 node1-mysql8.0 systemd[1]: Unit mysqld3357.service entered failed state.
Jul 31 01:34:06 node1-mysql8.0 systemd[1]: mysqld3357.service failed.
Jul 31 01:34:06 node1-mysql8.0 polkitd[913]: Unregistered Authentication Agent for unix-process:2604:2895733 (system bus name :1.141,
Jul 31 01:35:15 node1-mysql8.0 polkitd[913]: Registered Authentication Agent for unix-process:2630:2902568 (system bus name :1.142 [/u
Jul 31 01:35:15 node1-mysql8.0 systemd[1]: Starting (null)...
-- Subject: Unit mysqld3357.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mysqld3357.service has begun starting up.
Jul 31 01:35:15 node1-mysql8.0 mysqld3357[2636]: MySQL is running...
Jul 31 01:35:15 node1-mysql8.0 systemd[1]: mysqld3357.service: control process exited, code=exited status=1
Jul 31 01:35:15 node1-mysql8.0 systemd[1]: Failed to start (null).
-- Subject: Unit mysqld3357.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mysqld3357.service has failed.
--
-- The result is failed.
Jul 31 01:35:15 node1-mysql8.0 systemd[1]: Unit mysqld3357.service entered failed state.
Jul 31 01:35:15 node1-mysql8.0 systemd[1]: mysqld3357.service failed.
Jul 31 01:35:15 node1-mysql8.0 polkitd[913]: Unregistered Authentication Agent for unix-process:2630:2902568 (system bus name :1.142,
[root@node1-mysql8 ~]#
2、处理办法:{可能是由于上次没有正确关闭导致socket还在,删除socket即可}
[root@node1-mysql8 ~]# rm -fr /data/3357/mysql.sock
[root@node1-mysql8 ~]# rm -fr /data/3357/mysql.sock.lock
[root@node1-mysql8 ~]# systemctl restart mysqld3357
[root@node1-mysql8 ~]#