| Bug #84221 | SIGSEGV in mysql_upgrade | ||
|---|---|---|---|
| Submitted: | 16 Dec 2016 0:45 | Modified: | 16 Dec 2016 13:00 |
| Reporter: | Anatoli · | Email Updates: | |
| Status: | Can't repeat | Impact on me: | |
| Category: | MySQL Server: Command-line Clients | Severity: | S1 (Critical) |
| Version: | 5.7.17 | OS: | Ubuntu (Ubuntu 14.04.5 LTS) |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | mysql_upgrade | ||
[16 Dec 2016 13:00]
MySQL Verification Team
I couldn't repeat on Fedora 23: [miguel@fedora23 mysql-5.7.17]$ cmake . -LH -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_unicode_ci -DENABLE_DOWNLOADS=OFF -DWITH_BOOST=../boost/boost_1_59_0/ -DWITH_DEBUG=1 -- Running cmake version 3.4.3 -- Found Git: /usr/bin/git (found version "2.5.0") -- Configuring with MAX_INDEXES = 64U -- Looking for SHM_HUGETLB -- Looking for SHM_HUGETLB - found -- Looking for sys/types.h <cut> -- Configuring done -- Generating done -- Build files have been written to: /home/miguel/mysql-5.7.17 -- Cache values [miguel@fedora23 mysql-5.7.17]$ make Scanning dependencies of target INFO_BIN [ 0%] Built target INFO_BIN Scanning dependencies of target INFO_SRC [ 0%] Built target INFO_SRC Scanning dependencies of target abi_check [ 0%] Built target abi_check Scanning dependencies of target zlib [ 0%] Building C object zlib/CMakeFiles/zlib.dir/adler32.c.o [ 0%] Building C object zlib/CMakeFiles/zlib.dir/compress.c.o <CUT> [100%] Built target mysqltest_embedded [100%] Building CXX object mysql-test/lib/My/SafeProcess/CMakeFiles/my_safe_process.dir/safe_process.cc.o [100%] Linking CXX executable my_safe_process [100%] Built target my_safe_process [miguel@fedora23 mysql-5.7.17]$ ./client/mysql_upgrade Checking if update is needed. Checking server version. Running queries to upgrade MySQL server. Checking system database. mysql.columns_priv OK mysql.db OK mysql.engine_cost OK mysql.event OK mysql.func OK mysql.general_log OK mysql.gtid_executed OK mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK mysql.help_topic OK mysql.innodb_index_stats OK mysql.innodb_table_stats OK mysql.ndb_binlog_index OK mysql.plugin OK mysql.proc OK mysql.procs_priv OK mysql.proxies_priv OK mysql.server_cost OK mysql.servers OK mysql.slave_master_info OK mysql.slave_relay_log_info OK mysql.slave_worker_info OK mysql.slow_log OK mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK The sys schema is already up to date (version 1.5.1). Checking databases. sys.sys_config OK Upgrade process completed successfully. Checking if update is needed. [miguel@fedora23 5.7]$ bin/mysql_upgrade mysql_upgrade: Got error: 1045: Access denied for user 'miguel'@'localhost' (using password: NO) while connecting to the MySQL server Upgrade process encountered error and will not continue. [miguel@fedora23 5.7]$ bin/mysql_upgrade -uroot Checking if update is needed. This installation of MySQL is already upgraded to 5.7.17, use --force if you still need to run mysql_upgrade [miguel@fedora23 5.7]$ bin/mysql_upgrade -uroot --force Checking server version. Running queries to upgrade MySQL server. Checking system database. mysql.columns_priv OK mysql.db OK mysql.engine_cost OK mysql.event OK mysql.func OK mysql.general_log OK mysql.gtid_executed OK mysql.help_category OK mysql.help_keyword OK mysql.help_relation OK mysql.help_topic OK mysql.innodb_index_stats OK mysql.innodb_table_stats OK mysql.ndb_binlog_index OK mysql.plugin OK mysql.proc OK mysql.procs_priv OK mysql.proxies_priv OK mysql.server_cost OK mysql.servers OK mysql.slave_master_info OK mysql.slave_relay_log_info OK mysql.slave_worker_info OK mysql.slow_log OK mysql.tables_priv OK mysql.time_zone OK mysql.time_zone_leap_second OK mysql.time_zone_name OK mysql.time_zone_transition OK mysql.time_zone_transition_type OK mysql.user OK The sys schema is already up to date (version 1.5.1). Checking databases. sys.sys_config OK Upgrade process completed successfully.
[21 Jul 2017 12:15]
Mr Jay
I can confirm that mysql_upgrade segfaults in multiple 5.7-versions. Last version tested is 5.7.19 (ndbcluster 7.5.7) Standard 64bit linux.

