Bug #40281 partitioning the general log table crashes the server
| Submitted: | 23 Oct 2008 11:26 | Modified: | 7 Aug 2009 20:33 |
|---|---|---|---|
| Reporter: | Giuseppe Maxia | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Logging | Severity: | S2 (Serious) |
| Version: | 5.1.29 | OS: | MacOS |
| Assigned to: | Tatiana Azundris Nuernberg | CPU Architecture: | Any |
| Tags: | logging, partitioning, table logging | ||
[23 Oct 2008 11:41]
Jon Stephens
From http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations.html: Log tables. Beginning with MySQL 5.1.20, it is no longer possible to partition the log tables; beginning with that version, an ALTER TABLE ... PARTITION BY ... statement on such a table fails with an error. (Bug#27816) Any attempt to partition a log table should fail with an error.
[23 Oct 2008 11:46]
MySQL Verification Team
Thank you for the bug report. Stack trace: mysqld.exe!_NMSG_WRITE(int rterrnum=10) Line 195 C mysqld.exe!abort() Line 44 + 0x7 C mysqld.exe!_assert(const char * expr=0x00a756ec, const char * filename=0x00a756d8, unsigned int lineno=5287) Line 306 C mysqld.exe!ha_partition::extra(ha_extra_function operation=HA_EXTRA_MARK_AS_LOG_TABLE) Line 5287 + 0x18 C++ mysqld.exe!Log_to_csv_event_handler::log_general(THD * thd=0x01ed72f8, long event_time=1224765769, const char * user_host=0x038ef454, unsigned int user_host_len=34, int thread_id=1, const char * command_type=0x00ae1414, unsigned int command_type_len=5, const char * sql_text=0x01eff8c0, unsigned int sql_text_len=17, charset_info_st * client_cs=0x00bec788) Line 397 + 0x1e C++ mysqld.exe!LOGGER::general_log_write(THD * thd=0x01ed72f8, enum_server_command command=COM_QUERY, const char * query=0x01eff8c0, unsigned int query_length=17) Line 1037 + 0x6f C++ mysqld.exe!general_log_write(THD * thd=0x01ed72f8, enum_server_command command=COM_QUERY, const char * query=0x01eff8c0, unsigned int query_length=17) Line 4144 + 0x1a C++ mysqld.exe!dispatch_command(enum_server_command command=COM_QUERY, THD * thd=0x01ed72f8, char * packet=0x01ef7811, unsigned int packet_length=17) Line 1143 + 0x1b C++ mysqld.exe!do_command(THD * thd=0x01ed72f8) Line 809 + 0x1b C++ mysqld.exe!handle_one_connection(void * arg=0x01ed72f8) Line 1115 + 0x9 C++ mysqld.exe!pthread_start(void * param=0x01220db8) Line 85 + 0x9 C mysqld.exe!_threadstart(void * ptd=0x01ef2ea0) Line 196 + 0xd C kernel32.dll!7c80b713()
[23 Oct 2008 11:47]
Giuseppe Maxia
Jon, I hear you. But still, you can crash the server with a sequence of legitimate commands.
[23 Oct 2008 13:42]
Jon Stephens
Giuseppe, The point I was trying to make is that the statements are NOT legitimate - they are supposed to be disallowed. I believe what we have here is a 'fatal regression'. ;)
[23 Oct 2008 13:53]
Jon Stephens
Nevermind, I missed the 'rename' part. One of these days, I simply must learn to read.
[27 Oct 2008 21:56]
Konstantin Osipov
Patch:
--- sql/ha_partition.cc 2008-10-13 19:26:56 +0000
+++ sql/ha_partition.cc 2008-10-27 21:33:42 +0000
@@ -5320,6 +5320,9 @@ int ha_partition::extra(enum ha_extra_fu
/* Special actions for MERGE tables. Ignore. */
break;
}
+ /* Pass down MARK_AS_LOG_TABLE extra */
+ case HA_EXTRA_MARK_AS_LOG_TABLE:
+ DBUG_RETURN(loop_extra(operation));
default:
{
/* Temporary crash to discover what is wrong */
[26 Nov 2008 4:29]
Tatiana Azundris Nuernberg
confirmed on linux, presuming "any OS"
[17 Jul 2009 6:03]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/78914 2978 Tatiana A. Nurnberg 2009-07-17 Bug#40281, partitioning the general log table crashes the server We disallow the partitioning of a log table. You could however partition a table first, and then point logging to it. This is not only against the docs, it also crashes the server. We catch this case now. @ mysql-test/r/partition.result results for 40281 @ mysql-test/t/partition.test test for 40281: show that trying to log to partitioned table fails rather to crash the server @ sql/ha_partition.cc Signal that we no longer support logging to partitioned tables, as per the docs. @ sql/sql_partition.cc Don't be so sure there even was an old SELECT. If there isn't, there's not only no point in going on here, it will also crash the server.
[31 Jul 2009 12:38]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/79767 3015 Tatiana A. Nurnberg 2009-07-31 Bug#40281, partitioning the general log table crashes the server We disallow the partitioning of a log table. You could however partition a table first, and then point logging to it. This is not only against the docs, it also crashes the server. We catch this case now. @ mysql-test/r/partition.result results for 40281 @ mysql-test/t/partition.test test for 40281: show that trying to log to partitioned table fails rather to crash the server @ sql/ha_partition.cc Signal that we no longer support logging to partitioned tables, as per the docs. @ sql/sql_partition.cc Some commands like "USE ..." have no select, yet we may try to parse partition info after their execution if user set a partitioned table as log target. This shouldn't lead to a NULL-deref/crash.
[3 Aug 2009 13:15]
Davi Arnaut
Queued to 5.1-bugteam
[4 Aug 2009 19:52]
Bugs System
Pushed into 5.4.4-alpha (revid:alik@sun.com-20090804194615-h40sa098mx4z49qg) (version source revid:iggy@mysql.com-20090731204544-7nio1afvg0dmzs7g) (merge vers: 5.4.4-alpha) (pib:11)
[4 Aug 2009 20:45]
Bugs System
Pushed into 5.1.38 (revid:davi.arnaut@sun.com-20090804204317-ggodqkik7de6nfpz) (version source revid:davi.arnaut@sun.com-20090804204317-ggodqkik7de6nfpz) (merge vers: 5.1.38) (pib:11)
[7 Aug 2009 16:25]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/80385 3482 Mikael Ronstrom 2009-08-07 [merge] Merge handling for mainly bug#40281 removed: mysql-test/suite/rpl/r/rpl_row_stop_middle_update.result mysql-test/suite/rpl/t/rpl_row_stop_middle_update-master.opt mysql-test/suite/rpl/t/rpl_row_stop_middle_update-slave.opt added: mysql-test/r/innodb_mysql_lock.result mysql-test/r/partition_not_embedded.result mysql-test/r/partition_rename_longfilename.result mysql-test/std_data/loadxml2.dat mysql-test/suite/rpl/r/rpl_stop_middle_group.result mysql-test/t/innodb_mysql_lock-master.opt mysql-test/t/innodb_mysql_lock.test mysql-test/t/partition_not_embedded.test mysql-test/t/partition_rename_longfilename.test renamed: mysql-test/suite/rpl/t/rpl_row_stop_middle_update.test => mysql-test/suite/rpl/t/rpl_stop_middle_group.test modified: .bzr-mysql/default.conf CMakeLists.txt Makefile.am client/Makefile.am client/mysql.cc client/mysqldump.c client/mysqltest.cc config/ac-macros/misc.m4 config/ac-macros/readline.m4 include/config-netware.h include/config-win.h include/my_base.h include/myisammrg.h libmysql/Makefile.shared libmysqld/Makefile.am libmysqld/emb_qcache.h libmysqld/lib_sql.cc mysql-test/collections/default.experimental mysql-test/collections/mysql-azalea.push mysql-test/extra/scripts/monitor_disabled_tests/comments.txt mysql-test/r/create.result mysql-test/r/debug_sync.result mysql-test/r/func_str.result mysql-test/r/innodb_mysql.result mysql-test/r/insert.result mysql-test/r/insert_select.result mysql-test/r/loadxml.result mysql-test/r/lock.result mysql-test/r/locktrans_innodb.result mysql-test/r/locktrans_myisam.result mysql-test/r/merge.result mysql-test/r/myisam.result mysql-test/r/mysql.result mysql-test/r/mysqldump.result mysql-test/r/outfile_loaddata.result mysql-test/r/partition.result mysql-test/r/partition_csv.result mysql-test/r/partition_error.result mysql-test/r/show_check.result mysql-test/r/signal.result mysql-test/r/signal_demo3.result mysql-test/r/sp_notembedded.result mysql-test/r/sp_trans.result mysql-test/std_data/init_file.dat mysql-test/suite/backup/r/backup_db_grants.result mysql-test/suite/binlog/r/binlog_stm_unsafe_warning.result mysql-test/suite/binlog/t/binlog_stm_unsafe_warning-master.opt mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test mysql-test/suite/parts/r/partition_syntax_innodb.result mysql-test/suite/parts/r/partition_syntax_myisam.result mysql-test/suite/rpl/r/rpl_innodb.result mysql-test/suite/rpl/r/rpl_locktrans_innodb.result mysql-test/suite/rpl/r/rpl_locktrans_myisam.result mysql-test/suite/rpl/r/rpl_semi_sync.result mysql-test/suite/rpl/r/rpl_sf.result mysql-test/suite/rpl/r/rpl_temp_table_mix_row.result mysql-test/suite/rpl/r/rpl_udf.result mysql-test/suite/rpl/t/disabled.def mysql-test/suite/rpl/t/rpl_innodb.test mysql-test/suite/rpl/t/rpl_semi_sync.test mysql-test/suite/rpl/t/rpl_sf.test mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test mysql-test/t/create.test mysql-test/t/disabled.def mysql-test/t/innodb_mysql.test mysql-test/t/innodb_notembedded.test mysql-test/t/insert.test mysql-test/t/insert_select.test mysql-test/t/loadxml.test mysql-test/t/lock.test mysql-test/t/merge.test mysql-test/t/myisam.test mysql-test/t/mysql.test mysql-test/t/mysql_upgrade.test mysql-test/t/mysqldump.test mysql-test/t/outfile_loaddata.test mysql-test/t/partition.test mysql-test/t/partition_csv.test mysql-test/t/partition_error.test mysql-test/t/show_check.test mysql-test/t/sp_notembedded.test mysql-test/t/sp_trans.test mysql-test/valgrind.supp mysys/Makefile.am mysys/array.c mysys/my_handler_errors.h netware/BUILD/compile-netware-START plugin/semisync/semisync_master.cc plugin/semisync/semisync_master_plugin.cc plugin/semisync/semisync_slave_plugin.cc scripts/make_binary_distribution.sh sql-bench/README* sql-common/client.c sql/Makefile.am sql/backup/be_thread.cc sql/derror.cc sql/event_data_objects.cc sql/event_scheduler.cc sql/events.cc sql/field.cc sql/ha_partition.cc sql/handler.cc sql/handler.h sql/item_func.cc sql/lex.h sql/log.cc sql/log_event.cc sql/log_event_old.cc sql/mysql_priv.h sql/mysqld.cc sql/net_serv.cc sql/protocol.cc sql/protocol.h sql/rpl_rli.cc sql/rpl_rli.h sql/set_var.cc sql/share/errmsg-utf8.txt sql/share/errmsg.txt sql/slave.cc sql/sp.cc sql/sp.h sql/sp_head.cc sql/sql_base.cc sql/sql_class.cc sql/sql_class.h sql/sql_error.cc sql/sql_error.h sql/sql_insert.cc sql/sql_lex.h sql/sql_load.cc sql/sql_parse.cc sql/sql_partition.cc sql/sql_prepare.cc sql/sql_repl.cc sql/sql_select.cc sql/sql_show.cc sql/sql_signal.cc sql/sql_signal.h sql/sql_string.cc sql/sql_string.h sql/sql_table.cc sql/sql_update.cc sql/sql_yacc.yy sql/table.cc sql/table.h sql/unireg.h storage/innobase/handler/ha_innodb.cc storage/myisam/ha_myisam.cc storage/myisam/myisam_backup_engine.cc storage/myisammrg/ha_myisammrg.cc storage/myisammrg/ha_myisammrg.h storage/myisammrg/myrg_info.c storage/ndb/src/mgmsrv/Makefile.am support-files/mysql.server.sh tests/grant.pl* tests/mysql_client_test.c mysql-test/suite/rpl/t/rpl_stop_middle_group.test
[7 Aug 2009 20:33]
Paul DuBois
Noted in 5.1.38, 5.4.4 changelog. Partitioning a log table caused a server crash.
[12 Aug 2009 22:49]
Paul DuBois
Noted in 5.4.2 changelog because next 5.4 version will be 5.4.2 and not 5.4.4.
[15 Aug 2009 2:04]
Paul DuBois
Ignore previous comment about 5.4.2.
[14 Sep 2009 16:05]
Bugs System
Pushed into 5.4.4-alpha (revid:alik@sun.com-20090914155317-m1g9wodmndzdj4l1) (version source revid:alik@sun.com-20090914155317-m1g9wodmndzdj4l1) (merge vers: 5.4.4-alpha) (pib:11)
[1 Oct 2009 5:59]
Bugs System
Pushed into 5.1.39-ndb-6.3.28 (revid:jonas@mysql.com-20091001055605-ap2kiaarr7p40mmv) (version source revid:jonas@mysql.com-20091001055605-ap2kiaarr7p40mmv) (merge vers: 5.1.39-ndb-6.3.28) (pib:11)
[1 Oct 2009 7:25]
Bugs System
Pushed into 5.1.39-ndb-7.0.9 (revid:jonas@mysql.com-20091001072547-kv17uu06hfjhgjay) (version source revid:jonas@mysql.com-20091001071652-irejtnumzbpsbgk2) (merge vers: 5.1.39-ndb-7.0.9) (pib:11)
[1 Oct 2009 13:25]
Bugs System
Pushed into 5.1.39-ndb-7.1.0 (revid:jonas@mysql.com-20091001123013-g9ob2tsyctpw6zs0) (version source revid:jonas@mysql.com-20091001123013-g9ob2tsyctpw6zs0) (merge vers: 5.1.39-ndb-7.1.0) (pib:11)
[5 Oct 2009 10:50]
Bugs System
Pushed into 5.1.39-ndb-6.2.19 (revid:jonas@mysql.com-20091005103850-dwij2dojwpvf5hi6) (version source revid:jonas@mysql.com-20090930185117-bhud4ek1y0hsj1nv) (merge vers: 5.1.39-ndb-6.2.19) (pib:11)
[8 Oct 2009 19:40]
Paul DuBois
The 5.4 fix has been pushed to 5.4.2.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.051 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: if you alter the general log table to use partitioning, the server crashes after a few connections. mysql> create table gl like general_log; Query OK, 0 rows affected (0.14 sec) mysql> alter table gl engine=myisam; Query OK, 0 rows affected (0.26 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table gl partition by hash (thread_id) partitions 20; Query OK, 0 rows affected (0.44 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table general_log rename to gl0; Query OK, 0 rows affected, 1 warning (0.13 sec) mysql> alter table gl rename to general_log ; Query OK, 0 rows affected (0.01 sec) set global log_output='table'; set global general_log=1; connect; connect; connect; How to repeat: --source include/have_partition.inc use mysql; --disable_warnings drop table if exists gl, gl1; --enable_warnings set global general_log =0; create table gl like general_log; alter table gl engine=myisam; alter table gl partition by hash (thread_id) partitions 10; alter table general_log rename to gl1; alter table gl rename to general_log; set global log_output='table'; set global general_log =1; use test; --disable_warnings drop table if exists t1; --enable_warnings create table t1 (i int); let $loop = 10; while ($loop) { connect (master,127.0.0.1,root,,test,$MASTER_MYPORT,); connection master; eval insert into t1 values ($loop); select * from t1 ; disconnect master; dec $loop; } drop table t1;