MySQL 8.0 OCP 英文题库解析(十二)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。

从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。

本期公布试题101~110

试题101:

language 复制代码
Choose two.The data in this instance is transient; no backup or replication will be required. It is 
currently under performing. .●The database size is static and including indexes is 19G.●Total system 
memory is 32G.After profiling the system, you highlight these MySQL status and global 
variables:Com_rollback 85408355 Com_commit 1242324 Innodb_buffer_pool_pages_free 163840 
mysqldbuffer_pool_size=20G innodb_flush_log_at_trx_commit=2 disable-log-binThe OS metrics 
indicate that disk is a bottleneck. Other variables retain their default values.Which two changes will 
provide the most benefit to the instance? 
D)innodb_doublewrite=0 [正确] 
A)sync_binlog=0 [错误] 
F)innodb_log_file_size=1G [正确] 
E)max_connections=10000 [错误] 
C)innodb_flush_log_at_trx_commit=1 [错误] 
B)buffer_pool_size=24G [错误]

解析

language 复制代码
该实例中的数据是临时性的,不需要备份或复制。目前性能表现不佳。
    数据库大小(含索引)固定为19GB
    系统总内存为32GB

分析系统后,发现以下MySQL状态和全局变量:
Com_rollback 85408355 
Com_commit 1242324 
Innodb_buffer_pool_pages_free 163840 
mysqldbuffer_pool_size=20G 
innodb_flush_log_at_trx_commit=2 
disable-log-bin

操作系统指标显示磁盘是瓶颈。其他变量保持默认值。

哪两项更改能为该实例带来最大收益?

    高回滚率:Com_rollback(8540万)远高于Com_commit(124万),说明事务回滚频繁
    缓冲池配置:当前buffer_pool_size=20G,但系统有32G内存,且innodb_buffer_pool_pages_free显示有大量空闲页(163840)
    磁盘瓶颈:OS指标显示磁盘I/O是主要瓶颈
    临时数据:数据不需要持久化和复制,可以牺牲一些安全性换取性能

D)innodb_doublewrite=0 [正确] 
    doublewrite机制用于防止页断裂,但会带来额外的I/O开销
    由于数据是临时的,可以禁用此安全功能来提升I/O性能
    特别适合磁盘是瓶颈且数据可丢失的场景

A)sync_binlog=0 [错误] 
已禁用二进制日志(disable-log-bin),此参数无影响

F)innodb_log_file_size=1G [正确] 
    当前日志文件大小可能较小(默认可能是48M或128M)
    增大redo日志可以减少checkpoint和日志切换频率
    1G的大小适合19G的数据库,能显著减少I/O操作

E)max_connections=10000 [错误] 
连接数设置应根据实际需要,盲目增大不会解决当前I/O瓶颈

C)innodb_flush_log_at_trx_commit=1 [错误] 
    当前设置为2(每秒刷盘),改为1(每次提交刷盘)会降低性能
    对于临时数据,保持2或设为0更合适

B)buffer_pool_size=24G [错误]
    当前已有163840空闲页,说明20G已足够缓存19G的数据库
    增大到24G不会带来明显收益,反而可能引起内存竞争

试题102:

复制代码
choose two Examine Joe's account:
CREATE USER 'joe'@'%' IDENTIFIED BY '*secret*' GRANT ALL 
PRIVILEGES ON *.* TO 'joe'@'%'
All existing connections for joe are killed.
Which two commands will stop joe establishing access to the MySQL instance?  
E)ALTER USER 'joe'@'%' IDENTIFIED BY '*invalid*' PASSWORD EXPIRE [正确] 
D)ALTER USER 'joe'@'%' SET password='*invalid*' [错误] 
A)ALTER USER 'joe'@'%' ACCOUNT LOCK [正确] 
F)REVOKE USAGE ON *.* FROM 'joe'@'%' [错误] 
C)REVOKE ALL PRIVILEGES ON *.* FROM 'joe'@'%' [错误] 
B)ALTER USER 'joe'@'%' PASSWORD HISTORY : [错误] 

