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
相关推荐
njidf2 小时前
趣味项目与综合实战
jvm·数据库·python
李昊哲小课2 小时前
PyMySQL完整教程
服务器·数据库·python·pymysql
程序员差不多先生2 小时前
小米Openvela生态成熟度如何?
linux
sqyno1sky2 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
互联网科技看点2 小时前
2025-2026年研发管理软件推荐:产品研发全流程一体化靠谱解决方案评测
服务器·数据库·人工智能
Yupureki2 小时前
《Linux系统编程》12.基础IO
linux·运维·c语言·开发语言·数据库·c++
淮北4942 小时前
bash下好用的快捷键以及linux常用指令
linux·开发语言·ubuntu·bash
瀚高PG实验室2 小时前
nginx中配置数据库连接
运维·数据库·nginx·瀚高数据库
一个天蝎座 白勺 程序猿2 小时前
Oracle替换工程实践深度解析:从迁移挑战到金仓“零改造”实践
数据库·学习·oracle·kingbasees