十个非常棒的 MySQL DBA 面试题(附答案)

时间:2021-09-29 01:51:52

十个非常棒的 MySQL DBA 面试题(附答案)

DBA 是数据可用性、性能和安全性的重要组成部分。获得优秀的 DBA 是任何公司可以做的最重要的事情之一,以确保他们的数据库操作继续正常工作。那么如何找到优秀的 DBA 呢?

在这篇文章中,我将向您展示我在面试 DBA 候选人时喜欢问的一些问题。

性能至关重要,那么这位候选人是否知道MySQL如何调整和优化?

1、首先:您会推荐哪些最常见的性能优化?

这是关于概念性知识的,通常是一个开放式问题。他们是否正在考虑扔硬件和增加资源?这是最简单的解决方案,但通常不是正确的解决方案。如果数据库设计不佳,性能通常会受到限制。他们会谈论这个吗?我希望人们讨论最佳选择,并决定哪些变量或修复最有意义。我在客户那里看到的简单答案是调整像“innodb_dedicated_server”这样的单个变量,这当然有帮助,因为它是几种配置的快捷方式,但如果你不正确理解它可能会导致一些不希望的伤害(比如很多不需要的重做日志文件)。我正在寻找人们了解快速问题和长期问题之间的区别。

2、在 IO 绑定的系统中,为了更好地利用 IO,您需要哪些主要调优参数?

磁盘 IO 是任何数据库中最慢的部分,任何 DBA 都必须了解这个概念。简单的答案总是添加更多内存,但这不仅仅是关于缓冲池。候选人是否了解影响 IO 的其他变量和数据库内部结构?例如,他们是否了解重做日志、刷新、io_capacity 等,他们可以了解他们所做的事情吗?这些变量的组合将减少 IO 依赖,同时延长 SSD 寿命。

3、你会接到电话说数据库速度很慢。你是做什么的?你如何识别一个慢查询?优化查询的最佳策略是什么?

查询优化是每个 DBA 都必须知道的活动。即使数据库在 99% 的情况下看似快速且高性能,一个恶意或慢查询也可能导致整个应用程序瘫痪。在这里,我们正在寻找不仅找到慢查询而且调整和修复它的过程。我们需要了解导致查询速度慢的原因是什么,例如索引、SQL 编写技巧不佳等。幸运的是,我们有工具可以识别坏人并帮助优化过程。候选人决定使用的工具没有他们经历的过程那么重要。我们正在寻找诸如识别缺失索引、错误主键、超大表问题、模式设计等的能力。

4、假设您需要将 MySQL 服务器的流量增加 10 倍。您的可扩展性策略是什么?读取的缩放比例与写入的缩放比例相同吗?

这里有许多可扩展性策略。您不仅要寻找具体的技术或流程,还要寻找它们背后的原因。需要讨论和深入研究的关键事项:添加副本以卸载流量、设置负载均衡器、增加可用硬件、分片等。所有这些都是有效的策略。真正的问题是候选人是否理解它们以及何时应该使用和不应该使用它们?

每个 DBA 都必须构建并确保他们的数据库系统在需要时可用。因此,了解数据库可用性策略至关重要。必须提出问题来衡量他们的理解:

5、您如何解释异步复制滞后?为什么会有问题呢?你会如何解决它呢?

异步复制仍然是一个非常重要的话题,虽然性能随着 MySQL 的每个版本和修改而不断提高,但我仍然在帮助很多客户解决复制设置和延迟的问题。许多公司使用副本进行报告、备份和高可用性,因为我们希望我们的副本尽可能保持最新。好消息是,这也为候选人提供了另一个跳出框框思考的机会,因为异步复制延迟可能会受到数据库设计问题的显著影响,例如没有主键、长时间运行的查询、选择更新等。

6、他们能解释异步复制和同步复制之间的区别吗?他们什么时候会选择一个而不是另一个?

当然,您可以在 MySQL 中使用几种不同类型的异步复制(MySQL GTID、MariaDB GTID、Tungsten Replicator)和同步复制(Percona XtraDB Cluster、MySQL Group Replication),因此了解他们的一般知识有助于评估他们的技能。虽然这里没有 100% 正确的答案,但重要的是要了解选择一种解决方案而不是另一种解决方案的决策驱动因素是什么,例如性能、一致性、可用性等。

7、基于 Galera 的解决方案最少需要多少个节点?添加更多节点的利弊是什么?

MySQL 领域有两种主要的集群解决方案。基于 Galera 的复制,如 Percona XtraDB 集群和基于组复制的集群,如 InnoDB 集群。这个问题的关键是要知道 Galera 是为一致性和可用性而设计的,而不是为编写可伸缩性而设计的。理解这些差异非常重要,因为“更多的写入器就更多的写入”的想法是很常见的,就好像添加更多写入器节点可能会增加集群的写入容量。

当然,您需要确保候选人不仅知道如何排除性能故障和设置高可用性,还需要了解一些基本的数据库操作和技术。至少询问一个关于安全、备份和主机(云或非云)的问题,是确保您了解基本知识的好方法。

8、请描述您推荐的备份策略。你会使用什么工具以及如何使用?

了解备份的重要性很重要。我正在寻找能够引导我了解他们的经历并告诉我他们认为什么是好的和安全的备份策略的人。当他们说话时,我会问一些问题,看看他们是否了解他们所运行的设置的限制或好处。我希望他们能够掌握不同的备份选项(物理的、逻辑的)以及可以推荐的备份策略(每日、每周、每月、完整、增量等)。当然,我对人们如何确保他们的备份“良好”非常感兴趣。不是每个人都认为恢复测试应该被视为备份策略的一部分。

9、部署 MySQL 时您会遵循哪些基本安全策略?

这一次也还是没有标准的答案,但毫无疑问,DBA 必须保护公司的数据。需要注意的一些事项:强密码、只能从 localhost 进行 root 访问、删除没有密码的用户、将 SUPER priv 删除给非管理员用户、限制用户访问他们自己的数据库/表、加密数据等。

10、请解释 RDS MySQL 和 Aurora 之间的主要区别。您何时会推荐一种解决方案而不是另一种?

毫无疑问,云已经改变了我们运行数据库的方式。候选人是否对 AWS 的前两个 MySQL 选项之间的差异有基本的了解?他们是不同的,他们知道吗?了解优点和缺点是至关重要的。虽然 RDS 提供了一种简单的方法来设置开箱即用的异步复制,但它需要一些操作活动来确保环境健康,即数据一致性检查、在主故障时处理故障转移等。另一方面, Aurora 通过以更高的成本和一些额外的写入开销确保一致性和可用性来解决操作部分,因此它可能无法在高流量环境中很好地扩展。

原文地址:https://mp.weixin.qq.com/s/8QLpTfunWNFw57OmNq-_hA