Momentum for MySQL Utilities continues to build. I hosted a webinar recently about MySQL Utilities (available on-demand from the link below), which generated a lot of interest and some good questions.
With so many questions and ideas coming in I decided to create a blog of FAQs. I plan to add these to the MySQL documentation as well. Keep your ideas and questions coming!
I hope you find these questions enlightening. I have grouped them for easier reading. You can find the MySQL Utilities documentation using the link below.
Are these utilities present in the community version of MySQL?
They are included in the community edition of the MySQL Workbench product, which can be downloaded from the following link.
Should/can we run this on live data?
Yes. Naturally, you would want to test some operations before jumping directly into a production environment. For example, you may want to test any database migration, transformation, or similar massive change in a test environment.
Can we use the utilities in a production environment under the GPL license?
Yes. MySQL Utilities is part of MySQL Workbench so all such licenses apply accordingly.
Can the utilities be used with MyISAM or CSV?
Yes. There are no storage engine specific limitations in using the utilities. There are some features written specifically for InnoDB so those may not apply but in general no utility is storage engine specific. For example, the mysqldiskusage utility shows exact sizes for MyISAM and InnoDB files but uses estimated sizes for any other storage engine based on number of rows and row size.
Can I use MySQL Utilities on Linux?
Yes. MySQL Utilities runs on all platforms supported by MySQL Workbench.
Can the utilities be used on Windows?
Do the utilities work both for window-based and linux-based servers?
Yes! They work for any server hosting MySQL.
Do we have to install the utilities with rpm or can we use the tar ball extract and run from there?
MySQL Utilities is installed as part of MySQL Workbench. You can download and install Workbench using several platform-specific installers.
You can also branch and download MySQL Utilities from Launchpad. You can also build and install it from the source code you’ve downloaded using typical Python install steps (python ./setup.py install).
What's the link to download these utilities?
MySQL Utilities is part of MySQL Workbench. You can download MySQL Workbench from the following link.
Do the utilities lock tables while running?
Yes, but only for situations that require locks. The mysqldbexport utility also allows you to specify what type of lock to use:
no-locks = do not use any table locks
lock-all = use table locks but no transaction and no consistent read
snaphot (default) = consistent read using a single transaction.
Are there any utilities that can show DB locks (like which query is blocking which one)?
No, not currently but that is an excellent suggestion!
How fast is mysqldbcompare? Say a table with 10 million rows?
It is difficult to predict a precise estimate of run time based on number of rows. However, it is generally such that the more rows there are the longer the utility will run. The mysqldbcompare utility is used to produce a difference of two databases. It creates a difference between objects of the same name for either object definitions, data, or both. When comparing object definitions, the performance is very fast because there isn’t a lot of processing involved. When comparing data, the utility uses an algorithm to create checksums for each row in the table. During this phase, the tables are locked. Once that stage is done, the tables are unlocked and the algorithm begins to compact the checksums into chunks, which are later compared between the servers. If the checksums differ, the chunks are expanded and the differences calculated. Thus, for tables containing millions of rows the utility will take some time to complete. The best time to run this utility is during low usage periods such as times reserved for upgrades, backups, and similar operations.
How will running mysqldbcompare effect a production database?
If generating a difference for data, the utility will lock the tables long enough to calculate a checksum for each row. Depending on the number of rows this could be for a long time and in those cases you should run mysqldbcompare during low usage periods. The utility will use a consistent read to lock InnoDB tables but will issue table locks for non-InnoDB tables.
Will mysqldbcompare cause table locking on MyISAM table?
Yes. A table lock is issued during checksum creation.
What is the load going to be on the servers when mysqldbcompare runs?
The load on the server itself is minimal. There is moderate CPU usage during checksum creation but nothing that should cause a problem. The longest period of activity is when the table scans are executed for creating a checksum for each row.
Is mysqldbexport similar to mysqldump?
Yes, the mysqldbexport is designed to export data in a row-by-row or logical fashion. However, you can export data in CSV, TAB, Vertical formats as well as SQL statements using CREATE TABLE, INSERT, etc. making mysqldbexport more versatile than mysqldump. You would use mysqldbexport in situations where you need special machine or human readable output for operations like transforming the data or examining the structures in more detail – especially if you need a format other than SQL statements.
Are the high availability features available for version 5.5 or 5.6?
The general replication utilities such as mysqlrplcheck and mysqlreplicate will work with servers version 5.0 and later. The newest high availability feature, failover, in mysqlrpladmin and mysqlfailover work only for servers that support global transaction identifiers (GTIDs) which were added in version 5.6.5.
You can discover more about GTIDs from the following blog by Luis Soares.
Where do I get more info about mysqlrpladmin?
The online MySQL Workbench Manual has information about each utility. You can also use the --help option to show all options and their descriptions.
How can I use the utilities to test replication on a single host?
You can use mysqlserverclone to clone an existing, running instance of MySQL or clone from an installation (basedir), then mysqlreplicate to create the replication topology.
Is the replication failover feature only for version 5.6?
Yes. It requires support for global transaction identifiers, which were added in version 5.6.5. A developer milestone release of 5.6 is available for download.
(Select the Development Releases tab)
What features of mysqlrpladmin will work on version 5.5?
All of the features except slave election and failover.
Do you need to create a replication user on the slave site other than the master?
The mysqlreplicate utility provides an option to use a specific user on the master for replication or it will create a user by default. You can also request that a new user be created during the operation.