| Bug #14105 | MySQL crashing on CREATE ... SELECT statement | ||
|---|---|---|---|
| Submitted: | 18 Oct 2005 1:27 | Modified: | 22 Feb 2006 8:10 |
| Reporter: | Tobias Asplund | Email Updates: | |
| Status: | Can't repeat | Impact on me: | |
| Category: | MySQL Server | Severity: | S1 (Critical) |
| Version: | 5.0.15 | OS: | Linux (Linux) |
| Assigned to: | Oleksandr Byelkin | CPU Architecture: | Any |
[18 Oct 2005 1:27]
Tobias Asplund
[18 Oct 2005 1:44]
MySQL Verification Team
I was unable for to repeat the crash on Linux, with today BK source
server:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 5.0.16-debug
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE TABLE Continents (
-> Continent VARCHAR(20) NOT NULL,
-> Population BIGINT UNSIGNED NOT NULL DEFAULT'0',
-> Countries TINYINT NOT NULL
-> );
Query OK, 0 rows affected (0.04 sec)
mysql> SELECT Continent, SUM(Population) AS Population , COUNT(*) AS Countries
->
-> FROM Country
-> GROUP BY Continent;
+---------------+------------+-----------+
| Continent | Population | Countries |
+---------------+------------+-----------+
| Asia | 3705025700 | 51 |
| Europe | 730074600 | 46 |
| North America | 482993000 | 37 |
| Africa | 784475000 | 58 |
| Oceania | 30401150 | 28 |
| Antarctica | 0 | 5 |
| South America | 345780000 | 14 |
+---------------+------------+-----------+
7 rows in set (0.01 sec)
mysql>
could you please test on FreeBSD.
[18 Oct 2005 1:52]
Timothy Smith
I tried this on 5.4-STABLE, using the mysql50-server port and also using the mysql-debug-5.0.13-rc binary from the MySQL downloads site. I was unable to get a crash. I did: mysqladmin create world mysql world < world.sql mysql world mysql> SELECT Continent, SUM(Population) AS Population , COUNT(*) AS Countries FROM Country GROUP BY Continent; +---------------+------------+-----------+ | Continent | Population | Countries | +---------------+------------+-----------+ | Asia | 3705025700 | 51 | | Europe | 730074600 | 46 | | North America | 482993000 | 37 | | Africa | 784475000 | 58 | | Oceania | 30401150 | 28 | | Antarctica | 0 | 5 | | South America | 345780000 | 14 | +---------------+------------+-----------+ 7 rows in set (0.00 sec) Regards, Timothy
[18 Oct 2005 4:11]
Timothy Smith
I just re-tested this, using the actual procedure reported in the bug and not something I made up in my head. :) I can repeat this now.
Here is a back trace from gdb:
#0 0x425e27a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
#1 0x42621e59 in raise () from /lib/tls/libc.so.6
#2 0x42623882 in abort () from /lib/tls/libc.so.6
#3 0x4261b728 in __assert_fail () from /lib/tls/libc.so.6
#4 0x081fd448 in make_empty_rec (thd=0x8b9a068, file=36,
table_type=DB_TYPE_MYISAM, table_options=9, create_fields=@0x0,
reclength=31, data_offset=1) at unireg.cc:780
#5 0x081fbd83 in mysql_create_frm (thd=0x8b9a068,
file_name=0x8289e0 "./world/continents.frm", db=0x8b86068 "world",
table=0x8bc6558 "continents", create_info=0x8b9a5cc,
create_fields=@0x8b9a4f4, keys=0, key_info=0x8bc81c0, db_file=0x82776f)
at unireg.cc:157
#6 0x081fc092 in rea_create_table (thd=0x8b9a068,
file_name=0x8289e0 "./world/continents.frm", db=0x8b86068 "world",
table=0x8bc6558 "continents", create_info=0x8b9a5cc,
create_fields=@0x8b9a4f4, keys=0, key_info=0x8bc81c0) at unireg.cc:261
#7 0x0822be98 in mysql_create_table (thd=0x8b9a068, db=0x8b86068 "world",
table_name=0x8bc6558 "continents", create_info=0x8b9a5cc,
fields=@0x8b9a4f4, keys=@0x8b9a4e8, internal_tmp_table=false,
select_field_count=3) at sql_table.cc:1618
#8 0x0822c377 in create_table_from_items (thd=0x8b9a068,
create_info=0x8b9a5cc, create_table=0x8bc6590, extra_fields=0x8b9a4f4,
keys=0x8b9a4e8, items=0x0, lock=0x8bc6fc8) at sql_table.cc:1757
#9 0x081cf778 in select_create::prepare (this=0x8bc6f60, values=@0x8b9a344,
u=0x0) at sql_insert.cc:2482
#10 0x081adef5 in JOIN::prepare (this=0x8bc6fd0, rref_pointer_array=0x8b9a3e0,
tables_init=0x0, wild_num=0, conds_init=0x0, og_num=1, order_init=0x0,
group_init=0x0, having_init=0x0, proc_param_init=0x0, select_lex_arg=0x0,
unit_arg=0x8b9a0b8) at sql_select.cc:471
#11 0x081b168e in mysql_select (thd=0x8b9a068, rref_pointer_array=0x8b9a3e0,
tables=0x8bc6cd0, wild_num=0, fields=@0x8b9a344, conds=0x0, og_num=1,
order=0x0, group=0x8bc6f28, having=0x0, proc_param=0x0,
select_options=2424588800, result=0x8bc6f60, unit=0x8b9a0b8,
select_lex=0x8b9a2c4) at sql_select.cc:1811
#12 0x081ad77a in handle_select (thd=0x8b9a068, lex=0x8b9a0a8,
result=0x8bc6f60, setup_tables_done_option=0) at sql_select.cc:234
#13 0x0817a410 in mysql_execute_command (thd=0x8b9a068) at sql_parse.cc:2862
#14 0x08180ae8 in mysql_parse (thd=0x8b9a068,
inBuf=0x8bc6420 "CREATE TABLE Continents ( Continent VARCHAR(20) NOT NULL, Population BIGINT UNSIGNED NOT NULL DEFAULT'0', Countries TINYINT NOT NULL ) SELECT Continent, SUM(Population) AS Population , COUNT"...,
length=146383016) at sql_parse.cc:5536
#15 0x08177f95 in dispatch_command (command=COM_QUERY, thd=0x8b9a068,
packet=0x8bbe3c1 "CREATE TABLE Continents ( Continent VARCHAR(20) NOT NULL, Population BIGINT UNSIGNED NOT NULL DEFAULT'0', Countries TINYINT NOT NULL ) SELECT Continent, SUM(Population) AS Population , COUNT"...,
packet_length=253) at sql_parse.cc:1697
#16 0x08177955 in do_command (thd=0x8b9a068) at sql_parse.cc:1498
#17 0x08176c54 in handle_one_connection (arg=0x0) at sql_parse.cc:1143
#18 0x4274898c in start_thread () from /lib/tls/libpthread.so.0
#19 0x426b67da in clone () from /lib/tls/libc.so.6
[18 Oct 2005 4:13]
Timothy Smith
I forgot to mention in my previous comment - I tested this on Linux with the latest BK code for 5.0.15. Tobias mentioned that this query has been crashing for him since around 5.0.6, but not on Windows.
[12 Nov 2005 10:17]
Oleksandr Byelkin
Thank you for bugreport, but I can't repeat it on current bk:
1) mysql build with compile-pentium-debug-max (linux)
2) cd mysql-test; ./mysql-test-run alias (prepare empty db)
3) run mysql
../sql/mysqld --no-defaults --basedir=. --datadir=./var/master-data --skip-innodb --skip-ndbcluster --skip-bdb --language=../sql/share/english/ --character-sets-dir=../sql/share/charsets/ --key_buffer_size=8388608 --read_buffer_size=1044480 --max_connections=20
4) from the other console:
[bell@sanja mysql-test]$ ../client/mysql -u root test <world.sql.1
[bell@sanja mysql-test]$ ../client/mysql -u root test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 5.0.17-debug
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE TABLE Continents (
-> Continent VARCHAR(20) NOT NULL,
-> Population BIGINT UNSIGNED NOT NULL DEFAULT'0',
-> Countries TINYINT NOT NULL
-> )
-> SELECT Continent, SUM(Population) AS Population , COUNT(*) AS Countries
-> FROM Country
-> GROUP BY Continent;
Query OK, 7 rows affected, 2 warnings (0.02 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql>
[21 Feb 2006 13:21]
Valeriy Kravchuk
Was that original table, Country, created on 5.0.15 or on some previous version of MySQL, 4.x.y?
[21 Feb 2006 14:00]
Tobias Asplund
I think it worked like it should on 4.1, but crashed 5.0.
[21 Feb 2006 15:50]
Valeriy Kravchuk
Please, answer my question: Was that original table, Country, created on some previous version of MySQL, 4.x.y, and then you just upgraded binaries to 5.0.15? I need to know that, because if it was created in 4.x.y, it can lead me to a possible reason and a way to repeat the behaviour you initially described.
[21 Feb 2006 16:34]
Tobias Asplund
flupps@eeyore:~$ mysqladmin create bugtest
flupps@eeyore:~$ mysql bugtest < /www/mysql/Data-world.sql
flupps@eeyore:~$ mysql bugtest
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 129081 to server version: 5.0.15-debug-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE TABLE Continents (
-> Continent VARCHAR(20) NOT NULL,
-> Population BIGINT UNSIGNED NOT NULL DEFAULT'0',
-> Countries TINYINT NOT NULL
-> )
-> SELECT Continent, SUM(Population) AS Population , COUNT(*) AS Countries
-> FROM Country
-> GROUP BY Continent;
ERROR 2013 (HY000): Lost connection to MySQL server during query
[22 Feb 2006 8:10]
Valeriy Kravchuk
Thank you for a test case, but, as you already know from the previous messages, this test case works OK since 5.0.17 at least. So, please, upgrade to a newer version, 5.0.18. I had a (strange) idea about upgrade from 4.x.y as a possible reason for the difference in tests results, but you proved it is wrong. Thank you.
