<p>I've been asked to screen some candidates for a MySQL DBA / Developer position for a role that requires an enterprise level skill set.</p>

<p>I myself am a SQL Server person so I know what I would be looking for from that point of view with regards to scalability / design etc but is there anything specific I should be asking with regards to MySQL?</p>

<p>I would ideally like to ask them about enterprise level features of MySQL that they would typically only use when working on a big database. Need to separate out the enterprise developers from the home / small website kind of guys.</p>

<p>Thanks.</p>

[{'answer_id': 62078, 'author': 'Vinko Vrsalovic', 'author_id': 5190, 'author_profile': 'https://Stackoverflow.com/users/5190', 'pm_score': 2, 'selected': False, 'text': "<p>I think it would depend on the database type: transactional or data warehouse?</p>\n\n<p>Anyhow, for all types I'd ask about specific to MySQL replication and clustering, performance tuning and monitorization concepts.</p>\n"}, {'answer_id': 62089, 'author': 'Dave Cheney', 'author_id': 6449, 'author_profile': 'https://Stackoverflow.com/users/6449', 'pm_score': 3, 'selected': False, 'text': "<p>I'd ask about the differences between the the various storage engines, their perceived benefits and drawbacks. </p>\n\n<p>Defiantly cover replication, and dig into the drawbacks of replication, esp when using tables with auto increment keys.</p>\n\n<p>If they are still with you then ask about replication lag, it's effects and standard patterns for monitoring it.</p>\n"}, {'answer_id': 64844, 'author': 'giltotherescue', 'author_id': 8215, 'author_profile': 'https://Stackoverflow.com/users/8215', 'pm_score': 6, 'selected': True, 'text': '<p>Although SQL Server and MySQL are both RDBMs, MySQL has many unique features that can illustrate the difference between novice and expert.</p>\n\n<p>Your first step should be to ensure that the candidate is comfortable using the command line, not just GUI tools such as phpMyAdmin. During the interview, try asking the candidate to write MySQL code to create a database table or add a new index. These are very basic queries, but exactly the type that GUI tools prevent novices from mastering. You can double-check the answers with someone who is more familiar with MySQL.</p>\n\n<p>Can the candidate demonstrate knowledge of how JOINs work? For example, try asking the candidate to construct a query that returns all rows from Table One where no matching entries exist in Table Two. The answer should involve a LEFT JOIN.</p>\n\n<p>Ask the candidate to discuss backup strategies, and the various strengths and weaknesses of each. The candidate should know that backing up the database files directly is not an effective strategy unless all the tables are MyISAM. The candidate should definitely mention mysqldump as a cornerstone for backups. More sophisticated backup solutions include ibbackup/innobackup and LVM snapshots. Ideally, the candidate should also discuss how backups can affect performance (a common solution is to use a slave server for taking backups).</p>\n\n<p>Does the candidate have experience with replication? What are some of the common replication configurations and the various advantages of each? The most common setup is master-slave, allowing the application to offload SELECT queries to slave servers, along with taking backups using a slave to prevent performance issues on the master. Another common setup is master-master, the main benefit being the ability to make schema changes without impacting performance. Make sure the candidate discusses common issues such as cloning a slave server (<a href="http://dev.mysql.com/doc/refman/5.0/en/mysqldump.html#option_mysqldump_master-data" rel="noreferrer">mysqldump + notation of the binlog position</a>), load distribution using a load balancer or MySQL proxy, <a href="http://www.mysqlperformanceblog.com/2007/10/12/managing-slave-lag-with-mysql-replication/" rel="noreferrer">resolving slave lag</a> by breaking larger queries into chunks, and how to promote a slave to become a new master.</p>\n\n<p>How would the candidate troubleshoot performance issues? Do they have sufficient knowledge of the underlying operating system and hardware to diagnose whether a bottleneck is CPU bound, IO bound, or network bound? Can they demonstrate how to use <a href="http://www.devshed.com/c/a/MySQL/Analyzing-Queries-for-Speed-with-EXPLAIN/" rel="noreferrer">EXPLAIN</a> to discover indexing problems? Do they mention the slow query log or configuration options such as the key buffer, tmp table size, innodb buffer pool size, etc?</p>\n\n<p>Does the candidate appreciate the subtleties of each storage engine? (MyISAM, InnoDB, and MEMORY are the main ones).  Do they understand how each storage engine optimizes queries, and how locking is handled? At the least, the candidate should mention that MyISAM issues a table-level lock whereas InnODB uses row-level locking.</p>\n\n<p>What is the safest way to make schema changes to a live database? The candidate should mention master-master replication, as well as avoiding the locking and performance issues of ALTER TABLE by creating a new table with the desired configuration and using mysqldump or INSERT INTO ... SELECT followed by RENAME TABLE.</p>\n\n<p>Lastly, the only true measurement of a pro is experience. If the candidate cannot point to specific experience managing large data sets in a high availability environment, they might not be able to back up any knowledge they possess on a purely intellectual level.</p>\n'}]
['https://Stackoverflow.com/questions/62069', 'https://Stackoverflow.com', 'https://Stackoverflow.com/users/942/']