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
相关推荐
小二·10 小时前
RAG + 向量数据库实战:ChromaDB / Milvus / FAISS 选型与性能横评
数据库·milvus·faiss
矜持的左手10 小时前
电子小白的枕边书:电子学(The Art of Electronics)
数据库·restful
吴声子夜歌10 小时前
Redis 5.x——布隆过滤器
数据库·redis·缓存
RisunJan10 小时前
Linux命令-rlogin(远程登录)
linux·运维
蓝天下的守望者11 小时前
svt_apb_if里的宏定义问题
运维·服务器·数据库
上海云盾-小余11 小时前
网站频繁遭遇 SQL 注入溯源与原生漏洞修复全流程总结
数据库·sql
数据库小学妹11 小时前
国家区域医疗中心国产化改造实战:数据库选型、跨院区数据互通与踩坑经验
数据库·国产数据库·数据库选型·医疗信息化·信创数据库·医疗信创
TPBoreas12 小时前
MySQL性能优化面试全攻略
mysql·面试·性能优化
xlq2232212 小时前
11.表的内外连接,索引
mysql