Spring cleaning: Useless clients and programs

Stewart Smith recently questioned the current relevance of the MERGE storage engine, and it prompted me to finish a similar recent exercise I’ve been thinking about related to MySQL clients (UPDATE: and programs).  This originally came up when I listed the contents of the MySQL bin directory:

D:\mysql-advanced-5.6.11-win32>dir bin\*.exe
Volume in drive D is Data
Volume Serial Number is 4015-B2FF

Directory of D:\mysql-advanced-5.6.11-win32\bin

04/05/2013  06:52 AM           123,392 echo.exe
04/05/2013  06:53 AM         4,696,064 innochecksum.exe
04/05/2013  06:54 AM         5,084,672 myisamchk.exe
04/05/2013  06:54 AM         4,084,736 myisamlog.exe
04/05/2013  06:54 AM         4,998,144 myisampack.exe
04/05/2013  06:54 AM         4,969,984 myisam_ftdump.exe
04/05/2013  06:56 AM         5,525,504 mysql.exe
04/05/2013  06:56 AM         5,445,120 mysqladmin.exe
04/05/2013  06:57 AM         5,586,944 mysqlbinlog.exe
04/05/2013  06:56 AM         5,443,072 mysqlcheck.exe
04/05/2013  06:52 AM        28,397,056 mysqld-debug.exe
04/05/2013  06:58 AM        11,696,640 mysqld.exe
04/05/2013  06:57 AM         5,507,072 mysqldump.exe
04/05/2013  06:56 AM         5,435,392 mysqlimport.exe
04/05/2013  06:56 AM         5,436,928 mysqlshow.exe
04/05/2013  06:56 AM         5,458,432 mysqlslap.exe
04/05/2013  06:56 AM         5,687,296 mysqltest.exe
04/05/2013  06:57 AM        12,373,504 mysqltest_embedded.exe
04/05/2013  06:56 AM         5,888,512 mysql_client_test.exe
04/05/2013  06:57 AM        12,620,800 mysql_client_test_embedded.exe
04/05/2013  06:56 AM         4,704,256 mysql_config_editor.exe
04/05/2013  06:57 AM        12,241,408 mysql_embedded.exe
04/05/2013  06:56 AM         4,701,696 mysql_plugin.exe
04/05/2013  06:53 AM         3,791,360 mysql_tzinfo_to_sql.exe
04/05/2013  06:56 AM         4,836,864 mysql_upgrade.exe
04/05/2013  06:53 AM         4,687,360 my_print_defaults.exe
04/05/2013  06:54 AM         4,800,000 perror.exe
04/05/2013  06:53 AM         3,804,160 replace.exe
04/05/2013  06:53 AM         4,686,336 resolveip.exe

It was a strange epiphany to realize that we were distributing clients (and programs) of which I had never heard.  Maybe you have an encyclopedic knowledge of all MySQL clients (and programs).  If so, great – maybe you can answer some of my questions!  My quest for more information about the clients (and programs) I wasn’t familiar with naturally led to our excellent documentation, where I found more “client programs” listed that raised my eyebrows.  Below I’ll make some observations and suggestions on what ought to be done with these clients (and programs) – feel free to make comments here, or on any associated bug reports:

mysqlaccess

Seemingly last really updated in 2000 (during 3.21 days), mysqlaccess is (“was” is probably better) a tool for inspecting and auditing privileges.  It hardly works (only on Linux, after giving it a path to mysqlbinlog(!) because it doesn’t look in PATH), it has no concept of post-3.21 developments like new privileges, schema objects like VIEWs or STORED ROUTINEs, authentication plugins, expired passwords, proxy users, etc.  It seems useless to me, and I’ve opened bug 69012 to deprecate it.  It appears to be such old Perl, it doesn’t even use DBI.

myisam_ftdump

More a script than a client, myisam_ftdump is something I’ve never seen used during my 6+ years with the MySQL Support team.  In fact, I didn’t even know it existed.  People may or may not migrate their fulltext use cases from MyISAM to InnoDB now that MySQL 5.6 includes fulltext search capabilities in InnoDB, but has anybody ever used this client?

myisamlog

Raise your hand if you’ve ever heard of myisamlog, much less seen output from this client program.  I know at least one person whose hand is up right now – Daniel van Eeden recently reported what’s widely believed to be the first ever bug report about this client.  If you’ve got a need for this client, make sure to note it on the bug report, because we’re still looking for a reason to keep it.

mysql_convert_table_format

Another Perl script, but a bit more recent than mysqlaccess (this even uses DBI).  The purpose of mysql_convert_table_format is to convert tables matching the selection criteria (it uses SHOW TABLES LIKE) from one storage engine to another.  Perhaps a useful script before INFORMATION_SCHEMA made it easy to produce arbitrary SQL commands which could be piped to another mysql client:

SELECT CONCAT(‘ALTER TABLE `’, table_schema, ‘`.`’, table_name, ‘` ENGINE = InnoDB;’) AS `#sql`
FROM information_schema.tables
WHERE table_schema LIKE ‘test’;

I suggest deprecation in bug 69014.

mysql_fix_extensions

