一、准备工作

提前准备好MySQL数据库的8.0版本的二进制安装包

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

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

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

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

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

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

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

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

运行使其生效

source /etc/profile.d/mysql.sh

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

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

进行验证查看

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

3、创建mysql兄弟的家

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

mkdir -p /data/330{6..8}/{data,etc,socket,log,bin,pid}

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

id mysql || useradd mysql
chown -R mysql.mysql /data

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

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

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

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

二、验证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 &

2、基于脚本进行启停

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

chmod +x ./3306/bin/mysql-3306

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

脚本内容:

#!/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

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

进行验证:

3、登录验证

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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