面试题答案
一键面试全量备份阶段
- 关键操作:
- 执行
FLUSH TABLES WITH READ LOCK;
语句,这会刷新所有表并锁定,确保数据处于一致性状态,避免在备份过程中有新的写入操作修改数据。 - 记录当前 Binlog 的文件名和位置,使用
SHOW MASTER STATUS;
命令,这两个信息后续增量备份会用到。 - 执行全量数据备份,例如可以使用
mysqldump
工具导出所有数据库的结构和数据。 - 执行
UNLOCK TABLES;
解锁表,恢复数据库的正常读写操作。
- 执行
- 注意事项:
- 在执行
FLUSH TABLES WITH READ LOCK;
到UNLOCK TABLES;
期间,数据库处于只读状态,会影响业务写入,所以这个操作应尽量安排在业务低峰期进行。 - 记录 Binlog 位置务必准确,否则增量备份可能会出现数据不完整或重复备份的问题。
- 在执行
增量备份阶段
- 关键操作:
- 从上次全量备份记录的 Binlog 位置开始,获取 Binlog 日志。可以使用
mysqlbinlog
工具,指定起始的 Binlog 文件名和位置,例如mysqlbinlog --start-position=起始位置 起始Binlog文件名 > 增量备份文件.sql
。 - 每次增量备份完成后,更新记录的 Binlog 位置为当前最新位置,以便下次增量备份使用。可以再次执行
SHOW MASTER STATUS;
来获取最新的 Binlog 信息。
- 从上次全量备份记录的 Binlog 位置开始,获取 Binlog 日志。可以使用
- 注意事项:
- 确保 Binlog 日志格式和版本与
mysqlbinlog
工具兼容,不同版本的 MariaDB 生成的 Binlog 格式可能有细微差异,可能导致mysqlbinlog
解析失败。 - 增量备份过程中,若 Binlog 日志文件由于配置或空间等原因进行了切换,要正确处理多个 Binlog 文件的衔接,保证增量数据的完整性。
- 定期清理旧的 Binlog 文件,防止占用过多磁盘空间,但清理前要确保所有相关的增量备份都已完成并且可恢复数据。
- 确保 Binlog 日志格式和版本与
恢复阶段
- 关键操作:
- 首先恢复全量备份数据,使用
mysql
命令导入全量备份文件,例如mysql < 全量备份文件.sql
。 - 按照增量备份的顺序,依次恢复增量备份数据,同样使用
mysql
命令导入每个增量备份文件,例如mysql < 增量备份文件1.sql
、mysql < 增量备份文件2.sql
等。
- 首先恢复全量备份数据,使用
- 注意事项:
- 恢复过程中要确保数据库环境与备份时的环境尽量一致,包括数据库版本、配置参数等,否则可能出现数据恢复异常。
- 恢复增量备份数据时,必须严格按照备份顺序进行,否则可能导致数据不一致。