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

【赵渝强老师】MySQL数据库的多实例环境

在这里插入图片描述

数据库是用来存储数据的,数据库实例是用来操作数据的。从操作系统的角度看,数据库实例表现为一个进程,对应多个线程。在非集群数据库架构中,数据库与数据库实例存在一一对应关系,在数据库集群中,可能存在多个数据库实例操作一个数据库情况,即多对一关系。MySQL允许在同一个宿主机上运行多个MySQL数据库服务,这就是MySQL的多实例环境

一、 什么是多实例?

多实例就是一台服务器上开启多个不同的服务端口(默认3306),运行多个MySQL的服务进程,这此服务进程通过不同的socket监听不同的服务端口来提供各在的服务。所有实例之间共同使用一套MYSQL的安装程序,但各自使用不同的配置文件、启动程序、数据文件,在逻辑上是相对独立的。多实例主要作用是:充分利用现有的服务器硬件资源,为不同的服务提供数据服务,但是如果某个实例并发比较高的,同样是会影响到其它实例的性能。

视频讲解如下

【赵渝强老师】MySQL的多实例环境

二、 【实战】通过官方工具“mysqld_multi”来运行MySQL多实例

这里将分别在3307、3308和3309的端口上各运行一个MySQL实例。
(1)创建各实例数据存放的目录,并授权给mysql用户

mkdir -p /opt/multi/data/{3307,3308,3309}
chown -R mysql.mysql /opt/multi/data/

(2)查看目录结构

tree /opt/multi/data/# 输出的信息如下:
/opt/multi/data/
├── 3307
├── 3308
└── 3309

(3)初始化3307实例

mysqld --initialize --user=mysql \
--datadir=/opt/multi/data/3307 --basedir=/usr/local/mysql

(4)查看初始化的输出日志。

cat /usr/local/mysql/data/error.log# 输出的信息如下:
......
[Server] /usr/local/mysql-8.0.20-linux-glibc2.12-x86_64/bin/
mysqld (mysqld 8.0.20) initializing of server in progress as process 44056
[Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but 
will be an alias for UTF8MB4 in a future release. 
Please consider using UTF8MB4 in order to be unambiguous.
[InnoDB] InnoDB initialization has started.
[InnoDB] InnoDB initialization has ended.
[Server] A temporary password is generated for root@localhost: )ceJ8dwhUUyp

(5)按照同样方式初始化3308实例和3309实例。

mysqld --initialize --user=mysql \
--datadir=/opt/multi/data/3308 --basedir=/usr/local/mysqlmysqld --initialize --user=mysql \
--datadir=/opt/multi/data/3309 --basedir=/usr/local/mysql

(6)修改MySQL的配置文件“/etc/my.cnf”,增加下面的内容:

[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
mysqladmin=/usr/local/mysql/bin/mysqladmin[mysqld3307]
datadir=/opt/multi/data/3307
socket=/opt/multi/data/3307/mysql_3307.sock
basedir=/usr/local/mysql
port=3307
pid-file=/opt/multi/data/3307/mysql_3307.pid
character-set-server=utf8
log-error=/opt/multi/data/3307/mysql_3307.log[mysqld3308]
datadir=/opt/multi/data/3308
socket=/opt/multi/data/3308/mysql_3308.sock
basedir=/usr/local/mysql
port=3308
pid-file=/opt/multi/data/3308/mysql_3308.pid
character-set-server=utf8
log-error=/opt/multi/data/3308/mysql_3308.log[mysqld3309]
datadir=/opt/multi/data/3309
socket=/opt/multi/data/3309/mysql_3309.sock
basedir=/usr/local/mysql
port=3309
pid-file=/opt/multi/data/3309/mysql_3309.pid
character-set-server=utf8
log-error=/opt/multi/data/3309/mysql_3309.log

(7)启动MySQL的各个实例。

mysqld_multi start 3307
mysqld_multi start 3308
mysqld_multi start 3309

(8)查看各个实例监听的端口

ss -antlp | grep mysqld# 输出的信息如下:
LISTEN  0   128   :::3307    :::*   users:(("mysqld",pid=44633,fd=30))
LISTEN  0   128   :::3308    :::*   users:(("mysqld",pid=44968,fd=30))
LISTEN  0   128   :::3309    :::*   users:(("mysqld",pid=45303,fd=30))
LISTEN  0   70    :::33060   :::*   users:(("mysqld",pid=42578,fd=30))
LISTEN  0   128   :::3306    :::*   users:(("mysqld",pid=42578,fd=32))

(9)登录3307的MySQL实例。

mysql -uroot -p')ceJ8dwhUUyp' -S /opt/multi/data/3307/mysql_3307.sock# 提示:MySQL root用户的初始密码已经在第4步中得到。

(10)修改MySQL 3307实例的root用户密码。

mysql> alter user user() identified by "Welcome_1";

(11)重复第9步和第10步分别登录3308和3309端口上的MySQL实例,并修改root用户的密码。

《MySQL数据库从零开始》

(12)查看MySQL每个实例的状态。

mysqld_multi report 3307# 输出的信息如下:
Reporting MySQL servers
MySQL server from group: mysqld3307 is running
http://www.xdnf.cn/news/1379287.html

相关文章:

  • Redis 连接数爆炸:连接池配置错误踩坑记录
  • Electron 简介:Node.js 桌面开发的起点
  • 华为云OBS+HMS+EMRonEC2+HiveSparkFlink+GaussDB
  • QT 概述(背景介绍、搭建开发环境、Qt Creator、程序、项目文件解析、编程注意事项)
  • 隐语Kuscia正式发布 1.0.0 版本,实现支持 Hive 数据源,支持 envoy 日志进行异常分析等功能
  • 银河麒麟桌面操作系统:为什么不让root直接登录图形界面?以及如何安全地解决这个问题
  • vue的动态组件keep-alive实现组件缓存和状态保留
  • Go语言数组完全指南
  • 部署 Go 项目的 N 种方法
  • MyBatis题
  • 前端开发中的CSS变量管理:实现缓存与响应式更新
  • PostgreSQL15——常用函数
  • 农行广西区分行携手广西专精特新商会共探金融赋能专精特新企业新路径
  • Milvus 向量数据库开发实战指南
  • 基于Vue2+elementUi实现树形 横向 合并 table不规则表格
  • 现代前端状态管理:从原理到实战(Vue/React全栈方案)
  • 笔记本电脑蓝牙搜索不到设备-已解决
  • 算法之排序
  • 媒体查询案例之修改背景颜色
  • 从枯燥C++到趣味音乐:我的Windows系统底层探索之旅
  • TypeScript:never类型
  • C++ RAII 浅谈
  • 从Cgroups精准调控到LXC容器全流程操作​:用pidstat/stress测试Cgroups限流,手把手玩转Ubuntu LXC容器全流程​
  • 冒泡排序算法详解(python code)
  • Two Knights (数学)
  • 大模型微调示例三之Llama-Factory_Lora
  • 【C++详解】用哈希表封装实现myunordered_map和 myunordered_set
  • Kubernetes一Prometheus概述
  • [linux仓库]透视文件IO:从C库函数的‘表象’到系统调用的‘本质’
  • [调试][实现][原理]用Golang实现建议断点调试器