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
相关推荐
zhangchaoxies11 小时前
HTML怎么实现键盘操作全站导航_HTML全局快捷键说明面板【方法】
jvm·数据库·python
学Linux的语莫11 小时前
Linux环境中anaconda 的安装与环境配置
linux·运维·服务器
vegetablec11 小时前
如何用 location.reload(true) 强制浏览器从服务器刷新页面
jvm·数据库·python
2301_8148098611 小时前
如何让导航栏的下落动画效果更缓慢?
jvm·数据库·python
Elastic 中国社区官方博客11 小时前
多大才算太大?Elasticsearch 容量规划最佳实践
大数据·运维·数据库·elasticsearch·搜索引擎·全文检索
InfinteJustice11 小时前
如何加固SQL通信安全_启用SSL加密确保数据传输安全
jvm·数据库·python
切糕师学AI11 小时前
深入解析SqlSugar:.NET领域的高性能多数据库ORM框架
数据库·.net·orm
城数派11 小时前
2025年我国乡镇的平均高程数据(Excel\Shp格式)
数据库·arcgis·信息可视化·数据分析·excel
回忆2012初秋11 小时前
C# 射线算法:判断GPS点是否在车辆工作区域内
linux·算法·c#
2301_8176722611 小时前
C#怎么实现RSA非对称加密 C#如何用RSA算法进行公钥加密私钥解密和数字签名【安全】
jvm·数据库·python