21. 对于 InnoDB 系统表空间,它保存有哪些数据,默认的存放位置和文件名称是什么?
系统表空间保存 InnoDB 数据字典、double‑write buffer、change buffer、undo 日志(旧版本),还可以存放用户表数据。默认存放在 MySQL 的数据目录下,默认文件名ibdata1。
22. 请给出单表文件表空间和通用表空间的区别以及各自的适用场合。
单表文件表空间(per‑table):每张 InnoDB 表对应独立.ibd文件;删除表空间会释放磁盘空间;支持表空间迁移。适合大多数业务表,表数量多、需要单独迁移表、删除大表释放磁盘空间的场景。通用表空间:多个表共用同一个表空间文件;删除表不会自动释放磁盘空间;可以存放多张不同库的表。适合大量小表,合并减少文件数量,降低文件句柄消耗。
23. 对于通用表空间类型,每个表空间有且仅有一个数据文件,这个表述对不对?
正确。一个通用表空间对应一个.ibd数据文件,多张表可以存放在这同一个文件内。
24.innodb_data_file_path 和 innodb_file_per_table 这两个参数各自的作用是什么?
innodb_data_file_path:配置系统表空间 ibdata1的文件名、初始大小、自动扩展属性。innodb_file_per_table:开启后每张 InnoDB 表使用独立的单表.ibd表空间;关闭则用户表全部存进系统表空间 ibdata1。MySQL8.0 默认开启。
25. 请说明重做 (redo) 和还原 (undo) 各自在 MySQL 数据库中的作用。
- redo log(重做日志):崩溃恢复,事务提交时刷 redo,保证已经提交事务的数据不丢失;崩溃重启,把内存中没刷到磁盘的数据重新重做,保障持久性。
- undo log(回滚日志):事务回滚,执行 rollback 依靠 undo 回退数据;提供 MVCC 多版本并发控制,生成数据旧版本快照,实现读不加锁。
26. 请比较 MySQL 全局内存和会话内存的不同点。
- 全局内存:服务启动时一次性分配,所有会话共享,服务运行期间全局共用,例如 buffer pool、change buffer。
- 会话内存:每个客户端连接会话独立分配,会话建立分配,会话断开释放;每个连接互相隔离,例如 sort_buffer_size、join_buffer_size。
27. 要显示已配置的服务器选项可以有哪几种方法,分别举例说明。
show variables;SQL 命令查看系统变量;例:show variables like 'innodb%';mysqld --verbose --help命令行查看启动参数;select @@变量名;,例select @@innodb_buffer_pool_size;- 读取 my.cnf 配置文件查看静态配置。
28. 给出在 Linux 系统上的标准选项文件的名称和保存的位置。
配置文件名my.cnf读取优先级路径:/etc/my.cnf→/etc/mysql/my.cnf→~/.my.cnf(用户家目录隐藏配置文件)
29. 请说明选项文件中的 [client] 和 [server] 组的适用范围。
[client]:作用于所有客户端程序(mysql、mysqldump 等客户端工具),不影响 mysqld 服务端。[server]:作用于 MySQL 服务端程序 mysqld,只对数据库服务生效,客户端不读取该组。
30. 如果在多个配置文件中指定了一个相同的选项值,或者在同一配置文件内的多个组中指定了相同的选项值,系统如何处理?
MySQL 按照配置文件读取顺序,后读取的配置覆盖前面读取的配置;同一个文件内部,靠后的组配置覆盖前面组的相同选项,后加载配置优先级更高。
31. 请说明 --no‑defaults 命令行长选项的作用
--no-defaults启动选项,禁止读取任何 my.cnf/my.ini 配置文件,只使用命令行传入的参数启动 MySQL 程序。多用于排错,避免配置文件错误干扰服务启动。
32.MySQL 维护的变量从作用域分为 GLOBAL 和 SESSION,从功能上分为动态和持久的,你是如何理解的
- 作用域
GLOBAL:全局变量,对整个 MySQL 服务生效,新连接才会读取修改后的全局值,已经存在的会话不受影响。SESSION:会话变量,仅对当前客户端连接生效,连接断开失效。
- 功能分类
- 动态变量:服务运行时可以使用
set命令在线修改,不需要重启数据库。 - 持久变量:动态修改同时写入数据字典,MySQL8.0 支持
set persist,重启后配置依旧生效;普通动态 set global 重启失效。
33. 要查看系统变量,有哪几种常用的办法,举例说明
SHOW VARIABLES;查看全部变量;SHOW VARIABLES LIKE '%buffer%';模糊匹配SELECT @@GLOBAL.变量名; SELECT @@SESSION.变量名;,示例select @@global.max_connections;mysqld --verbose --help命令行查看启动变量- 查询
performance_schema.session_variables系统表
34. 在同一台服务器上启动多个 mysqld 实例时,必须要隔离的对象有哪些
- 端口 port(每个实例端口不能重复)
- socket 套接字文件
- pid 进程文件
- 独立的数据 data 目录
- 日志文件(binlog、error log、slowlog 等)
- 内存参数,防止内存耗尽
35.MySQL 服务器都提供了哪几种类型的日志文件?说明每种日志的用途
- 错误日志 error log:记录启动、关闭、运行报错、警告信息,故障排查。
- 二进制日志 binlog:记录 DDL/DML 修改数据 SQL;用于主从复制、数据恢复。
- 通用查询日志 general log:记录所有客户端全部接入和执行 SQL,用于审计。
- 慢查询日志 slow query log:记录执行耗时超过阈值的 SQL,SQL 性能优化。
- redo log 重做日志:InnoDB 崩溃恢复,保障事务持久性。
- undo log 回滚日志:事务回滚、MVCC 多版本。
36.MySQL 8.0 默认启用哪两种日志记录?
错误日志(error log)、二进制日志(binlog)默认开启;通用日志、慢查询日志默认关闭。
37. 请说明常规查询日志和慢速查询日志在记录的内容上有何不同
- 通用查询日志(general log):记录所有客户端执行的全部 SQL 语句,无论快慢,包含连接、断开,信息量巨大。
- 慢查询日志(slow query log):只记录执行时间超过
long_query_time阈值的 SQL,用于定位慢 SQL,不会记录全部语句。
38. 如何配置才能将慢速查询日志和常规查询日志在文件和表里同时保存?
开启log_output = 'FILE,TABLE';
- FILE:日志输出到磁盘日志文件;
- TABLE:日志写入 mysql 库下的系统表(general_log、slow_log); 设置该参数后,通用日志、慢查询日志会同时写文件 + 写数据库表。
39. 从 DBA 的角度,谈一下使用 Performance schema 的目的或作用
Performance_schema 是 MySQL 性能监控库,用于采集数据库运行时性能数据;DBA 用来定位性能瓶颈:监控 SQL 耗时、锁等待、IO 消耗、线程状态、内存占用,排查慢查询、锁冲突、资源竞争问题,做数据库性能调优。
40.Performance schema 中的顶级检测组件都有哪些?
- instruments(检测采集器:事件、函数、锁、IO 等采集点)
- consumers(消费者,控制采集数据保存)
- tables:各类事件结果表,存放采集完成的数据,包含等待事件、语句事件、阶段事件、内存事件等。