一台主机部署多个mysql实例,看这一篇就够了
提前准备好MySQL数据库的8.0版本的二进制安装包。
·
一、准备工作
提前准备好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多实例启动的端口,这里是基于套接字直接进行连接的
更多推荐
已为社区贡献2条内容
所有评论(0)