Testing MySQL FULLTEXT Indexes in InnoDB Using Pt-upgrade
As I prepare to convert some MySQL tables with FULLTEXT indexes from MyISAM to InnoDB I want to verify that running a standard production query set against the tables will return the same results with InnoDB that it did with MyISAM. Since I read Matt Lord’s blog post about the document relevancy rankings used for InnoDB full-text searches I knew to expect some differences when sorting by relevancy, so I want to focus on getting the same set of rows back, mostly ignoring the order in which the rows are returned.
Percona toolkit has a tool called pt-upgrade that works well for this purpose. I used 2 test servers with a copy of my production database. On one of the servers I left the tables in MyISAM, and on the other I converted the tables to InnoDB. I copied a slow query log from a production host running with
long_query_time=0 to get the query set for testing. Since I was only interested in queries on a few tables, rather than running the entire slow query log against the servers I just extracted the specific queries I was interested in and ran them as a raw log.
Here’s the command I used:
1 2 3 4 5
I used the
--read-only flag so
pt-upgrade would only execute
SELECT statements, and not any statements that modify data.
Since I extracted the SQL queries from the slow query log instead of using the full slow query log, I used
--type rawlog instead of the default of
For the two hosts I compared, testdb33 is using FULLTEXT on InnoDB, and testdb47 is using FULLTEXT on MyISAM.
When I ran
pt-upgrade it exposed several significant discrepancies. I will document those discrepancies and how I fixed them in a future post.