show engines;

建表时指定InnoDB作为存储引擎,要指定主键,主键也是索引,InnoDB存储引擎按主键建立B+树索引

使用memory引擎时,数据存放在服务端的内存中,重启服务端数据就丢失了

表的引擎是innodb,创建表时,会创建两个文件,frm文件存表结构,ibd文件存数据和索引

SELECT @@default_storage_engine;

第三方的存储引擎:

RocksDB MyRocks TokuDB

压缩比 较高,数据的插入性能高.其他功能和InnoDB差不多.

修改表的存储引擎

alter table t111 engine=innodb;

整理碎片

alter table t111 engine=innodb;

查看非系统库的所有表的存储引擎

select table_schema,table_name ,engine from information_schema.tables where table_schema not in ('sys','mysql','information_schema','performance_schema');

8.3 批量替换zabbix库中 100多张表的存储引擎 由 innodb改为tokudb

select concat("alter table ",table_schema,".",table_name," engine=tokudb;") from information_schema.tables

where table_schema='zabbix';

8.InnoDB核心参数的介绍

设置默认的存储引擎

set default_storage_engine=Innodb;

表空间Tablespace模式(独立或共享表空间)

共享表空间是5.5版本出现的管理模式,也是默认的管理模式。需要将所有数据存储到同一个表空间中 ,管理比较混乱
5.6中转换为了独立表空间,共享表空间保留,只用来存储:数据字典信息,undo,临时表。
5.7 版本,临时表被独立出来了
8.0版本,undo也被独立出去了

共享表空间

对应的文件是ibdata1~N,文件个数和大小

ibdata1:系统数据字典信息(统计信息),UNDO表空间等数据

共享表空间设置(在搭建MySQL时,初始化数据之前设置到参数文件中)
[(none)]>select @@innodb_data_file_path;
[(none)]>show variables like '%extend%';
innodb_data_file_path=ibdata1:512M:ibdata2:512M:autoextend
innodb_autoextend_increment=64

存储引擎日志文件

ib_logfile0 ~ ib_logfile1: REDO日志文件,事务日志文件。

临时表

ibtmp1: 临时表空间磁盘位置,存储临时表,在做join union操作产生临时数据,用完就自动清理

独立表空间

存储特点为:一个表一个ibd文件,存储数据行和索引信息

一张InnoDB表= frm+idb+ibdata1

frm:存储表的列信息

ibd:表的数据行和索引

innodb_file_per_table=1 #1表示为独立表空间

mysql> select @@innodb_file_per_table;
+-------------------------+
| @@innodb_file_per_table |
+-------------------------+
| 1 |
+-------------------------+

独立表空间迁移

(1)在目标库创建和原表结构一样的空表

(2)将空表的ibd文件删除,然后执行以下语句

alter table city(空表名) discard tablespace;

(3)将原表的ibd文件拷贝到目标库,并且修改权限,将原表重命名为空表名

(4)将原表ibd文件导入

alter table city import tablespace