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
相关推荐
Data_Journal7 小时前
用于网页抓取的 Node-unblocker
大数据·开发语言·数据库·python·scrapy
涤生大数据7 小时前
一次“没有运行日志”的DolphinScheduler任务失败排查
大数据·数据库·人工智能·状态模式
专注API从业者7 小时前
告别人工盯品!借助 Open Claw 搭建电商商品自动化监控与数据分析系统(完整可运行源码)
大数据·运维·数据库·数据分析·自动化
viskaz7 小时前
数据库迁移流程学习
数据库
auspicious航8 小时前
PostgreSQL写入慢全攻略:原因排查与性能调优实战
数据库·postgresql
IvorySQL8 小时前
PostgreSQL 日报|逻辑复制行过滤致数据丢失(8 月 21 日)
数据库·postgresql
重生之我是Java开发战士9 小时前
【Java EE】事务与事务的传播机制
数据库·java-ee
润乾软件9 小时前
Trae+SQLazy 编写复杂 SQL 实践
数据库·sql
M78佐菲9 小时前
c语言学习笔记:排序与查找方法整理
linux·c语言·笔记·学习·算法
会编程的吕洞宾9 小时前
Redis大Key拖垮线上?排查定位与治理实战
数据库·redis·bootstrap