1、什么是 online-ddl?各个版本的不同?
`ALTER TABLE` 时可使用 `ALGORITHM` 可以指定的几种方式:
COPY,是指 DDL 时,会生成(临时)新表,将原表数据逐行拷贝到新表中,在此期间会阻塞 DML;
INPLACE,无需拷贝全表数据到新表,但可能还是需要 IN-PLACE 方式(原地,无需生成新的临时表)重建整表。这种情况下,在 DDL 的初始准备和最后结束两个阶段时通常需要加排他 MDL 锁(metadata lock,元数据锁),除此外,DDL 期间不会阻塞 DML;
INSTANT,只需修改数据字典中的元数据,无需拷贝数据也无需重建整表,同样,也无需加排他 MDL 锁,原表数据也不受影响。整个 DDL 过程几乎是瞬间完成的,也不会阻塞 DML。这个新特性是 8.0.12 引入的,再次感谢腾讯互娱 DBA 团队的贡献;
参考 : https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html
2、pt-osc(percona-toolkit : pt-online-schema-change) 或者 gh-ost工具的使用。
1. 查看是否有从节点;
2. 查看是否有外键;
3. 创建新表;
4. 修改新表结构;
5. 创建触发器,保证拷贝过程中的数据同步;
6. 拷贝表数据;
7. rename 表;
8. 删除旧表;
9. 删除触发器;
参考: https://www.jianshu.com/p/c97228b6f60c 或者 百度。
3、drop table t1
、truncate table t1
、delete from t1
区别 ?
drop table t1:
删除所有表数据,删除整个表段(rm ibd),属于物理性质,会释放磁盘空间;
删除表定义 (rm frm,元数据也会被删除);
truncate table t1:
清空表段中的数据页。属于物理删除,会释放磁盘空间。
delete from t1:
删除数据行。逐行删除。保留表结构,属于逻辑性质删除。只是标记删除,不会立即释放磁盘空间;
delete 操作会产生碎片;
4、请你列举 MySQL 中支持的存储引擎种类。
InnoDB、MyISAM、CSV、MEMORY、BLACKHOLE、ARCHIVE;
5、InnoDB 的核心特性?InnoDB 和 MyISAM 的区别?
InnoDB 支持事务、MVCC、聚簇索引、外键、缓冲区、AHI、CR(Crash Recovery)、DW(Double Write),MyISAM 不支持这些。
- InnoDB 支持行级锁,MyISAM 仅支持表级锁。
- InnoDB 支持热备(业务正常运行,影响低),MyISAM 支持温备(锁表备份)。
- InnoDB 支持 CR(自动故障恢复),宕机自动故障恢复,保证数据安全和一致性可以的到保证,MyISAM 不支持。宕机可能丢失修改。