解析

language 复制代码
在MySQL中,要阻止用户'joe'@'%'访问MySQL实例,最有效的方法是锁定账户或使其密码失效。以下是两个正确的命令及其解析:

E) ALTER USER 'joe'@'%' IDENTIFIED BY 'invalid' PASSWORD EXPIRE
    此命令会将joe的密码标记为过期,强制他在下次登录时更改密码。由于密码被设置为无效值('invalid'),joe将无法成功登录,从而阻止其访问MySQL实例。

A) ALTER USER 'joe'@'%' ACCOUNT LOCK
    此命令会直接锁定joe的账户,使其无法建立新的连接或访问MySQL实例,无论密码是否正确。

D) ALTER USER 'joe'@'%' SET password='invalid'
    如果joe知道新密码('invalid'),仍然可以登录。因此不能完全阻止访问。

F) REVOKE USAGE ON *.* FROM 'joe'@'%'
    USAGE权限仅表示"无权限",但joe仍保留其他已授予的权限(如ALL PRIVILEGES),因此无法阻止访问。

C) REVOKE ALL PRIVILEGES ON *.* FROM 'joe'@'%'
    虽然会撤销所有权限,但joe仍可以连接到MySQL实例(只是无法执行操作),因此不能完全阻止访问。

B) ALTER USER 'joe'@'%' PASSWORD HISTORY :
    此命令语法不完整且无效,无法实现阻止访问的目的。

试题103:

复制代码
Which two can minimize security risks when creating user accounts? 
D)Do not allow accounts without passwords. [正确] 
E)Require users to have the FIREWALL USER privilege defined. [错误] 
C)Require the use of mixed case usernames. [错误] 
A)Avoid the use of wildcards in host names. [正确] 
B)Avoid the use of wildcards in usernames. [错误] 

解析

