0
点赞
收藏
分享

微信扫一扫

mysql的多实例

(一)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 ~]#































举报

相关推荐

0 条评论