MySQL面试问题
我被要求筛选一些需要企业级技能的职位的MySQL DBA /开发人员职位的候选人。
我本人是一名SQL Server专家,所以我知道从可伸缩性/设计等方面来看,我会寻找什么,但是关于MySQL我有什么要问的具体问题吗?
理想情况下,我想问他们关于MySQL的企业级功能的信息,这些功能通常仅在处理大型数据库时才使用。需要将企业开发人员从家庭/小型网站中分离出来。
谢谢。
解决方案
回答
我认为这取决于数据库类型:事务性还是数据仓库?
无论如何,对于所有类型,我都会询问特定于MySQL复制和集群,性能调整和监视概念的信息。
回答
我想问一下各种存储引擎之间的区别,它们的优缺点。
严格介绍复制,并深入研究复制的缺点,尤其是在使用带有自动增量键的表时。
如果他们仍然在我们身边,请询问复制延迟,它是监视复制延迟的影响和标准模式。
回答
尽管SQL Server和MySQL都是RDBM,但是MySQL具有许多独特的功能,可以说明新手和专家之间的区别。
第一步应该是确保应聘者能够舒适地使用命令行,而不仅仅是phpMyAdmin之类的GUI工具。在面试过程中,尝试要求应聘者编写MySQL代码以创建数据库表或者添加新索引。这些是非常基本的查询,但是正是GUI工具阻止新手掌握的类型。我们可以与更熟悉MySQL的人一起仔细检查答案。
候选人可以证明对JOIN如何工作的知识吗?例如,尝试让候选人构造一个查询,该查询返回表一中的所有行,而表二中没有匹配的条目。答案应包括"左联接"。
请考生讨论备用策略,以及每种策略的优缺点。候选人应该知道,除非所有表都是MyISAM,否则直接备份数据库文件不是有效的策略。候选人绝对应该提到mysqldump作为备份的基石。更复杂的备份解决方案包括ibbackup / innobackup和LVM快照。理想情况下,候选人还应该讨论备份如何影响性能(常见的解决方案是使用从属服务器进行备份)。
候选人有复制经验吗?有哪些常见的复制配置以及每种复制的各种优点?最常见的设置是主从服务器,允许应用程序将SELECT查询卸载到从服务器,同时使用从服务器进行备份以防止主服务器出现性能问题。另一个常见的设置是master-master,主要好处是可以在不影响性能的情况下进行模式更改。确保应聘者讨论常见问题,例如克隆从属服务器(mysqldump + binlog位置的表示法),使用负载平衡器或者MySQL代理进行负载分配,通过将较大的查询分成多个块来解决从属滞后以及如何将从属提升为成为新主人。
候选人将如何解决性能问题?他们是否对底层操作系统和硬件有足够的了解,以诊断瓶颈是CPU约束,IO约束还是网络约束?他们可以演示如何使用EXPLAIN发现索引问题吗?他们是否提到慢查询日志或者配置选项,例如键缓冲区,tmp表大小,innodb缓冲池大小等?
候选人是否欣赏每个存储引擎的精妙之处? (主要是MyISAM,InnoDB和MEMORY)。他们是否了解每个存储引擎如何优化查询以及如何处理锁定?至少,应聘者应该提到MyISAM发出表级锁定,而InnODB使用行级锁定。
对活动数据库进行架构更改的最安全方法是什么?候选人应提及主-主复制,以及通过使用所需配置创建新表并使用mysqldump或者INSERT INTO ... SELECT后跟RENAME TABLE来避免ALTER TABLE的锁定和性能问题。
最后,对职业者唯一真正的衡量标准就是经验。如果候选人不能指出在高可用性环境中管理大型数据集的特定经验,则他们可能无法在纯知识水平上备份他们拥有的任何知识。