MySQL面试问题

时间:2008-09-15 09:58:36

标签: mysql

我被要求为需要企业级技能的角色筛选一些MySQL DBA / Developer职位的候选人。

我自己是一个SQL Server人员所以我知道从可扩展性/设计等角度来看我会想要什么,但是我应该问一些关于MySQL的具体内容吗?

我最好问他们关于MySQL的企业级功能,他们通常只在处理大型数据库时使用。需要将企业开发人员从家庭/小型网站中分离出来。

感谢。

3 个答案:

答案 0 :(得分:39)

虽然SQL Server和MySQL都是RDBM,但MySQL有许多独特的功能可以说明新手和专家之间的区别。

您的第一步应该是确保候选人习惯使用命令行,而不仅仅是GUI工具,例如phpMyAdmin。在访谈期间,尝试让候选人编写MySQL代码来创建数据库表或添加新索引。这些是非常基本的查询,但确切地说是GUI工具阻止新手掌握的类型。您可以与熟悉MySQL的人仔细检查答案。

候选人能否展示JOIN如何运作的知识?例如,尝试让候选者构造一个返回表1中所有行的查询,其中表2中不存在匹配的条目。答案应该包括LEFT JOIN。

让候选人讨论备份策略,以及每种策略的各种优缺点。候选人应该知道,除非所有表都是MyISAM,否则直接备份数据库文件不是一种有效的策略。候选人应该明确提到mysqldump作为备份的基石。更复杂的备份解决方案包括ibbackup / innobackup和LVM快照。理想情况下,候选人还应讨论备份如何影响性能(常见的解决方案是使用从服务器进行备份)。

候选人是否有复制经验?有哪些常见的复制配置和各自的各种优点?最常见的设置是主从设备,允许应用程序将SELECT查询卸载到从属服务器,同时使用从属设备进行备份以防止主服务器出现性能问题。另一种常见设置是master-master,主要好处是能够在不影响性能的情况下进行架构更改。确保候选人讨论常见问题,例如克隆从服务器(mysqldump + notation of the binlog position),使用负载均衡器或MySQL代理加载分发,resolving slave lag将更大的查询分成块,以及如何将奴隶提升为成为新的主人。

候选人如何解决性能问题?他们是否对底层操作系统和硬件有足够的了解,以诊断瓶颈是CPU绑定,IO绑定还是网络绑定?他们可以演示如何使用EXPLAIN来发现索引问题吗?他们是否提到慢查询日志或配置选项,如密钥缓冲区,tmp表大小,innodb缓冲池大小等?

候选人是否欣赏每个存储引擎的微妙之处? (MyISAM,InnoDB和MEMORY是主要的)。他们是否了解每个存储引擎如何优化查询以及如何处理锁定?至少,候选人应该提到MyISAM发出表级锁,而InnODB使用行级锁定。

对现场数据库进行架构更改最安全的方法是什么?候选人应该提到主 - 主复制,以及通过创建具有所需配置的新表并使用mysqldump或INSERT INTO ... SELECT后跟RENAME TABLE来避免ALTER TABLE的锁定和性能问题。

最后,专业人士唯一真正的衡量标准就是经验。如果候选人无法指出在高可用性环境中管理大型数据集的具体经验,他们可能无法在纯粹的智力水平上备份他们拥有的任何知识。

答案 1 :(得分:6)

我会问各种存储引擎之间的差异,它们的好处和缺点。

明确涵盖复制,并在使用具有自动增量键的表时深入研究复制的缺点。

如果他们还在和你在一起,那就问一下复制滞后,它的影响以及监控它的标准模式。

答案 2 :(得分:1)

我认为这取决于数据库类型:事务性还是数据仓库?

无论如何,对于所有类型,我都会询问特定于MySQL复制和群集,性能调优和监控概念。