| Bug #9756 | mysql client failing on dumps containing certain \ sequences | ||
|---|---|---|---|
| Submitted: | 8 Apr 2005 15:18 | Modified: | 26 Apr 2005 18:16 |
| Reporter: | Axel Schwenke | ||
| Status: | Closed | ||
| Category: | Client | Severity: | S1 (Critical) |
| Version: | 5.0.4 | OS: | Linux (Linux) |
| Assigned to: | Ramil Kalimullin | Target Version: | |
[25 Apr 2005 17:10]
Axel Schwenke
I added an SQL dump to trigger the bug. This dump was done with --net_buffer_length=4KB. The command line client fails on line #503 - BUT: there is no \' sequence in this line. There are several of those before (the last one in line #498) and others later (next in line #508) in the dump.
[26 Apr 2005 12:43]
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/internals/24307
[26 Apr 2005 12:48]
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/internals/24308
[26 Apr 2005 17:27]
Ramil Kalimullin
fixed in 5.0.6
[26 Apr 2005 18:16]
Paul DuBois
Noted in 5.0.6 changelog.
[8 Nov 2007 17:00]
Christian Kirsch
I just stumbled upon the same (or a similar?) bug trying to restore a dump from a Linux machine running 5.0.33 (compiled from source) on an Intel-Mac running 5.0.45 (precompiled from MySQL, PKG format). Using a max-allowed-packet of 16M, I get ERROR at line 903: Unknown command '\''. If I set the max-allowed-packet to 1M, I get ERROR at line 906: Unknown command '\''. (The error now seems to be three lines further down). Setting the packet size to 512k, I see ERROR at line 121: Unknown command '\0'. -- again, another line number and another offending character this time. The error happens if I pipe the output of mysqldump directly into mysql or if I first save it in a file and then feed that file to mysql.

Description: The command line client sometimes failes with error message Unknown command '\'' when reading data from a dump containing escaped ' characters. The problem seems to be connected with buffer sizes, as it can be triggered by fooling mysql with max_allowed_packet. However this problem also arises when replaying a 2MB dump with 1MB INSERT statements using mysql client with max_allowed_packet=16M. How to repeat: #create a suitable table mysql> create table bar (x char(10)); #insert a few (say: 1 million ;-) rows containing the string "' '" (single quote + space + single quote) mysql> show table status like 'bar'\G *************************** 1. row *************************** Name: bar Engine: MyISAM Version: 10 Row_format: Fixed Rows: 1000000 Avg_row_length: 11 Data_length: 11000000 Max_data_length: 47244640255 Index_length: 1024 ... #now dump this table and read it back ~/Work/MySQL $mysqldump test bar >bar.dump ~/Work/MySQL $mysql test <bar.dump --> everything fine so far #have a look at the created dump ~/Work/MySQL $fgrep INSERT bar.dump | wc 11 1000055 10000286 ~/Work/MySQL $for i in `seq 11`; do fgrep INSERT bar.dump | head -$i | tail -1 | wc; done 1 95234 952316 1 95234 952316 1 95234 952316 1 95234 952316 1 95234 952316 1 95234 952316 1 95234 952316 1 95234 952316 1 95234 952316 1 95234 952316 1 47715 477126 ~/Work/MySQL $head -31 bar.dump | tail -1 LOCK TABLES `bar` WRITE; ~/Work/MySQL $head -43 bar.dump | tail -1 UNLOCK TABLES; --> we got 11 INSERT statements in lines 32..42, each except the last ~1M in size #now we fool the mysql client about max_allowed_packet ~/Work/MySQL $mysql --max_allowed_packet=1M test <bar.dump ~/Work/MySQL $mysql --max_allowed_packet=512k test <bar.dump ~/Work/MySQL $mysql --max_allowed_packet=508k test <bar.dump ERROR at line 42: Unknown command '\''. --> Kaboom! Questions: 1. Why do I get an "Unknown command" error and not something like "buffer overrun"? 2. Why do I get an error at max_allowed_packet=508KB but not at 512KB? Lines in the dump are definitely bigger than 512k. 3. Why do I get this error at line 42, that contains the last (shorter!) INSERT statement? 4. After the failed restore, the table contains 476145 rows. Seems only the first 5 out of 10 identical INSERTs succeeded. What about number 6..10? Again: I just tried to create a test case for a bug that hits me with a 2MB dump, containing 2 INSERT statements of ~1MB each. There is nothing special about the table or the dump (it just contains a lot of escaped "' '" strings). max_allowed_packet is 512MB for the server and 16MB for mysql client.