language 复制代码
 D) 不允许账户使用空密码
    原因:空密码账户是严重的安全漏洞,攻击者可以轻易登录。强制所有账户设置强密码是最基本的安全措施。

 A) 避免在主机名中使用通配符(如`'%')
    原因:使用'%'允许用户从任何IP地址连接,增加了未授权访问的风险。应限制访问来源(如'user'@'192.168.1.%'或'user'@'specific-host')。

 E) 要求用户具有FIREWALL USER权限
    原因:MySQL 没有 FIREWALL USER 这个权限,该选项无效。

 C) 要求用户名使用大小写混合
    原因:MySQL 默认不区分 用户名大小写(除非操作系统支持),因此这并不能有效增强安全性。

 B) 避免在用户名中使用通配符
    原因:MySQL 不支持 在用户名中使用通配符(如'%'或'_'),因此该选项无实际意义。

试题104:

复制代码
Choose two.Mary connects to a Linux MySQL Server from a client on a Windows machine. Examine this statement and output:(见下图)Which two are true? 
language 复制代码
C)Mary has the privileges of account mary@%. [正确] 
E)Mary authenticated to the account [email protected]. [错误] 
D)Mary connected using a UNIX socket. [错误] 
B)Mary connected to the database server whose IP address is 192.0.2.101. [错误] 
A)Mary connected from a client machine whose IP address is 192.0.2.101. [正确]

解析

language 复制代码
C) Mary has the privileges of account mary@%.
    解释:mary@% 表示 Mary 可以从任何主机连接,并拥有该账户的权限。如果 Mary 成功连接,说明她确实拥有 mary@% 的权限。

A) Mary connected from a client machine whose IP address is 192.0.2.101.
    解释:如果 Mary 的连接来自 IP 192.0.2.101,那么她可能是通过 [email protected] 或 mary@% 账户登录的,但题目并未限定具体账户,仅说明她的连接来源 IP。

E) Mary authenticated to the account [email protected].[错误] 
    解释:题目没有提供 Mary 使用的具体账户名,她可能是 mary@% 或 [email protected],因此不能确定她一定使用了 [email protected] 这个账户。

D) Mary connected using a UNIX socket.
    解释:UNIX socket 连接仅适用于本地(localhost),而题目提到 IP 192.0.2.101 是远程连接,因此不可能是 UNIX socket。

 B) Mary connected to the database server whose IP address is 192.0.2.101.
    解释:题目说的是 Mary 从 192.0.2.101 连接,而不是连接到 192.0.2.101(即 192.0.2.101 是客户端 IP,而非服务器 IP)。

试题105:

复制代码
Choose two.Which two actions can obtain information about deadlocks? 
D)Run the SHOW ENGINE INNODB STATUS command from the mysql client. [正确] 
A)Run the SHOW ENGINE INNODB MUTEX command from the mysql client. [错误] 
B)Enable the innodb_status_output_locks global parameter. [错误] 
E)Use the sys.innodb_lock_waits view. [错误] 
C)Enable the innodb_print_all_deadlocks global parameter. [正确] 

解析

language 复制代码
D) 在 MySQL 客户端执行 SHOW ENGINE INNODB STATUS 命令
    解释:
        SHOW ENGINE INNODB STATUS 会返回 InnoDB 引擎的详细状态信息,包括 最近的死锁记录(在 LATEST DETECTED DEADLOCK 部分)。
        这是 MySQL 官方推荐的手动查看死锁的方式。

C) 启用全局参数 innodb_print_all_deadlocks
    解释:
        该参数 (SET GLOBAL innodb_print_all_deadlocks = ON;) 会让 MySQL 将所有死锁信息记录到错误日志(error log) 中,而不仅仅是最近的死锁。
        适用于长期监控死锁情况,而不仅仅是手动查询。

A) 执行 SHOW ENGINE INNODB MUTEX 命令
    解释:
        该命令用于查看 InnoDB 的 互斥锁(mutex)状态,不包含死锁信息。
        死锁涉及的是 事务锁(row locks/table locks),而不是 mutex。

B) 启用全局参数 innodb_status_output_locks
    解释:
        该参数 (SET GLOBAL innodb_status_output_locks = ON;) 会让 SHOW ENGINE INNODB STATUS 额外显示锁信息,但 不会直接提供死锁信息。
        它主要用于调试锁等待(lock waits),而不是死锁(deadlocks)。

E) 使用 sys.innodb_lock_waits 视图
    解释:
        sys.innodb_lock_waits 是 Performance Schema 提供的视图,用于查看 当前的锁等待情况,但 不显示死锁信息。
        死锁是 已经检测到并回滚的事务,而该视图仅显示 正在等待锁的事务。

试题106:

复制代码
Choose two.Which two are true about binary logs used in asynchronous replication? 
C)They are pushed from the master to the slave. [错误] 
B)They contain events that describe database changes on the master. [正确] 
D)They contain events that describe only administrative commands run on the master. [错误] 
A)They contain events that describe all queries run on the master. [错误] 
E)They are pulled from the master to the slave. [正确]

解析

language 复制代码
关于异步复制中使用的二进制日志正确的两项。
B) 二进制日志包含描述主库(Master)上数据库更改的事件。

    解释:
        二进制日志(Binary Log)记录的是 主库上实际发生的数据库更改(如 INSERT、UPDATE、DELETE 等 DML 操作),而不是所有查询(如 SELECT 不会记录)。
        这些事件(events)会被发送到从库(Slave)进行重放(replay),从而实现数据复制。

E) 二进制日志是从主库拉取(pull)到从库的。
    解释:
        在 MySQL 异步复制中,从库(Slave)主动向主库(Master)请求二进制日志(通过 I/O 线程拉取),而不是主库主动推送(push)。
        这种机制称为 "pull-based" 复制,从库控制复制的进度。

C) 二进制日志是从主库推(push)送到从库的。
    解释:
        MySQL 异步复制是 从库主动拉取(pull)日志,而不是主库推送(push)。
        某些数据库(如 MongoDB)可能采用 push 模式,但 MySQL 默认是 pull 模式。

D) 二进制日志仅包含主库上执行的管理命令(administrative commands)。
    解释:
        二进制日志记录的是 数据更改(DML)和部分 DDL(如 CREATE TABLE),而不仅仅是管理命令(如 GRANT、SET 等)。
        管理命令通常不直接影响数据,因此不会全部记录。

A) 二进制日志包含主库上运行的所有查询(queries)。
    解释:
        二进制日志 不记录 SELECT 查询(只读操作不影响数据),仅记录 修改数据的操作(DML)和部分 DDL。
        如果启用 binlog_format=STATEMENT,它会记录 SQL 语句;如果启用 ROW,则会记录行级别的更改。

注意:

✅ binlog 会记录部分管理命令(如 GRANT、REVOKE、CREATE USER、CREATE DATABASE 等)。

❌ 但不会记录所有管理命令(如 SET GLOBAL、FLUSH PRIVILEGES 等)。

试题107:

复制代码
Choose two A scientific data gathering application uses a MySQL instance back end for data management.There is a high concurrency of transactions at thousands of transactions per second of volatile data.A restore from binary logs is planned using the command:mysqlbinlog--start
datetime='2019-08-01 11:00:00'--stop-datetime='2019-08-10 08:30:25'binlog.000238 binlog.000239 binlog.000240 mysqlWhich two characteristics cause the restore to be inconsistent to the original data? 
E)The time span of binary logs is too long to restore. [错误] 
C)Temporary tables cannot persist across binary logs. [错误] 
A)Transaction rate is too high to get a consistent restore. [正确] 
B)Multiple binary logs cannot be specified on the command line. [错误] 
D)The temporal values do not offer high enough precision. [正确]

解析

language 复制代码
高并发事务环境下,使用二进制日志(binlog)恢复数据可能导致不一致的原因。
A) 事务率过高,无法保证恢复的一致性(Transaction rate is too high to get a consistent restore)
    原因:
        题目提到 每秒数千次高并发事务,这意味着在 start-datetime 和 stop-datetime 之间可能有大量事务重叠或部分提交。
        MySQL 的 binlog 虽然是顺序写入的,但在极端高并发下,某些事务可能在 binlog 中记录的顺序与实际提交顺序不完全一致,导致恢复时数据不一致。
        此外,如果使用了 组提交(group commit),多个事务可能被合并写入 binlog,恢复时可能无法完全还原原始事务时序。

D) 时间值精度不足(The temporal values do not offer high enough precision)
    原因:
        --start-datetime 和 --stop-datetime 使用的是 秒级精度(YYYY-MM-DD HH:MM:SS),而 MySQL 5.6+ 支持微秒级时间戳(如 11:00:00.123456)。
        在高并发环境下,同一秒内可能有数千个事务,仅用秒级时间戳无法精确定位恢复点,可能导致部分事务被错误包含或遗漏,造成数据不一致。

 错误选项解析:
E) 二进制日志时间跨度太长,无法恢复(The time span of binary logs is too long to restore)
    错误原因:
        binlog 恢复的时间跨度 不影响数据一致性,只影响恢复耗时。只要 binlog 完整,理论上可以恢复任意时间范围的数据。

C) 临时表无法跨二进制日志持久化(Temporary tables cannot persist across binary logs)
    错误原因:
        临时表(CREATE TEMPORARY TABLE)默认 不记录到 binlog,因此不会影响恢复一致性。
        即使临时表被记录(如 binlog_format=ROW + --binlog-format=STATEMENT),它们也不会导致数据不一致,因为临时表仅在会话生命周期内有效。

B) 命令行不能指定多个二进制日志(Multiple binary logs cannot be specified on the command line)
    错误原因:
        mysqlbinlog 支持同时指定多个 binlog 文件(如 binlog.000238 binlog.000239 binlog.000240),并按顺序解析,因此该选项不符合事实。

试题108:

复制代码
Choose two.Which two are contained in the InnoDB system tablespace (ibdata1) by default? 

D)primary indexes [错误] 
B)change buffer [正确] 
A)doublewrite buffer [正确] 
C)InnoDB Data Dictionary [错误] 
E)table data [错误] 
F)user privileges [错误]

解析

language 复制代码
InnoDB 系统表空间 (ibdata1) 默认包含的内容

B) Change Buffer(变更缓冲)
A) Doublewrite Buffer(双写缓冲)

C) InnoDB Data Dictionary(数据字典)

    错误原因:
        InnoDB 数据字典(存储表结构、列信息等元数据)确实默认在 ibdata1 中,但题目要求选 两个,而更关键的是 Change Buffer 和 Doublewrite Buffer。
        注意:部分考试可能认为数据字典是"默认包含",但本题的官方答案未选它,可能是出题意图更偏向于核心缓冲机制。

试题109:

复制代码
Choose two.Examine these InnoDB Cluster parameter 
settings:cluster.setInstanceOption('host1:3377', 'memberWeight', 
40)cluster.setInstanceOption('host2:3377', 'memberWeight', 
30)cluster.setInstanceOption('host3:3377', 'memberweight', 40) 
cluster.setInstanceOption('host3:3377', 'exitstateAction', \ABORT_SERVER\) cluster.setOption 
(\expelTimeout\,1)Now examine the partial status:(见下图)A permanent network failure isolates 
host3. Which two statements are true? 



E)The instance deployed on host2 is elected as the new primary instance. [错误] 
F)The issuing command cluster.switchToMultiPrimaryMode() will fail to enable multi-primary mode. 
[正确] 
B)Failure of the instance deployed on host1 provokes an outage. [错误] 
D)The primary instance can be specified by using the command cluster.setPrimaryInstance 
(<host>:<port>). [正确] 
A)The instance deployed on host3 will automatically rejoin the cluster when connectivity is re
established. [错误] 
C)The instance deployed on host3 is expelled from the cluster and must be rejoined using 
cluster.addInstance('host3:3377'). [错误]

解析

language 复制代码
题目翻译

检查以下 InnoDB Cluster 参数设置:
javascript

cluster.setInstanceOption('host1:3377', 'memberWeight', 40)
cluster.setInstanceOption('host2:3377', 'memberWeight', 30)
cluster.setInstanceOption('host3:3377', 'memberWeight', 40)
cluster.setInstanceOption('host3:3377', 'exitStateAction', 'ABORT_SERVER')
cluster.setOption('expelTimeout', 1)

现在检查部分集群状态(见下图)。假设 host3 因永久性网络故障被隔离,哪两个描述是正确的?
选项翻译

E) 部署在 host2 上的实例会被选举为新的主实例。 [错误]
F) 执行命令 cluster.switchToMultiPrimaryMode() 将无法启用多主模式。 [正确]
B) 如果部署在 host1 上的实例发生故障,会导致集群服务中断。 [错误]
D) 可以通过命令 cluster.setPrimaryInstance(<host>:<port>) 手动指定主实例。 [正确]
A) 当网络恢复后,host3 上的实例会自动重新加入集群。 [错误]
C) host3 上的实例会被驱逐出集群,必须使用 cluster.addInstance('host3:3377') 重新加入。 [错误]


✅ 正确选项
D) 可以通过命令 cluster.setPrimaryInstance(<host>:<port>) 手动指定主实例。
    原因:
        InnoDB Cluster 支持手动指定主实例,该命令可以强制切换主节点。
        由于 host3 被隔离,集群可能进入单主模式,此时可以手动调整主节点。

F) 执行命令 cluster.switchToMultiPrimaryMode() 将无法启用多主模式。
    原因:
        题目中 exitStateAction='ABORT_SERVER' 表示 host3 被隔离时会自动停止服务,而不是优雅退出。
        由于集群状态可能不一致(host3 异常终止),切换多主模式可能会失败。

错误选项
E) 部署在 host2 上的实例会被选举为新的主实例。
    错误原因:
        host1 的 memberWeight=40,host2 的 memberWeight=30,因此 host1 优先级更高,会成为主实例,而不是 host2。

B) 如果部署在 host1 上的实例发生故障,会导致集群服务中断。
    错误原因:
        集群仍有 host2 和 host3(尽管 host3 被隔离),理论上可以自动故障转移,不会直接导致服务中断。

A) 当网络恢复后,host3 上的实例会自动重新加入集群。
    错误原因:
        exitStateAction='ABORT_SERVER' 表示 host3 会直接终止,而不是尝试重新加入。需要手动干预(如重启实例并重新加入)。

C) host3 上的实例会被驱逐出集群,必须使用 cluster.addInstance('host3:3377') 重新加入。
    错误原因:
        expelTimeout=1 表示 1 秒后驱逐 host3,但 ABORT_SERVER 会使实例直接终止,而不是被驱逐。需要手动恢复(如重启 MySQL 并重新加入集群)。

试题110:

复制代码
Choose two.A clean shutdown was performed with innodb_fast_shutdown=0.While you were 
manipulating files, all files were accidentally deleted from the top-level data directory.Which two 
files must be restored from backup to allow the DB to restart cleanly? 
D)ibdata1 [正确] 
F)undo_001 [错误] 
E)ibtmp1 [错误] 
C)mysql.ibd [正确] 
B)ib_logfile0 [错误] 
A)ib_buffer_pool [错误]

解析

language 复制代码
选择两个。使用 innodb_fast_shutdown=0 执行干净关闭。当您处理文件时,所有文件都被意外地从顶级数据目录中删除。必须从备份中恢复哪两个文件才能让数据库干净地重启?

innodb_fast_shutdown=0 的作用
    表示 InnoDB 在关闭时执行完整清理(如合并缓冲池、刷脏页、清理 undo 日志等),确保数据文件处于一致状态。
    因此,日志文件(如 ib_logfile*)和临时文件(如 ibtmp1)不是启动必需的,因为数据已持久化到表空间。

数据库启动的必需文件
    系统表空间(ibdata1):存储数据字典、undo 日志、双写缓冲等核心元数据。
    数据字典文件(mysql.ibd):MySQL 8.0+ 中存储系统表结构信息(如 mysql 库的表)。
    其他文件(如 ib_logfile*、ibtmp1、undo_*)会在启动时自动重建

D) ibdata1
    原因:
        ibdata1 是 InnoDB 系统表空间,包含数据字典、undo 日志(如果未启用独立 undo 表空间)、双写缓冲等关键信息。
        没有它,数据库无法启动。

C) mysql.ibd
    原因:
        在 MySQL 8.0+ 中,mysql 系统库的表(如 user、db)存储在 mysql.ibd 文件中。
        如果丢失,数据库可能无法验证用户权限或读取元数据,导致启动失败。

F) undo_001
    错误原因:
        如果使用独立 undo 表空间(MySQL 8.0+ 默认配置),undo_001 是 undo 日志文件。
        但题目未明确是否启用独立 undo,且 innodb_fast_shutdown=0 已确保事务一致性,ibdata1 中的 undo 日志足够恢复。

E) ibtmp1
    错误原因:
        ibtmp1 是临时表空间,数据库启动时会自动重建,无需从备份恢复。

B) ib_logfile0
    错误原因:
        InnoDB 重做日志文件(ib_logfile*)用于崩溃恢复,但完全关闭后数据已持久化到表空间,日志文件可重建。

A) ib_buffer_pool
    错误原因:
        ib_buffer_pool 是缓冲池的预热文件,数据库启动时可忽略或自动重建。