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地址)
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访问的工作过程
第一步:客户端向服务器发起连接请求
第二步:服务器接收到客户端连接请求响应
第三步:根据表使用的存储引擎,对表中的数据做对应的处理
第四步:断开连接
什么是搜索引擎
当对表里的数据做
存储引擎管理
查看存储引擎
- 查看数据库服务器支持的存储引擎和默认使用的存储引擎
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是回滚所有操作
想把数据回滚到指定位置,必须定义保存点
隔离级别
脏读:看到了对方没有提交的数据 缺点:用户查到的数据 最终不一定会存储在数据库里 因为没有提交的事务 是可以回滚的。