当前位置: 首页 > news >正文

Linux MySQL 多实例部署与配置实践

1 安装方式

1.1 软件源部署 - Rocky9 安装 mysql 8.0

查看mysql软件源

yum list mysql mysql-server

安装 mysql-server,会自动安装客户端包

yum install -y mysql-server

启动服务

systemctl enable --now mysqld.service

查看服务状态

systemctl status mysqld

查看端口

 默认情况下,mysql可以使用root用户登录,密码为空

查看当前数据库的版本信息

select version();

 修改 root 用户密码(为了方便实践密码设置为 root,生产上请使用强密码)

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

使用密码登录验证

1.2 软件源部署 - Ubuntu24 安装 mysql8.0

查看mysql软件源

apt list mysql-server

安装mysql

apt install -y mysql-server

查看状态

systemctl status mysql.service

查看端口

 默认情况下,mysql可以使用root用户登录,密码为空

修改 root 用户密码(为了方便实践密码设置为 root,生产上请使用强密码)

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

退出后使用密码验证登录

1.3 二进制包部署-Ubuntu24 中安装 mysql 8.4

传统的二进制包安装需要进行三步:configure --- make --- make install。而mysql的二进制包是指己经编译完成(make已经做过了),以压缩包提供下载的文件,下载到本地之后释放到自定义目录,再进行配置即可。

1.3.1 环境准备

需提前配置软件源,安装相关依赖

apt install libaio-dev numactl libnuma-dev libncurses-dev

安装libaio1包,否则数据库初始化会报错

curl -O http://launchpadlibrarian.net/646633572/libaio1_0.3.113-4_amd64.deb

dpkg -i libaio1_0.3.113-4_amd64.deb

创建mysql组和用户

groupadd -r mysql

useradd -r -g mysql -s /sbin/nologin mysql

1.3.2 获取软件

 二进制包下载地址:

https://downloads.mysql.com/archives/community/

下载链接:

https://downloads.mysql.com/archives/get/p/23/file/mysql-8.4.0-linux-glibc2.28-x86_64.tar.xz

解压到指定目录,这个目录只能写 /usr/local/

1.3.3 设定环境变量

创建环境变量并加载

echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh

source /etc/profile.d/mysql.sh

查看效果

1.3.4 创建主配置文件

mkdir -p /usr/local/mysql/etc

创建 /usr/local/mysql/etc/my.cnf,并添加配置

[mysql]
port = 3306
socket = /usr/local/mysql/data/mysql.sock[mysqld]
port = 3306
mysqlx_port = 33060
mysqlx_socket = /usr/local/mysql/data/mysqlx.sock
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /usr/local/mysql/data/mysql.sock
pid-file = /usr/local/mysql/data/mysqld.pid
log-error = /usr/local/mysql/log/error.log

1.3.5 创建数据目录

创建相关依赖目录并更改属主属组

mkdir /usr/local/mysql/data

mkdir /usr/local/mysql/log

chown -R mysql:mysql /usr/local/mysql/

chown -R mysql:mysql /usr/local/mysql*

1.3.6 密码初始化

如果使用 --initialize 选项会生成随机密码,要去 /data/mysql/mysql.log中查看

如果使用 --initialize-insecure -选项会生成空密码

本次采用使用密码初始化

cd /usr/local/mysql/

可以看到密码为:)LFg>Wc/L8iu

1.3.7 定制启动脚本

复制文件到系统目录下

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

重载配置文件

systemctl daemon-reload

启动mysqld服务

/etc/init.d/mysqld start

查看自动生成的服务管理文件

检测服务状态

查看端口连接

1.3.8 连接测试

使用之前初始化的密码登录mysql

执行sql报错,提示需要修改root密码

修改密码

alter user root@'localhost' identified by 'root';

使用新密码登录并验证

2 Mysql 多实例

2.1 基本概念

简介

多实例就是在一台服务器上运行多个 MySQL 服务端进程,每个进程监听一个端口(3306,3307,3308),维护一套属于其自己的配置和数据,客户端使用不同的端口来连接具体服端进程,从而实现对不同的实例的操作。可以用不同的 MySQL 版本实现多实例,也可以用相同的 MySQL 版本实现多实例。

