11 – PXC集群|MySQL存储引擎

PXC集群|MySQL存储引擎

  • 数据库系列文章
  • PXC集群
    • 配置集群
    • 测试集群
  • MySQL存储引擎
    • 存储引擎介绍
      • mysql服务体系结构
      • mysql服务的工作过程
        • 处理查询访问的工作过程
        • 处理存储insert访问的工作过程
      • 什么是搜索引擎
    • 存储引擎管理
      • 查看存储引擎
      • 修改存储引擎
    • 存储引擎特点
      • myisam存储引擎特点
      • innodb存储引擎特点
    • 事务
      • 事务的特性(ACID 表的存储引擎必须是innodb 才有事务)
    • 事务回滚
    • 隔离级别

数据库系列文章

1 - 数据库服务概述 | 构建MySQL服务 | 数据库基本管理 | MySQL基本类型
2 - 表结构 | MySQL键值
3 - 字段约束|MySQL索引|MySQL用户管理
4 - 基础查询进阶|连接查询
5 - 视图|存储过程
6 - 数据备份与恢复|innobackupex
7 - MySQL主从同步|主从同步模式
8 - MySQL数据读写分离|MySQL多实例
9 - 数据分片概述|部署MyCat服务
10 - MHA集群概述|部署MHA集群
11 - PXC集群|MySQL存储引擎

PXC集群

用来实现mysql服务高可用集群的软件 (MHA配置比较复杂 必须要有vip地址)
是基于Galera的mysql高可用集群解决方案

在这里插入图片描述
在这里插入图片描述
SST全量同步 完全备份文件

在这里插入图片描述

配置集群

在这里插入图片描述
在这里插入图片描述

  • 修改配置文件
# 指定集群中的server-id
vim /etc/percona-xtradb-cluster.conf.d/mysqld.cnf

编号不能一样
在这里插入图片描述

  • 指定集群信息 三台机器都要修改
    在这里插入图片描述
# 修改71主机的wsrep.cnf 文件
vim /etc/percona-xtradb-cluster.conf.d/wsrep.cnf
# 修改72主机的wsrep.cnf 文件
# 修改73主机的wsrep.cnf 文件

在这里插入图片描述
任意一台服务器上执行初始化集群操作(仅需要执行一遍)统一在71主机操作
在这里插入图片描述

  • 在其他2台服务器上执行
    启动数据库服务
    会自动同步71主机的授权用户及管理员root密码
systemctl start mysql # 启动数据库服务

服务端口

netstart -utnlp |grep :3306
netstart -utnlp | grep :4567

测试集群

第一步 连接集群中的任意主机存取数据

第二步 集群中只要有一台数据库服务器是正常工作的就能提供存取功能
停止任意2台数据库服务,都可以访问剩下的一台数据库服务器存取数据

systemctl stop  [email protected]

在这里插入图片描述
在这里插入图片描述

第三步 宕机的服务器启动后会自动加入集群并同步宕机期间的数据
在这里插入图片描述
在这里插入图片描述

MySQL存储引擎

存储引擎介绍

mysql服务体系结构

在这里插入图片描述

共有8个功能模块
1.连接池 验证客户端连接时使用的用户名和密码是否正确 同时验证数据库服务器是否有mysqld进程相应的连接
2.SQL接口 把用户执行的sql命令传递给本地的mysqld进程
3.分析器 检查sql命令的语句及对数据的访问权限
4.优化器 对要执行的sql命令做优化(是内存自动功能程序)
5.查询缓存(默认没有开启)使用操作系统的内存空间查询查找过的数据 划分出一定的物理内存空间给Mysql服务存储查找过的数据
6.存储引擎 软件自带的功能程序 没种存储引擎都有各自的功能和数据存储方式 当客户端访问的数据在数据库服务器的硬盘的时候,存储引擎就会对数据做处理 说白就是 数据库服务 给用户提供的功能分类(比如 在表创建外建就必须使用innodb存储引擎)对表里的数据做查询(select)或写(insert/update/delete)会调用存储引擎对表中的数据做处理,至于如何处理取决于表使用的存储引擎的功能
7.文件系统 指定就是存储设置(通常就是服务器的硬盘)
8.管理工具 安装软件后 提供的管理命令

mysql服务的工作过程

处理查询访问的工作过程

