存储引擎
第1章 简介
1 | 相当于Linux文件系统,只不过比文件系统强大 |
第2章 存储引擎种类
1 | mysql> show engines; |
2.1 InnoDB,MyISAM引擎的区别
1 | 支持事务(transaction) |
2.2 简历案例—zabbix监控系统架构整改
1 | 环境: zabbix 3.2 mariaDB 5.5 centos 7.3 |
2.3 InnoDB个MyISAM存储引擎的替换
1 | 环境: centos 5.8 ,MySQL 5.0版本,MyISAM存储引擎,网站业务(LNMP),数据量50G左右 |
第3章 InnoDB存储引擎介绍
1 | 在MySQL5.5版本之后,默认的存储引擎,提供高可靠性和高性能。 |
第4章 存储引擎查看
4.1 使用 SELECT 确认会话存储引擎
1 | SELECT @@default_storage_engine; |
4.2 SHOW 确认每个表的存储引擎
1 | SHOW CREATE TABLE City\G; |
4.3 INFORMATION_SCHEMA 确认每个表的存储引擎
1 | [world]>select table_schema,table_name ,engine from information_schema.tables where table_schema not in ('sys','mysql','information_schema','performance_schema'); |
4.4 修改一个表的存储引擎
1 | db01 [oldboy]>alter table t1 engine innodb; |
4.5 平常处理过的MySQL问题–碎片处理
1 | 环境:centos7.4,MySQL 5.7.20,InnoDB存储引擎 |
4.6 扩展:如何批量修改
1 | 需求:将zabbix库中的所有表,innodb替换为tokudb |
第5章 InnoDB存储引擎物理存储结构
5.1 最直观的存储方式(/data/mysql/data)
1 | ibdata1:系统数据字典信息(统计信息),UNDO表空间等数据 |
5.2 表空间(Tablespace)
5.2.1 共享表空间
1 | 需要将所有数据存储到同一个表空间中 ,管理比较混乱 |
具体变化参考官方文档:
https://dev.mysql.com/doc/refman/5.6/en/innodb-architecture.html
https://dev.mysql.com/doc/refman/5.7/en/innodb-architecture.html
https://dev.mysql.com/doc/refman/5.8/en/innodb-architecture.html
5.2.2 共享表空间设置
1 | 共享表空间设置(在搭建MySQL时,初始化数据之前设置到参数文件中) |
5.2.3 独立表空间
1 | 从5.6,默认表空间不再使用共享表空间,替换为独立表空间。 |
5.2.4 独立表空间设置问题
1 | db01 [(none)]>select @@innodb_file_per_table; |
第6章 故障案例
6.1 案例一
6.1.1 案例背景:
1 | 硬件及软件环境: |
6.1.2 故障描述:
1 | 故障: |
6.1.3 解决办法
1 | 表空间迁移: |
6.1.4 解决思路
1 | confulence库中一共有107张表。 |
6.2 案例二
6.2.1 案例背景
1 | #真实的存储引擎优化项目 |
6.2.2 问题分析
1 | 1. zabbix版本较低 |
6.2.3 改造建议
1 | 改造建议: |
6.3 MySQL问题–碎片处理
1 | 环境:centos7.4,MySQL 5.7.20,InnoDB存储引擎 |
第7章 InnoDB核心特性-事务
7.1 事务功能介绍
1 | 将多条变更语句,放在一个组(事务)中同时语句,要么全成功,要么全失败. |
7.2 事务的核心特性ACID介绍
1 | Atomic(原子性) |
第8章 事务的生命周期(事务控制语句)
8.1 事务的开始
1 | begin |
8.2 事务的结束
1 | commit:提交事务 |
8.3 自动提交策略(autocommit)
1 | db01 [(none)]>select @@autocommit; |
8.4 隐式提交语句
1 | 用于隐式提交的 SQL 语句: |
8.5 开始事务流程
1 | 1、检查autocommit是否为关闭状态 |
第9章 InnoDB 事务的ACID如何保证
9.1 相关概念
1 | redo log ---> 重做日志 ib_logfile0~1 50M , 轮询使用 |
9.2 redo log
1 | (1)Redo是什么? |
9.3 undo 回滚日志
1 | #(1)undo是什么? |
第10章 InnoDB存储引擎核心特性-参数补充
10.1 存储引擎相关
10.1.1 查看
1 | show engines; |
10.1.2 如何指定和修改存储引擎
1 | (1) 通过参数设置默认引擎 |
10.2 表空间
10.2.1 共享表空间
1 | innodb_data_file_path |
10.2.2 独立表空间
1 | show variables like 'innodb_file_per_table'; |
10.3 缓冲区池
10.3.1 查询
1 | select @@innodb_buffer_pool_size; |
10.4 innodb_flush_log_at_trx_commit (双一标准之一)
10.4.1 作用
1 | 主要控制了innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,取值分别为0、1、2三个。 |
10.4.2 查询
1 | select @@innodb_flush_log_at_trx_commit; |
10.4.3 参数说明:
1 | 1,每次事物的提交都会引起日志文件写入、flush磁盘的操作,确保了事务的ACID;flush 到操作系统的文件系统缓存 fsync到物理磁盘. |
10.5. Innodb_flush_method=(O_DIRECT, fdatasync)
[https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_flush_method]
1 | 0 : 每秒刷os cache,同时flushed到磁盘 |
10.5.1 作用
1 | 控制的是,log buffer 和data buffer,刷写磁盘的时候是否经过文件系统缓存 |
10.5.2 查看
1 | show variables like '%innodb_flush%'; |
10.5.3 参数值说明
1 | O_DIRECT :数据缓冲区写磁盘,不走OS buffer |
10.5.4 使用建议
1 | 最高安全模式 |
10.5.5 redo日志有关的参数
1 | innodb_log_buffer_size=16777216 |
第11章 扩展
1 | RR模式(对索引进行删除时): |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WF's Blog!
评论