MySQL面试题

2022-01-25 19:13:43

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 t1truncate table t1delete 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 不支持。宕机可能丢失修改。