MySQL运维实战(4.1) MySQL表存储引擎

俊达1年前技术文章303

MySQL表的特点

和其他数据库如Oracle、SQL Server相比,mysql有一些特点:

  • MySQL使用插件式存储引擎,同一个数据库中的表可以使用不同的存储引擎。存储引擎决定了表的物理存储格式。表可以在不同的存储引擎之间转换。

  • 参数sql_mode。sql_mode会影响sql的执行。同一个sql,在不同的sql_mode下可能会有差异。


表的存储引擎

MySQL支持插件存储引擎。系统默认支持多种存储引擎。同时提供了接口,支持第三方开发存储引擎,以满足特定的数据存储需求。

oracle mysql官方存储引擎

使用show storage engines命令或查询information_schema.engines表查看当前实例支持的存储引擎。

mysql> select engine, support, transactions, xa, savepoints from information_schema.engines;
+--------------------+---------+--------------+------+------------+
| engine             | support | transactions | xa   | savepoints |
+--------------------+---------+--------------+------+------------+
| InnoDB             | DEFAULT | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | NO           | NO   | NO         |
| MEMORY             | YES     | NO           | NO   | NO         |
| BLACKHOLE          | YES     | NO           | NO   | NO         |
| MyISAM             | YES     | NO           | NO   | NO         |
| CSV                | YES     | NO           | NO   | NO         |
| ARCHIVE            | YES     | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | NO           | NO   | NO         |
| FEDERATED          | NO      | NULL         | NULL | NULL       |

各存储引擎特点


存储引擎

特点

InnoDB

  • 支持事物。

  • 支持MVCC多版本。并发读写性能高。

MyISAM

早期版本的默认存储引擎。

  • 不支持事物。

  • mysql实例或所在主机异常crash的情况下,可能会有数据丢失

  • 表容易crash,需要修复。大表修复耗时可能会很长。

  • mysql的一些系统表是myisam存储引擎

  • 索引数据在mysql内部缓存,受参数key_buffer_size控制

  • 数据由OS文件系统的Page Cache缓存。

MRG_MYISAM

本身不存储数据,可以将多个MyISAM表模拟成一个单独的表使用。

方便历史数据清理归档。

Memory

  • 数据存储在内存中,实例重启会清空数据。

  • mysql一些内部表使用了memory引擎。

  • 业务上要避免使用memor存储引擎。

  • 在主备复制架构下,主库或备库重启,容易引起主备复制中断。

  • 每个表可存储的数据受参数max_heap_table_size控制

CSV

  • csv文件格式。

  • 外部csv文件可以通过csv表挂到mysql中,用于数据分析。

  • 不支持索引。

  • mysql slow log可以以csv格式存储,便于数据采集和分析。

Blackhole

不存储数据。

Archive

归档存储。不支持索引。

PERFORMANCE_SCHEMA

mysql系统内部表。

Federated

本身不存储数据。从其他数据库实例获取数据。类似oracle的db link。



绝大部分情况下,建议业务统一使用InnoDB存储引擎。mysql 5.7开始默认存储引擎就是innodb。

第三方存储引擎

社区的一些存储引擎:

TokuDB,数据压缩比高。

LevelDB存储引擎,基于LSM Tree(log structured merge tree)的存储引擎。

MyRocks,RocksDB存储引擎,基于LSM Tree(log structured merge tree)。


相关文章

MySQL运维实战(7.1) 开启GTID复制

MySQL从5.6版本开始支持GTID复制。开启GTID之后,主库上执行的每一个事务都有一个全局唯一的ID。GTID由两部分组成:server_uuid和事务序列号。初始化数据库时,会生成一个全局唯一...

MySQL运维实战(5.2) MySQL charset基本概念

mysql多字符集mysql支持多字符集。一个数据库中可以存储不同字符集的数据,一个表的不同字段可以使用不同的字符集。mysql> show character s...

MySQL运维实战(5.5) 数据导入导出时的字符集问题

mysql可以使用load data/select into outfile或mysqldump工具进行数据导入导出。下面分别分析数据导入导出时的字符集相关问题。准备测试数据创建测试表,2个字段分别使...

MySQL优化器特性(七)成本估算常数

成本估算常数表示执行一些MySQL基础操作时的成本,如读取一个页面,创建一个临时表,比较一条记录,解析一行记录等操作。mysql.engine_cost和mysql.server_cost表分别记录存...

MySQL运维实战之ProxySQL(9.4)proxysql和后端MySQL自动切换

MySQL运维实战之ProxySQL(9.4)proxysql和后端MySQL自动切换

如上图架构,当后端MySQL主库出现问题,发生主备切换后,如何自动将ProxySQL的读写切换到新的主库上?可以通过mysql_replication_hostgroups表配置实现:insert&n...

MySQL运维实战之备份和恢复(8.2)xtrabackup备份到云端(OSS)

xtrabackup工具中有一个xbcloud程序,可以将数据库直接备份到S3对象存储中,本地不落盘。这里介绍将数据库直接备份到OSS的一种方法。具体方法如下:1、准备OSS我们使用ossutil工具...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。