MySql 8 一机多实例部署

mysql单实例的链接数量毕竟有限。如果有并行业务,单业务数据量不是很大,但并行服务多,对连接数要求高的,可以在一台机器上部署多个数据库实例满足需求。

之前可以使用docker镜像的方式实现一机多实例的部署,但是近些年来docker限制太多,环境部署太不稳定,故舍弃docker模式。

而mysql从8.0开始已经支持多实例部署,所以根据业务需求数据库部署方式改为使用mysql8版本部署。以下部署方式都是生产环境已检验,为实现"一键部署"而编写的shell脚本代码。所使用的mysql版本是在官网下载的linux通用版本;
mysql下载地址https://dev.mysql.com/downloads/mysql/官方部署引导文档地址
https://dev.mysql.com/doc/refman/8.4/en/binary-installation.html

一键部署脚本实例如下:

bash 复制代码
#笔者使用的数据库版本,读者可以选择自己需要的版本
mysql_version="mysql-8.4.7-linux-glibc2.28-x86_64-minimal"
#创建用户组:mysql
groupadd mysql
#关于下面一行脚本百度给了清晰解释:
#创建一个系统用户(-r),用于运行服务和应用程序,不需要创建目录。用户组指定为mysql(-g)
#-s /bin/false:这个选项设置用户的登录shell为/bin/false。设置为/bin/false可以防止用户通过常规的登录方式登录系统。这是一种安全措施,常用于系统用户,确保它们不能直接登录。
#mysql:这是新用户的用户名。
#完整的命令将创建一个名为mysql的系统用户,该用户属于mysql组,并且不能通过常规的登录方式登录系统。这对于运行数据库服务(如MySQL或MariaDB)非常有用,因为这些服务通常以非交互式方式运行,不需要用户登录。
useradd -r -g mysql -s /bin/false mysql
#可以将下载好的msyql压缩文件解压后移动到你要放置的根目录,建议放在/usr/local/目录
#为什么?
#在Linux系统中,/usr/local/目录通常用于安装通过源代码编译的程序,这些程序不是通过系统的包管理系统(如APT、YUM等)安装的。这个目录是专门为管理员和用户安装的软件准备的,它与系统自带的软件(通常安装在/usr/目录下)有所区别。
#/usr/local/目录的用途
‌#自定义安装‌:允许用户或管理员在不干扰系统默认软件包的情况下安装软件。
‌#版本控制‌:可以安装不同版本的软件,而不会与系统自带的版本冲突。
‌#权限管理‌:通常,/usr/local/下的文件和目录可以有更宽松的权限设置,便于管理。
mv ${mysql_version}.tar.xz /usr/local/
cd /usr/local/
xz -d ${mysql_version}.tar.xz
tar -xvf mysql-8.4.7-linux-glibc2.28-x86_64-minimal.tar
#建立软连接,也就是别名,方便使用,也可以直接使用mv改名 
ln -s /usr/local/${mysql_version} mysql
#赋权
chown -R mysql:mysql /usr/local/mysql/
cd mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files

for port in $(seq 3306 3307)
do
  mkdir -p /opt/mysql/$port/data
  mkdir -p /opt/mysql/$port/etc
  mkdir -p /opt/mysql/$port/pid
  mkdir -p /opt/mysql/$port/socket
  mkdir -p /opt/mysql/$port/log
  echo "[mysqld]
port=$port
mysqlx_port=${port}0
mysqlx_socket=/opt/mysql/${port}/socket/mysqlx.socket
user=mysql
basedir=/usr/local/mysql
datadir=/opt/mysql/${port}/data
socket=/opt/mysql/${port}/socket/mysql.sock
log-error=/opt/mysql/$port/log/mysql.err
pid-file=/opt/mysql/$port/pid/mysql.pid
#character config
character_set_server=utf8mb4
" > /opt/mysql/$port/etc/my.cnf

done
chown -R mysql:mysql  /opt/mysql/

for port in $(seq 3306 3307)
do
/usr/local/mysql/bin/mysqld --defaults-file=/opt/mysql/$port/etc/my.cnf  --user=mysql --basedir=/usr/local/mysql --datadir=/opt/mysql/$port/data --initialize-insecure
/usr/local/mysql/bin/mysqld_safe --defaults-file=/opt/mysql/$port/etc/my.cnf --basedir=/usr/local/mysql --datadir=/opt/mysql/$port/data --pid-file=/opt/mysql/$port/pid/mysql${port}.pid &
sleep 4
mysql -h127.0.0.1 -P$port -uroot -e "CREATE USER 'root'@'%' IDENTIFIED BY 'root'"
mysql -h127.0.0.1 -P$port -uroot -e "GRANT ALL ON *.* TO 'root'@'%'"
mysql -h127.0.0.1 -P$port -uroot -e "ALTER USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'root'"
mysql -h127.0.0.1 -P$port -uroot -e "FLUSH PRIVILEGES"
done
相关推荐
摇滚侠6 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试6 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
qq_401700417 小时前
Linux设备树详解
linux·运维·服务器
2501_937767167 小时前
自建 SQL 数据库定时备份踩坑复盘与落地思路
数据库·sql
云梦谭7 小时前
让 Linux 主动连接 Windows:配置 Windows 11 SSH 服务端
linux·windows·ssh
刚入门的大一新生7 小时前
Linux-信号
linux·运维·服务器
silvamux_8 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
I Am a robert girl10 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
躺柒10 小时前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界
SelectDB10 小时前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析