Bug #67319 MySQL 5.6 crashes with data files derived from MySQL 5.1
Submitted: 22 Oct 2012 8:38 Modified: 16 Jan 2013 19:47
Reporter: Mikiya Okuno Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Installing Severity:S3 (Non-critical)
Version:5.6.7 OS:Any
Assigned to: CPU Architecture:Any

[22 Oct 2012 8:38] Mikiya Okuno
Description:
MySQL 5.6.7 crashes with SIGSEGV when upgrading from 5.1 directly. This is not an officially supported operation, but SIGSEGV is too bad. Stacktrace is like below:

/home/mikiya/opt/mysql/5.6.7/bin/mysqld(my_print_stacktrace+0x2e)[0x8a60fe]
/home/mikiya/opt/mysql/5.6.7/bin/mysqld(handle_fatal_signal+0x377)[0x64d647]
/lib/x86_64-linux-gnu/libpthread.so.0(+0xfcb0)[0x7f83a8811cb0]
/home/mikiya/opt/mysql/5.6.7/bin/mysqld(_Z9get_fieldP11st_mem_rootP5Field+0x49)[0x746979]
/home/mikiya/opt/mysql/5.6.7/bin/mysqld(_Z10acl_reloadP3THD+0x116d)[0x66313d]
/home/mikiya/opt/mysql/5.6.7/bin/mysqld(_Z8acl_initb+0x14d)[0x663bbd]
/home/mikiya/opt/mysql/5.6.7/bin/mysqld(_Z11mysqld_mainiPPc+0x1692)[0x597ba2]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7f83a7c5276d]
/home/mikiya/opt/mysql/5.6.7/bin/mysqld[0x58cd7d]

The server crashes when reading the acl table. To workaround this problem, specify --skip-grant-tables option, then execute mysql_upgrade.

How to repeat:
Upgrade from MySQL 5.1 to 5.6 with physical data files.

Suggested fix:
In the following code from sql_acl.cc...

        if (table->s->fields >= 36)
        {
          /* Starting from 5.0.3 we have max_user_connections field */
          ptr= get_field(thd->mem_root,
                         table->field[MYSQL_USER_FIELD_MAX_USER_CONNECTIONS]);
          user.user_resource.user_conn= ptr ? atoi(ptr) : 0;
        }

There is no field at MYSQL_USER_FIELD_MAX_USER_CONNECTIONS'th position, because Create_tablespace_priv was added in 5.5. Please do not specify MYSQL_USER_FIELD_MAX_USER_CONNECTIONS directly there, and make it conditional.
[16 Jan 2013 19:47] Paul DuBois
Noted in 5.6.10, 5.7.1 changelogs.

Attempting to perform an in-place upgrade from MySQL 5.1 to 5.6
causes the server to exit due to a mismatch between the privilege
structures in the two series. (This is not a supported operation, but
the server should not exit ungracefully.)