第一步:客户端向服务器发起连接请求
第二步:服务器接收到客户端连接请求并响应
第三步:如果客户端执行的select访问,先在查询缓存里提取数据回复给客户端,如果数据库服务器在查询缓存里没有找到用户访问的数据,这时就要到数据库服务器的表里查找数据,对数据库目录下的表做访问就会调用表使用的存储引擎对表做处理 然后把查找的数据先存放到查询缓存,在回复给客户端
第四步:断开连接


在数据库查看与缓存相关的配置项 默认就没有启用查询缓存
在这里插入图片描述


处理存储insert访问的工作过程

第一步:客户端向服务器发起连接请求
第二步:服务器接收到客户端连接请求响应
第三步:根据表使用的存储引擎,对表中的数据做对应的处理
第四步:断开连接

什么是搜索引擎

当对表里的数据做selectinsert访问时,会根据表使用的存储引擎对数据做处理。
在这里插入图片描述

存储引擎管理

查看存储引擎

  • 查看数据库服务器支持的存储引擎和默认使用的存储引擎
mysql> show engines;

在这里插入图片描述
在这里插入图片描述

  • 查看当前已有表使用的存储引擎

修改存储引擎

  • 修改数据库服务默认使用的存储引擎 建表时不指定存储引擎 用默认的存储引擎
vim /etc/my.cnf

在这里插入图片描述
在这里插入图片描述

  • 建表时指定表使用的存储引擎
mysql> create table db10.b(name char(10)) engine = innodb;
mysql> create table db10.b(name char(10)) engine = memory;

在这里插入图片描述

说明:innodb存储的表 每个表对应2个表文件

  • 修改表使用的存储引擎(在表没有存储数据之前修改
    存储引擎修改了,存储数据的位置也会改变
mysql > alter table db10.c engine=myisam;

在这里插入图片描述

存储引擎特点

myisam存储引擎特点

支持表级锁,不支持事务、事务回滚、外键
每个表对应3个表文件
表名.frm 表头信息 mysql> desc 库.表
表名.MYI 表的索引信息 mysql > show index from 库.表
表名.MYD 存储表里的数据。mysql > select * from 库.表

innodb存储引擎特点

支持行级锁 支持事务、事务回滚、外键
每个表对应2个表文件
表名.frm 存储表头信息
表名.ibd 存储表的索引信息+表的数据信息。mysql > show index from 库.表 + mysql > select * from 库.表

说明:给表加锁,为了解决并发访问的冲突问题
锁粒度 : 给表加锁的范围
行级锁:仅仅对被访问的行分别加锁 没有被访问的行不加锁、
表级锁:不管访问的1行还是更多行 都会把整张表加锁
锁类型: 根据对数据的访问类型加锁。
读锁 :对数据做查询访问 又称为共享锁 加了读锁的表 允许多个访问同时查询一张表
写锁:又称为排它锁 或 互斥锁 对数据做写访问(写访问通常insert update delete) 加了写锁 只允许一个连接做写操作,后续的读和写都得等待 等待当前的写锁的释放后 才允许后续的查和写
在这里插入图片描述

事务

指的是一组不可分割的SQL操作
使用Innodb存储引擎的表才支持事务
事务处理可以用来维护数据的完整性,保证成批的SQL
语句要么全部执行,要么全部不执行
事务用来管理对数据的insert ,update,delete操作

事务的特性(ACID 表的存储引擎必须是innodb 才有事务)

Atomic:原子性 一个事务中的所有操作,要么全部完成,要么全部不完成
Consistency:一致性 在事务开始之前和事务结束以后,数据库的完整性不会被破坏 执行SQL命令时 敲回车前 成为事务开始之前 敲回车后 成为事务结束以后。
Isolation:隔离性 数据库允许多个并发事务同时对其数据进行读写和修改而互不影响 mysql服务是支持多并发的连接,同一时刻可以同时接收多个客户端的访问 如果访问的是innodb存储引擎的表,彼此不知道操作的是同一张表
Durability:持久性 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失 执行回车后,事务就结束了,数据会永久有效

事务回滚

首先得关闭事务的自动提交
在这里插入图片描述

在这里插入图片描述
回滚数据时 回滚到指定位置,默认rollback是回滚所有操作
想把数据回滚到指定位置,必须定义保存点
在这里插入图片描述
在这里插入图片描述

隔离级别

脏读:看到了对方没有提交的数据 缺点:用户查到的数据 最终不一定会存储在数据库里 因为没有提交的事务 是可以回滚的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述