`# 学习自测与解析:MySQL第五、六、七期核心知识点详解
本笔记为第五期(用户管理与权限控制)、第六期(备份与恢复)、第七期(高可用架构与综合项目)的配套自测题解析。共 20 题,每题包含:题目回顾、考查知识点、详细解答与分析。
题目一:MySQL 用户账号的组成与主机通配符
题目 :MySQL 中用户账号由哪两部分组成?主机通配符 % 和 _ 分别代表什么?请给出只允许从 192.168.1.0/24 网段连接的用户创建语句。
考查知识点
- 用户账号格式
'user'@'host'(第五期 §1.1) - 主机通配符含义
CREATE USER语句
详细解答
组成 :用户名 + 主机,格式为 'username'@'host'。用户名和主机组合唯一标识一个用户。
通配符:
%:匹配任意长度的任意字符(0 个或多个)_:匹配单个任意字符
允许 192.168.1.0/24 网段连接的用户创建:
sql
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'password';
注意:
192.168.1.%会匹配192.168.1.0~192.168.1.255之间的所有 IP。
题目二:权限的授予与回收
题目 :现需要给用户 'report'@'10.0.0.%' 授予对数据库 sales 中所有表的 SELECT 和 INSERT 权限,并允许该用户将这些权限转授给其他用户。请写出授权语句。随后,需要撤销该用户的 INSERT 权限但保留 SELECT,请写出回收语句。
考查知识点
GRANT语法与WITH GRANT OPTION(第五期 §4.2)REVOKE语法(第五期 §4.4)
详细解答
授权语句:
sql
GRANT SELECT, INSERT ON sales.* TO 'report'@'10.0.0.%' WITH GRANT OPTION;
回收 INSERT 权限:
sql
REVOKE INSERT ON sales.* FROM 'report'@'10.0.0.%';
验证:
SHOW GRANTS FOR 'report'@'10.0.0.%';应只显示SELECT权限。
题目三:忘记 root 密码的处理方法
题目:如果忘记了 MySQL 的 root 密码,且希望保留现有数据,请写出完整的恢复步骤(包括配置文件修改、SQL 命令和服务重启)。
考查知识点
- 跳过授权表启动(第五期 §3.2)
- 修改
authentication_string字段
详细解答
步骤:
-
编辑 MySQL 配置文件(如
/etc/my.cnf或/etc/my.cnf.d/mysql-server.cnf),在[mysqld]段添加:ini
skip-grant-tables skip-networking # 可选,禁止远程连接提高安全性 -
重启 MySQL:
bash
systemctl restart mysqld -
无密码登录:
bash
mysql -
清空 root 密码(设为空字符串):
sql
UPDATE mysql.user SET authentication_string = '' WHERE user = 'root' AND host = 'localhost'; FLUSH PRIVILEGES; -
退出 MySQL,移除配置文件中的
skip-grant-tables和skip-networking,重启服务:bash
systemctl restart mysqld -
使用空密码登录,设置新密码:
sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_strong_password';
注意:生产环境中需谨慎操作,建议先在测试环境演练。
题目四:冷备份与逻辑备份的区别
题目:请解释冷备份和逻辑备份的区别,并分别说明各自的优缺点及适用场景。
考查知识点
- 物理冷备 vs 逻辑备份(第六期 §二)
详细解答
| 特性 | 冷备份(物理备份) | 逻辑备份(mysqldump) |
|---|---|---|
| 备份方式 | 直接复制数据目录的物理文件 | 导出 SQL 语句 |
| 数据库状态 | 需要停机(或锁表) | 在线进行,不影响读写 |
| 备份速度 | 快 | 慢(尤其数据量大时) |
| 恢复速度 | 快(直接拷贝文件) | 慢(逐条执行 SQL) |
| 跨平台性 | 差(受操作系统、MySQL 版本影响) | 好(SQL 文本通用) |
| 备份文件可读性 | 不可读 | 可读(SQL 语句) |
| 适用场景 | 大数据量、要求快速恢复 | 小数据量、跨版本/跨平台迁移 |
示例命令:
bash
# 冷备份
systemctl stop mysqld
tar czf backup.tar.gz /var/lib/mysql
# 逻辑备份
mysqldump -u root -p --all-databases > all.sql
题目五:mysqldump 全量备份与恢复
题目 :使用 mysqldump 备份数据库 erp 的所有表,并将备份文件压缩存储。请写出备份命令。之后,需要从该压缩备份中恢复数据到新的数据库 erp_restore,请写出完整步骤。
考查知识点
mysqldump备份单个数据库(第六期 §4.1)- 备份压缩与解压恢复
详细解答
备份命令:
bash
mysqldump -u root -p erp | gzip > /backup/erp_$(date +%Y%m%d).sql.gz
恢复步骤:
bash
# 1. 创建新数据库(如果需要)
mysql -u root -p -e "CREATE DATABASE erp_restore;"
# 2. 解压并恢复
gunzip < /backup/erp_20251208.sql.gz | mysql -u root -p erp_restore
也可以分两步:先
gzip -d file.sql.gz,再mysql < file.sql。
题目六:二进制日志(binlog)的作用与查看
题目:MySQL 的二进制日志(binlog)主要记录什么内容?如何查看当前是否开启了 binlog?如何查看 binlog 文件中的事件(以可读形式)?
考查知识点
- binlog 的作用(第六期 §5.1)
- 查看 binlog 状态与内容
详细解答
binlog 作用:记录所有数据变更操作(INSERT、UPDATE、DELETE、DDL 等),用于主从复制和时间点恢复。
查看是否开启 binlog:
sql
SHOW VARIABLES LIKE 'log_bin';
-- 值为 ON 表示开启
查看 binlog 文件列表:
sql
SHOW BINARY LOGS;
以可读形式查看 binlog 内容:
bash
mysqlbinlog --no-defaults --base64-output=decode-rows -v /var/lib/mysql/mysql-bin.000001
题目七:基于 binlog 的时间点恢复
题目 :某公司每周日 00:00 进行全量备份,并开启了 binlog。周三下午 14:30 误删除了一个重要表。请写出恢复步骤,假设全量备份文件为 full_backup.sql,binlog 文件从周日 00:00 到周三 14:29 的为 mysql-bin.000010。
考查知识点
- 全量 + 增量恢复流程(第六期 §5.3)
- 时间点恢复参数
详细解答
恢复步骤:
-
恢复全量备份:
bash
mysql -u root -p < full_backup.sql -
应用 binlog 到误删除之前的时间点(例如误删发生在 14:30:00,恢复到 14:29:59):
bash
mysqlbinlog --stop-datetime="2025-12-11 14:29:59" /var/lib/mysql/mysql-bin.000010 | mysql -u root -p -
验证数据是否完整。
注意 :如有多个 binlog 文件,需按顺序逐个应用。可使用
--start-datetime和--stop-datetime精确定位。
题目八:主从复制中 I/O 线程和 SQL 线程的作用
题目:在 MySQL 主从复制中,I/O 线程和 SQL 线程分别负责什么工作?如何检查两个线程的状态是否正常?
考查知识点
- 主从复制组件(第七期 §1.2)
SHOW SLAVE STATUS关键字段
详细解答
I/O 线程:运行在从库上,负责连接主库,请求 binlog,并将接收到的内容写入从库的中继日志(relay log)。
SQL 线程:运行在从库上,负责读取中继日志,重放其中的 SQL 语句,使从库数据与主库保持一致。
状态检查:在从库执行:
sql
SHOW SLAVE STATUS\G
关键字段:
Slave_IO_Running: YesSlave_SQL_Running: Yes
两者均为 Yes 表示复制正常。
题目九:配置主从复制时,CHANGE MASTER TO 语句需要指定哪些关键信息?
题目 :请写出完整的 CHANGE MASTER TO 语句,假设主库 IP 为 192.168.1.101,复制用户为 repl,密码 repl123,当前主库的 binlog 文件为 master-bin.000005,位置为 987。
考查知识点
- 从库配置主从连接的语法(第七期 §2.3)
详细解答
sql
CHANGE MASTER TO
MASTER_HOST='192.168.1.101',
MASTER_USER='repl',
MASTER_PASSWORD='repl123',
MASTER_LOG_FILE='master-bin.000005',
MASTER_LOG_POS=987;
执行后,使用 START SLAVE; 启动复制。
题目十:Amoeba 读写分离的工作原理
题目:Amoeba 是什么?它如何实现读写分离?写出 Amoeba 配置文件中指定写池和读池的参数名称。
考查知识点
- Amoeba 代理中间件(第七期 §3.1)
amoeba.xml中的配置项
详细解答
Amoeba:基于 Java 开发的 MySQL 数据库代理中间件,对应用透明,自动识别 SQL 类型并路由到不同的 MySQL 节点。
读写分离原理:
- 应用连接 Amoeba(端口 8066),Amoeba 解析 SQL 语句
- 写操作(INSERT/UPDATE/DELETE)→ 转发到
writePool指定的主库 - 读操作(SELECT)→ 转发到
readPool指定的从库池,从库池可实现负载均衡(轮询/权重)
配置文件 amoeba.xml 中的关键参数:
xml
<property name="writePool">master</property>
<property name="readPool">slaves</property>
<property name="defaultPool">master</property>
题目十一:MHA 的组成与故障切换流程
题目:MHA 由哪两部分组成?故障切换时,MHA 选择新主库的优先级规则是什么?
考查知识点
- MHA 架构(第七期 §4.1)
- 候选主库选择逻辑(第七期 §5.6 配置文件中
candidate_master和check_repl_delay)
详细解答
组成:
- MHA Manager:管理节点,负责监控和触发切换
- MHA Node:数据节点,运行在每个 MySQL 服务器上,执行日志保存和恢复操作
新主库选择优先级:
- 如果设置了
candidate_master=1且数据差异不超出限制(或check_repl_delay=0忽略延迟),则该从库优先被选为新主库。 - 否则,选择数据最接近主库(binlog 位置/GTID 最新)的从库。
- 若数据一致,按配置文件
[serverN]的顺序选择。
题目十二:MHA 的 VIP 切换脚本作用
题目 :在 MHA 配置中,master_ip_failover_script 指定的脚本通常用来做什么?请简述脚本中 start 和 stop 命令的功能。
考查知识点
- MHA 虚拟 IP 管理(第七期 §5.6 脚本内容)
详细解答
该脚本用于在主库发生故障切换时,自动将虚拟 IP(VIP)从原主库漂移到新主库,使应用可以继续使用同一 IP 访问数据库,无需修改配置。
stop命令 :在原主库上禁用 VIP(ifconfig ens33:1 down)start命令 :在新主库上启用 VIP(ifconfig ens33:1 <VIP>)
脚本中关键变量示例:
perl
my $vip = '192.168.108.200';
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
题目十三:LAMP 环境搭建中 PHP 与 MySQL 的连接
题目:在 LAMP 架构中,PHP 通过哪个扩展连接 MySQL?WordPress 安装时,需要填写哪些数据库连接信息?
考查知识点
- PHP MySQL 扩展(第七期 §9.2)
- WordPress 安装配置(第七期 §9.7)
详细解答
PHP 连接 MySQL 的扩展 :推荐使用 php-mysqlnd(MySQL Native Driver),它支持 MySQL 5.6+ 的新特性,性能更好。
WordPress 安装需要填写的数据库信息:
- 数据库名(如
wordpress) - 数据库用户名(如
wordpresser) - 数据库密码
- 数据库主机(可以是 IP 或域名,如
192.168.108.101) - 数据表前缀(默认
wp_,可用于同一数据库安装多个 WordPress)
题目十四:源码编译 MySQL 时,CMake 常用的关键参数
题目:源码安装 MySQL 5.7 时,使用 CMake 配置。请写出至少 5 个常用 CMake 参数,并说明其含义。
考查知识点
- 源码安装 CMake 配置(第七期 §10.5)
详细解答
常用 CMake 参数及含义:
| 参数 | 含义 |
|---|---|
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql |
安装路径 |
-DMYSQL_DATADIR=/usr/local/mysql/data |
数据文件目录 |
-DDEFAULT_CHARSET=utf8 |
默认字符集 |
-DDEFAULT_COLLATION=utf8_general_ci |
默认排序规则 |
-DWITH_INNOBASE_STORAGE_ENGINE=1 |
启用 InnoDB 存储引擎 |
-DWITH_BOOST=/usr/local/boost |
指定 Boost 库路径(MySQL 5.7 需要) |
-DWITH_SYSTEMD=1 |
启用 systemd 支持(便于 systemctl 管理) |
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock |
socket 文件路径 |
题目十五:MySQL 主从复制中 relay_log_purge 参数的作用
题目 :在 MHA 环境检查时,可能会收到 relay_log_purge=0 is not set 的警告。relay_log_purge 参数的作用是什么?MHA 为什么建议设置为 0?
考查知识点
- relay log 管理
- MHA 对中继日志的要求
详细解答
relay_log_purge 作用:控制从库是否自动删除已执行过的中继日志文件。默认值为 1(自动删除)。
MHA 建议设为 0 的原因:
- 当主库故障时,MHA 可能需要的从库中继日志来恢复其他从库。如果自动删除了,可能导致数据丢失或恢复失败。
- 设为 0 后,需要手动或通过 MHA 脚本清理中继日志,以确保在切换时日志可用。
配置方法 (在从库 /etc/my.cnf 中):
ini
relay_log_purge = 0
注意 :长期不清理会导致磁盘空间耗尽,需要配合
purge_relay_logs工具定期清理。
题目十六:Amoeba 后端从库负载均衡的配置方法
题目 :在 dbServers.xml 中,如何定义多个从库组成的池,并设置负载均衡算法为轮询?请写出关键配置片段。
考查知识点
- Amoeba 从库池定义(第七期 §3.4)
loadbalance参数值含义
详细解答
关键配置片段:
xml
<dbServer name="slaves" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- 负载均衡算法:1=轮询,2=权重,3=高可用 -->
<property name="loadbalance">1</property>
<!-- 池中包含的从库名称,用逗号分隔 -->
<property name="poolNames">slave1,slave2</property>
</poolConfig>
</dbServer>
其中 slave1 和 slave2 是之前定义的具体后端服务器节点。
题目十七:MHA 故障切换后的配置文件自动更新
题目 :MHA 启动时使用了 --remove_dead_master_conf 参数,这个参数的作用是什么?切换完成后,原主库的配置信息被如何对待?
考查知识点
- MHA 启动参数(第七期 §5.8)
详细解答
--remove_dead_master_conf 作用 :当发生故障切换后,MHA 会自动从配置文件(如 app1.cnf)中删除已宕机的主库对应的 [serverN] 段。
原主库配置的处理:
- 配置文件中该主库的条目被删除,避免后续 MHA 监控到它(因为该节点已不再是主库)。
- 如果需要将原主库重新加入集群(作为从库),需要手动编辑配置文件,添加回
[serverN]段,并确保其角色为从库(通常保留作为备份)。
题目十八:MySQL 5.7 源码安装后初始化失败常见原因
题目 :源码安装 MySQL 5.7 后,执行 mysqld --initialize 初始化时报错 error while loading shared libraries: libaio.so.1,应如何解决?
考查知识点
- 源码安装依赖问题
libaio库的作用
详细解答
错误原因 :MySQL 需要异步 I/O 库 libaio,但系统未安装。
解决方法:
bash
# CentOS / RHEL
yum install -y libaio
# Ubuntu / Debian
apt-get install -y libaio1
安装后重新执行初始化命令:
bash
mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
其他常见初始化失败原因:数据目录权限不正确(需
chown -R mysql:mysql)、缺少依赖包(如numactl)等。
题目十九:WordPress 连接远程数据库时常见的权限问题
题目:WordPress 安装时,填写数据库主机为另一台服务器的 IP,但提示"数据库连接错误"。请列出可能的原因及排查步骤。
考查知识点
- MySQL 远程连接授权
- 网络与防火墙
详细解答
可能原因:
- MySQL 用户未授权从 Web 服务器的 IP 连接。
- MySQL 绑定地址(
bind-address)未设为0.0.0.0或正确 IP,导致仅允许本地连接。 - 防火墙阻止了 3306 端口。
- 数据库主机 IP 填写错误。
- 密码错误。
排查步骤:
bash
# 1. 在数据库服务器上检查用户授权
mysql> SELECT host, user FROM mysql.user WHERE user='wordpresser';
# 2. 检查 bind-address
mysql> SHOW VARIABLES LIKE 'bind_address';
# 3. 测试网络连通性(从 Web 服务器)
telnet 192.168.108.101 3306
# 4. 检查防火墙(数据库服务器)
systemctl status firewalld
firewall-cmd --list-ports
# 5. 临时授权测试(若以上均正确,尝试通配符主机)
mysql> GRANT ALL ON wordpress.* TO 'wordpresser'@'%' IDENTIFIED BY '123456';
题目二十:综合场景题------主从故障恢复全流程
题目 :某主从集群(一主两从)中,主库突然宕机,MHA 已自动将 slave01 提升为新主库,slave02 自动指向新主库。现在原主库已修复,需要将其重新加入集群作为从库。请写出详细的操作步骤。
考查知识点
- MHA 切换后的修复流程(第七期 §七)
CHANGE MASTER TO重新指向
详细解答
步骤:
-
在原主库(已修复)上停止并重置复制:
sql
STOP SLAVE; RESET SLAVE ALL; -
在新主库(原 slave01)上查看当前 binlog 坐标:
sql
SHOW MASTER STATUS; +---------------------+----------+ | File | Position | +---------------------+----------+ | master-bin.000002 | 2210 | +---------------------+----------+ -
在原主库上执行
CHANGE MASTER TO,指向新主库:sql
CHANGE MASTER TO MASTER_HOST='192.168.108.132', -- 新主库 IP MASTER_USER='myslave', MASTER_PASSWORD='123', MASTER_LOG_FILE='master-bin.000002', MASTER_LOG_POS=2210; START SLAVE; -
验证复制状态:
sql
SHOW SLAVE STATUS\G确保
Slave_IO_Running和Slave_SQL_Running均为Yes。 -
(可选)更新 MHA 配置文件 :手动编辑
/etc/masterha/app1.cnf,添加回原主库的[server1]段(可根据需要设为普通从库或候选主库)。之后重启 MHA Manager。 -
测试同步:在新主库上插入测试数据,检查原主库是否同步。
附:知识点对应总表
| 题号 | 主要考查知识点(对应笔记章节) |
|---|---|
| 1 | 第五期 §1.1 用户账号组成与主机通配符 |
| 2 | 第五期 §4.2~4.4 GRANT / REVOKE |
| 3 | 第五期 §3.2 忘记 root 密码处理 |
| 4 | 第六期 §二 冷备份 vs 逻辑备份 |
| 5 | 第六期 §4.1 mysqldump 备份与恢复 |
| 6 | 第六期 §5.1 binlog 作用与查看 |
| 7 | 第六期 §5.3 时间点恢复 |
| 8 | 第七期 §1.2 I/O 线程与 SQL 线程 |
| 9 | 第七期 §2.3 CHANGE MASTER TO |
| 10 | 第七期 §3.1 Amoeba 原理与配置 |
| 11 | 第七期 §4.1 MHA 组成与切换规则 |
| 12 | 第七期 §5.6 VIP 切换脚本 |
| 13 | 第七期 §9.2, §9.7 LAMP + WordPress |
| 14 | 第七期 §10.5 CMake 参数 |
| 15 | 第七期 §2.3 relay_log_purge 与 MHA |
| 16 | 第七期 §3.4 Amoeba 负载均衡配置 |
| 17 | 第七期 §5.8 --remove_dead_master_conf |
| 18 | 第七期 §10.6 源码安装依赖问题 |
| 19 | 第七期 §9.4 远程连接权限问题 |
| 20 | 第七期 §七 MHA 故障恢复流程 |
学习建议:对于答错的题目,请回看第五、六、七期对应章节,并动手在环境中验证。高可用架构涉及较多配置细节,建议搭建完整实验环境(可使用虚拟机)逐项测试,加深理解。