存储引擎
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