优点

  • 节约硬件资源:在某些场景下(比如说测试,调研,新旧业务并存等),需要配置不同的 MySQL 数据库版本,而又没有足够多的服务器资源,则可以选择在一台服务器上用不同的版本实现多开来满足需求。

  • 便于对比:在一个完全相同的硬件环境中,运行不同的 MySQL 版本,使用相同的参数进行测试,调研时,可以最大程度的减少外部环境因素的影响,便于得出更准确的结论。

  • 便于管理:在一台服务器上运行多个实例,同理,只需要在这一台服务器上配置安全规则,就可以完成对多个实例的访问授权,而且对于数据库的备份,停启等工作,也只需要在这一台服务器上完成。

缺点

  • 资源抢占:一台服务器上运行多个服务实例,资源总量恒定,一个实例占用的资源无法被另一个实例所使用,在这种情况下,服务性能会受到影响,无法体现 MySQL 服务的实际性能。

  • 存在单点风险:一台服务器上部署多个服务实例,如果该服务器当机,则这多个服务实例都会受影响。

2.2 操作步骤

2.2.1 初始化多实例数据库

安装mariadb-server包,提供mysql相关命令

apt install -y mariadb-server

创建相关目录

mkdir -pv /mysql/{3306,3307}/{data,etc,socket,log,bin,pid}

为目录赋予用户权限

chown -R mysql:mysql /mysql/

生成两个实例的初始数据

mysql_install_db --user=mysql --datadir=/mysql/3306/data

mysql_install_db --user=mysql --datadir=/mysql/3307/data

2.2.2 3306实例数据库配置

创建配置文件 /mysql/3306/etc/my.cnf

[mysqld]
port=3306
datadir=/mysql/3306/data
socket=/mysql/3306/socket/mysql.sock
log-error=/mysql/3306/log/mysql.log
pid-file=/mysql/3306/pid/mysql.pid

创建mysql的启动脚本 /mysql/3306/bin/mysqld

PORT=3306
USER="root"
PWD="root"
CMD_PATH="/usr/bin"
BASE_DIR="/mysql"
SOCKET="${BASE_DIR}/${PORT}/socket/mysql.sock"
LOG_FILE="${BASE_DIR}/${PORT}/log/service.log"# 日志记录函数
log() {local message="$1"local timestamp=$(date +"%Y-%m-%d %H:%M:%S")echo "$timestamp - $message" >> "$LOG_FILE"
}mysql_start() {if [ ! -e "$SOCKET" ]; thenlog "Starting MySQL..."echo "Starting MySQL..."${CMD_PATH}/mysqld_safe --defaults-file=${BASE_DIR}/${PORT}/etc/my.cnf &>/dev/null &local pid=$!sleep 2if ps -p $pid > /dev/null; thenlog "MySQL started successfully."elselog "Failed to start MySQL."echo "Failed to start MySQL."fielselog "MySQL is running..."echo "MySQL is running..."exitfi
}mysql_stop() {if [ ! -e "$SOCKET" ]; thenlog "MySQL is stopped..."echo "MySQL is stopped..."exitelselog "Stopping MySQL..."echo "Stopping MySQL..."${CMD_PATH}/mysqladmin -u ${USER} -p${PWD} -S ${SOCKET} shutdownlocal result=$?if [ $result -eq 0 ]; thenlog "MySQL stopped successfully."elselog "Failed to stop MySQL."echo "Failed to stop MySQL."fifi
}mysql_restart() {log "Restarting MySQL..."echo "Restarting MySQL..."mysql_stopsleep 2mysql_start
}usage_msg() {echo "Usage: ${BASE_DIR}/${PORT}/bin/mysqld {start|stop|restart}"
}# 信号处理函数
trap 'mysql_stop; exit 1' SIGTERM SIGINTcase $1 instart)mysql_start;;stop)mysql_stop;;restart)mysql_restart;;*)usage_msg;;
esac

2.2.3 启动3306实例

加可执行权限

chmod +x /mysql/3306/bin/mysqld