I get that it’s possible that many ages ago, migrating data files from a file system that was case-insensitive to one that is case-sensitive would cause problems.  And theoretically, that could still be an issue, as mysqld on linux still won’t recognize .FRM files and friends if they have lower-case file extensions (what mysql_fix_extensions deals with).  But Windows builds have created these files with extensions using the “canonical form” for ages now – what ancient version of MySQL do you need to be running to create lower-case .frm files?  I still haven’t figured this out.  It also happens to be one of the most simple Perl scripts ever, with a total of 5 lines of code.  I propose deprecation in bug 69015.

mysql_find_rows

Quoting the mysql_find_rows Perl script:

This is useful to find things in a MySQL update log.

Quoting the MySQL 5.0 reference manual:

The binary log has replaced the old update log, which is no longer available as of MySQL 5.0.

Yeah, I’m going with it being time to deprecate this script (bug 27482 seems to agree).

mysql_setpermission

An interactive way to manage user permissions for MySQL, mysql_setpermission is another Perl script which hasn’t kept with the times.  Some operations use hard-coded privileges that don’t include more recent additions (like EXECUTE); it will cause problems for SHA-256 user accounts; it has no concept of authentication plugins or proxy users.  People looking for an interactive interface for managing user permissions should look at MySQL Workbench.  I’m recommending deprecation and removal in bug 69016.

mysqlbug

The manual claims that mysqlbug is obsolete in the 5.5 and 5.6 manuals, but I still see it around.  Bug 43870 should help eliminate that.

msql2mysql

I’ve got the book to prove I started using MySQL back in the days when mSQL was still something people knew about.  But I wonder when the last time was somebody migrated from mSQL to MySQL?  And did they really use this tool?  I vote to deprecate (bug 69017).

echo

This one’s not documented, as far as I can tell.  There’s also no help, but then again, maybe it is displaying the help, in a juvenile, repeat-everything-I-say way:

D:\mysql-advanced-5.6.11-win32>bin\echo -?
-?

D:\mysql-advanced-5.6.11-win32>bin\echo –help
–help

I have to wonder why this is distributed with the MySQL server.  If it’s needed for plumbing somewhere, OK, but does it really need to be distributed?  If so, can we pull it out of the server packages and put it somewhere else?  Bug 69018 aims to answer those questions.

Conclusion

There are a couple more clients I’m not a fan of (like replace and resolveip), but know there are specific use cases.  I question whether they should be part of the server package or not, but don’t see much harm in keeping them.  It’s probably been years since either was last modified (I get an error trying to run replace on Windows XP).

If you have any particular affinity for any of the above client programs/scripts, or suggestions for other deprecation candidates, please comment here or via bugs.mysql.com.

 

 

9 thoughts on “Spring cleaning: Useless clients and programs

  1. Actually myisam_ftdump is useful tool for those who need to know full-text index statistics of MyISAM table. InnoDB has similar information in its Information Schema tables, but its full-text support is too new to consider MyISAM’s full-text obsolete.

    Regarding to user base: I saw few bug reports about myisam_ftdump or where people used myisam_ftdump and I also saw few Russian blog and forum posts with examples of myisam_ftdump

    1. Hi Sveta,

      Thanks for the feedback! You might notice that myisam_ftdump is the only client listed I didn’t create (or find) a bug report arguing for deprecation. I understand the theoretical use case for myisam_ftdump, but as I noted, I’ve never once seen it used in practice. If there’s a handful of people who find this useful, great.

  2. I find this misleading to call those things “clients”. Because they are not the server executables, this does not automatically qualify any script or executable as client. Like, echo.exe is not a MySQL client, nor myisamlog or myisamchk or mysqlbug, or whatever else administrative and utility programs are supplied with installation.

    1. Hi Wlad,

      Hmm, OK – that’s a fair enough point (even if I think characterizing it as “misleading” may be an amusingly similar example of poor word choices). I’ve updated the title, initial comments and the one use of “client” which I think was inappropriate. Of course, a discussion on whether or not these programs/scripts can be classified as “clients” or not obscured the feedback I’m really looking for: whether anybody finds these things useful.

  3. No, those programs and scripts are not useful, apart from myisam_xxx (those do some real work).

    If you’re into software archeology, echo.exe is there because someone build team was insisting that “exec echo” in MTR is correct way to output on stdout (rather than to implement a MTR-builtin command with this functionality, which would be more logical to me).

    They needed own close of echo , since cmd.exe builtin echo handles quotes differently from Unix shell counterpart.
    They put into package because buildteam also wanted ZIP package to pass MTR tests, or something like that.

    1. Thanks Wlad – so of the list above, myisam_ftdump is the only one you’d like to see kept? I just want to make sure you don’t know of a need for myisamlog. The information about the origin of echo.exe is interesting, and helps identify those who might potentially have an interest in keeping it. I appreciate it!

  4. echo needs to be included for tests, so that they can do

    –exec echo “some text” > some_file

    , in a platform independent manner. As long as tests and the test client mysqltest are included, so must echo.

  5. This confused the hell out of me:

    More a script than a client, myisam_ftdump is something I’ve never seen used during my 6+ years with the MySQL Support team. … It appears to be such old Perl, it doesn’t even use DBI.

    Where does that come from?

    As far as I know, myisam_ftdump always was a C program. And in 5.6 it still is. May be that’s why it is not using DBI.

    1. Hi Sergei – thanks for noticing my mistake! I’ve corrected my post to move the statement about Perl and DBI to the section on mysqlaccess, where it was intended (and applicable). As you note, myisam_ftdump is a compiled program.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.