Description: Hi, When compiling all mysql binaries from sources (5.7.17), I'm getting a SEGFAULT in mysql_upgrade just before it tries to connect to the server if I pass a -DDEFAULT_COLLATION=utf8_unicode_ci option to cmake. If I don't specify this argument, or specify another collation (e.g. utf8_general_ci) everything works fine. Here is how I compile it: $ mkdir bld && cd bld $ cmake .. -LH \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_unicode_ci \ \ -DENABLE_DOWNLOADS=OFF \ -DWITH_BOOST=../boost/boost_1_59_0/ \ \ -DWITH_DEBUG=1 $ make $ ./client/mysql_upgrade Checking if update is needed. Checking server version. Running queries to upgrade MySQL server. Segmentation fault Here is a backtrace: $ gdb ./client/mysql_upgrade (gdb) r Starting program: /home/user1/build/mysql-5.7.17/bld/client/mysql_upgrade [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Checking if update is needed. Checking server version. Running queries to upgrade MySQL server. Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () (gdb) bt #0 0x0000000000000000 in ?? () #1 0x00000000004eae85 in Mysql::Tools::Base::Mysql_query_runner::get_message_type_from_severity (this=0x7fffffffe560, severity="Warning") at /home/user1/build/mysql-5.7.17/client/base/mysql_query_runner.cc:248 #2 0x00000000004eaa38 in Mysql::Tools::Base::Mysql_query_runner::run_query_unguarded (this=0x7fffffffe560, query="set sql_mode='';\n") at /home/user1/build/mysql-5.7.17/client/base/mysql_query_runner.cc:201 #3 0x00000000004ea637 in Mysql::Tools::Base::Mysql_query_runner::run_query (this=0x7fffffffe560, query="set sql_mode='';\n") at /home/user1/build/mysql-5.7.17/client/base/mysql_query_runner.cc:118 #4 0x00000000004086a3 in Mysql::Tools::Upgrade::Program::run_sql_fix_privilege_tables (this=0xaf3e80 <program>) at /home/user1/build/mysql-5.7.17/client/upgrade/program.cc:610 #5 0x0000000000406462 in Mysql::Tools::Upgrade::Program::execute (this=0xaf3e80 <program>, positional_options=std::vector of length 0, capacity 0) at /home/user1/build/mysql-5.7.17/client/upgrade/program.cc:209 #6 0x00000000004e7520 in Mysql::Tools::Base::Abstract_program::run (this=0xaf3e80 <program>, argc=0, argv=0xb034d0) at /home/user1/build/mysql-5.7.17/client/base/abstract_program.cc:98 #7 0x0000000000405c2c in main (argc=1, argv=0x7fffffffeb68) at /home/user1/build/mysql-5.7.17/client/upgrade/program.cc:987 # Debugging a working build (with -DDEFAULT_COLLATION=utf8_general_ci): (gdb) l 248 243 uint dummy_errors; 244 severity_string.copy(Message_data::message_type_strings[i], 245 strlen(Message_data::message_type_strings[i]), 246 &my_charset_latin1, m_connection->charset, &dummy_errors); 247 248 if (my_strcasecmp(m_connection->charset, severity.c_str(), 249 severity_string.c_ptr_safe()) == 0) 250 { 251 return (Message_type)i; 252 } (gdb) p m_connection->charset $12 = (charset_info_st *) 0xa91020 <my_charset_utf8_general_ci> (gdb) p severity $13 = "Warning" (gdb) p severity_string No symbol "severity_string" in current context. # Debugging a SEGFAULTing build (with -DDEFAULT_COLLATION=utf8_unicode_ci): (gdb) l 248 243 uint dummy_errors; 244 severity_string.copy(Message_data::message_type_strings[i], 245 strlen(Message_data::message_type_strings[i]), 246 &my_charset_latin1, m_connection->charset, &dummy_errors); 247 248 if (my_strcasecmp(m_connection->charset, severity.c_str(), 249 severity_string.c_ptr_safe()) == 0) 250 { 251 return (Message_type)i; 252 } (gdb) p m_connection->charset $1 = (charset_info_st *) 0xae3200 <my_charset_utf8_unicode_ci> (gdb) p severity $2 = "Warning" (gdb) p severity_string $3 = {m_ptr = 0xb116d0 "INFORMATION", m_length = 11, m_charset = 0xae3200 <my_charset_utf8_unicode_ci>, m_alloced_length = 40, m_is_alloced = true} All other binaries (both client and server) work fine (no SEGFAULTs detected yet). Please let me know if additional info is needed. Regards, Aantoli How to repeat: From the sources dir: $ mkdir bld && cd bld $ cmake .. -LH \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_unicode_ci \ \ -DENABLE_DOWNLOADS=OFF \ -DWITH_BOOST=../boost/boost_1_59_0/ \ \ -DWITH_DEBUG=1 $ make $ ./client/mysql_upgrade Checking if update is needed. Checking server version. Running queries to upgrade MySQL server. Segmentation fault