启动mysql服务

/mysql/3306/bin/mysqld start

检测效果

2.2.4 3306实例服务启动脚本创建

关闭服务,并创建服务启动脚本

/mysql/3306/bin/mysqld stop

vim /etc/systemd/system/mysql3306.service

[Unit]
Description=MySQL 3306 Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/bin/mysqld_safe --defaults-file=/mysql/3306/etc/my.cnf
ExecStop=/usr/bin/mysqladmin -u root -pMagedu -S /mysql/3306/socket/mysql.sock shutdown
Restart=always
RestartSec=5[Install]
WantedBy=multi-user.target

重载配置并启动服务

systemctl daemon-reload

systemctl start mysql3306

确认效果

2.2.5 3307实例部署

参考上述3306实例步骤

复制配置文件并修改

cp -a /mysql/3306/etc/my.cnf /mysql/3307/etc/my.cnf

sed -i "s#3306#3307#g" /mysql/3307/etc/my.cnf

复制数据库启动文件

cp -a /mysql/3306/bin/mysqld /mysql/3307/bin/mysqld

sed -i "s#3306#3307#g" /mysql/3307/bin/mysqld

复制服务文件并修改

cp -a /etc/systemd/system/mysql3306.service /etc/systemd/system/mysql3307.service

sed -i "s#3306#3307#g" /etc/systemd/system/mysql3307.service

重载配置并启动服务

systemctl daemon-reload

设置开机自启

systemctl enable --now mysql3306

systemctl enable --now mysql3307

2.2.6 数据库登录

因为本地主机存在多个mysql实例,没有办法直接通过mysql命令直接连接,需要通过sock 文件来连接到数据库

mysql -S /mysql/3306/socket/mysql.sock

2.2.7 设置登录密码

密码与脚本中定制的信息相匹配

mysqladmin -S /mysql/3306/socket/mysql.sock -uroot password 'root'

或登录执行sql

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');

2.2.8 创建数据库

登录3306实例,创建数据库db3306

查看数据库文件

登录3307实例,创建数据库db3307

可以看到数据库与3306实例相互独立

查看数据库文件

文件存储位置也是相互独立

http://www.dtcms.com/a/487228.html

相关文章:

  • 从0到1:打造专业级AI教学助手的完整开发实录
  • 练习python题目小记
  • 有没有做问卷还能赚钱的网站一线视频免费观看
  • JavaWeb后端实战(登录认证 令牌技术 拦截器 过滤器)
  • 中国绿色专利数据库(1985-2024)
  • 移动端公众号网站开发专业做球赛旅游的网站
  • 请人做网站需要注意什么如何注册公司网站域名
  • Android开发——设计模式技术总结
  • 做网站要搭建本地服务器么网站建设可行性研究
  • 表3-5企业网站建设可行性分析静态网页怎么放到网上
  • 荆州网站建设荆州手工制作书签简单又好看
  • 伪静态就是把网站地址如何自己创建小程序
  • GPT-2 技术报告
  • Tiger生成式推荐
  • 宿州企业网站建设小程序服务器可以做网站吗
  • Vue组件中Prop类型定义与泛型类型安全指南
  • 企业级流程平台权责模块架构升级:技术实现与核心价值
  • vscode如何链接远程服务器里面的docker里面的目录
  • 从B站提取视频或音频、音乐,下复制链接,然后到提取网站进行提取和下载
  • 新的网站怎么推广淘宝客返利网站程序
  • 算法沉淀第三天(统计二进制中1的个数 两个整数二进制位不同个数)
  • 制造业的未来:数字孪生正在重塑一切
  • 网站联系方式模板搜索引擎提交网站
  • 目标识别笔记
  • 考研408《计算机组成原理》复习笔记,第五章(5)——CPU的【微程序控制器】
  • 做网站page庆阳东道设计
  • 从1G到5G:移动通信技术的迭代史诗与未来展望
  • 深入理解 Java 类加载与垃圾回收机制:从原理到实践
  • 手机wap网站模板 带后台台州椒江做网站
  • 苏州网站推广公司东营住建局官网