1、存储引擎的分类
InnoDB:
MyISAM:
MEMORY:
BACKHOLE:
MERGE:
ARCHIVE:
ToKUBE:
XtraDB:
2、存储引擎功能了解
数据读写
数据安全和一致性
提高性能
自动故障恢复
高可用方面支持
MyISAM: 拥有较高的插入,查询速度,但不支持事务。
InnoDB: 支持事务、行级锁、故障自动恢复、MVCC、热备份、支持外键,GTID
Memory: 所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。
Merge:将一定数量的myisam 表联合成一个整体,在超大规模数据存储时很有用
Archive:非常适合存储大量的独立,作为历史记录的数据。对查询支持较差
Federated:讲不同mysql服务器联合起来,逻辑上组成一个完整数据库,适用于分布式。
TokuDB
RocksDB
MyROCKS
以上三种存储引擎共同点:压缩比较高,数据插入性能极高 现在很多的New SQL 使用比较多的功能特性。
ZABBIX: 扩展
TokuDB的INSERT 数据比INNODB 快的多,数据压缩比要nnodb高。
简历案例(存储引擎替换)
环境:zabbix 3.2 maridb 5.6 centos7.3
现象: zabbix卡的要死,每隔3-4个月,都要重新搭建一遍zabbix
问题:
1、zabbix
2、数据库版本
3、zabbix 数据库500G存在一个文件里
优化建议:
1、版本升级到5.7
2、存储引擎改为TOKUDB
3、监控数据按月份进行切割(需要二次开发zabbix)
4、关闭binlog
5、参数调整(关闭binlog 和双一)
优化结构:
监控状态良好
为什么?
1、原生态支持tokuDB,另外经测试环境5.7 要比5.5 版本性能高2-3倍
2、Tokudb insert 数据比innodb快的多,数据压缩比innodb高
3、
总结:
TokuDB优点
1,online ddl 非常给力,特别是对字段的修改非常快
2,压缩比非常高通常都能达到7,8倍的压缩比
3,完全支持ACID事物的四大特性
TokuDB缺点
1,响应时间相对较长
2,online ddl 对text,blob等类型的字段不适用
3,没有合适的备份工具,只能通过mysqldump进行逻辑备份
建议适用场景:
1,访问频率不高的数据或历史数据归档
2,表非常大并且时不时还需要进行ddl操作
项目经验分享:
Innodb 替换Myisam 存储引擎的替换
环境:centos 5.8 Mysql 版本:5.0 版本 MyIsam 存储引擎,网站业务(LNMP)
现象问题: 业务压力大的时候,非常卡,宕机时会有部分数据丢失。
问题分析:
1、业务压力大时,非常卡。可能是因为表锁引起的,会有很高的表锁等待;
2、数据库部分数据丢失,myisam引擎不支持事务。可能会有内存数据丢失
职责:
1、监控锁的情况,确实有很多的表锁等待
2、存储引擎默认是Myisam
解决方案:
1、升级版本到mysql5.5
2、更该myisam 到innodb
3、开启双1 安全参数
注意:现在生产环境还有这样的环境。
修改一个表的存储引擎:
alter table t1 engine innodb;
如何批量修改存储引擎:
select concat('alter table zabbix', table_name, "engine tokudb;") from
information_schema.tables where table_schema='zabbix' into outfile ‘/tmp/tokudb.sql';
平常处理过的MySQL问题-----碎片整理
环境: centos7.4 mysql 5.7.20 Innodb 存储引擎
业务特点: 数据量较大,经常需要按月删除历史数据
问题: 磁盘空间占用很大、不释放
处理方法:
以前:将数据逻辑导出,手工drop 表,然后导入进去
现在:
对表进行按月进行分表(partition,中间件)
业务替换为truncate方式
InnoDB存储引擎物理存储结构
ibdata1: 系统数据字典信息(统计信息)、undo 表空间 (初始12 并以64M大小自动增长)
ib_logfile0 ~ ib_logfile1 : redo 日志文件,事务日志文件
ibtmp1: 临时表空间磁盘位置,存储临时表
frm: 存储表的列信息
idb: 表的数据和索引
mysql5.5 版本出现的管理模式,也是默认的管理模式
mysql5.6 共享表空间保留,只用来存储统计信息、undo表空间。出现了单独的表空间。
mysql5.7 临时表空间被独立出来
mysql8.0: undo 表空间也被独立出来
Redo Log: ib_logfile0 ib_logfile1
Undo log: ibdata1 ibdate2
临时表: ibtmp1 在做join union 操作产生临时数据,用完就自动删除