Dear MySQL users,
MySQL Community Server 5.1.33, a new version of the popular Open
Source Database Management System, has been released. MySQL 5.1.33 is
recommended for use on production systems.
Users running AIX 5.2 should be aware that this platform will be EOL'd
from 30th April 2009, therefore 5.1.33 is likely to be the penultimate
5.1 release for AIX 5.2. For further information please see
For an overview of what's new in MySQL 5.1, please see
For information on installing MySQL 5.1.33 on new servers or upgrading
to MySQL 5.1.33 from previous MySQL releases, please see
MySQL Server is available in source and binary form for a number of
platforms from our download pages at
Not all mirror sites may be up to date at this point in time, so if
you can't find this version on some mirror, please try again later or
choose another download site.
We welcome and appreciate your feedback, bug reports, bug fixes,
For information on open issues in MySQL 5.1, please see the errata
The following section lists the changes in the MySQL source code since
the previous released version of MySQL 5.1. It may also be viewed
The MySQL build team at Sun Microsystems
Functionality added or changed:
* mysql-test-run.pl now supports an --experimental=file_name
option. It enables you to specify a file that contains a list
of test cases that should be displayed with the [ exp-fail ]
code rather than [ fail ] if they fail.
* The MD5 algorithm now uses the Xfree implementation.
* The query cache now checks whether a SELECT statement begins
with SQL_NO_CACHE to determine whether it can skip checking
for the query result in the query cache. This is not supported
when SQL_NO_CACHE occurs within a comment.
* Partitioning: A duplicate key error raised when inserting into
a partitioned table used a different error code from that
returned by such an error raised when inserting into a table
that was not partitioned.
See also Bug#28842: http://bugs.mysql.com/28842.
* Partitioning: Several error messages relating to partitioned
tables were incorrect or missing.
* Replication: When --binlog_format was set to STATEMENT, a
statement unsafe for statement-based logging caused an error
or warning to be issued even if sql_log_bin was set to 0.
* Replication: When using MIXED replication format and temporary
tables were created in statement-based mode, but a later
operation in the same session caused a switch to row-based
mode, the temporary tables were not dropped on the slave at
the end of the session.
See also Bug#43046: http://bugs.mysql.com/43046.
This regression was introduced by
* Replication: When using the MIXED replication format, UPDATE
and DELETE statements that searched for rows where part of the
key had nullable BIT columns failed. This occurred because
operations that inserted the data were replicated as
statements, but UPDATE and DELETE statements affecting the
same data were replicated using row-based format.
This issue did not occur when using statement-based
replication (only) or row-based replication (only).
See also Bug#39648: http://bugs.mysql.com/39648.
* Replication: The server SQL mode in effect when a stored
procedure was created was not retained in the binary log. This
could cause a CREATE PROCEDURE statement that succeeded on the
master to fail on the slave.
This issue was first noticed when a stored procedure was
created when ANSI_QUOTES was in effect on the master, but
could possibly cause failed CREATE PROCEDURE statements and
other problems on the slave when using other server SQL modes
as well. (Bug#39526: http://bugs.mysql.com/39526)
* Replication: If --secure-file-priv was set on the slave, it
was unable to execute LOAD DATA INFILE statements sent from
the master when using mixed-format or statement-based
As a result of this fix, this security restriction is now
ignored on the slave in such cases; instead the slave checks
whether the files were created and should be read by the slave
in its --slave-load-tmpdir.
* Replication: Server IDs greater than 2147483647 (2^32 - 1)
were represented by negative numbers in the binary log.
* Replication: When its disk becomes full, a replication slave
may wait while writing the binary log, relay log or MyISAM
tables, continuing after space has been made available. The
error message provided in such cases was not clear about the
frequency with which checking for free space is done (once
every 60 seconds), and how long the server waits after space
has been freed before continuing (also 60 seconds); this
caused users to think that the server had hung.
These issues have been addressed by making the error message
clearer, and dividing it into two separate messages:
1. The error message Disk is full writing 'filename'
(Errcode: error_code). Waiting for someone to free
space... (Expect up to 60 secs delay for server to
continue after freeing disk space) is printed only once.
2. The warning Retry in 60 secs, Message reprinted in 600
secs is printed once every for every 10 times that the
check for free space is made; that is, the check is
performed once each 60 seconds, but the reminder that
space needs to be freed is printed only once every 10
minutes (600 seconds).
* Replication: The statements DROP PROCEDURE IF EXISTS and DROP
FUNCTION IF EXISTS were not written to the binary log if the
procedure or function to be dropped did not exist.
See also Bug#25705: http://bugs.mysql.com/25705.
* Use of USE INDEX hints could cause EXPLAIN EXTENDED to crash.
* For InnoDB tables, overflow in an AUTO_INCREMENT column could
cause a server crash. (Bug#43203: http://bugs.mysql.com/43203)
* On 32-bit Windows, mysqld could not use large buffers due to a
2GB user mode address limit.
* stderr should be unbuffered, but when the server redirected
stderr to a file, it became buffered.
* The DATA_TYPE column of the INFORMATION_SCHEMA.COLUMNS table
displayed the UNSIGNED attribute for floating-point data
types. (The column should contain only the data type name.)
* For InnoDB tables, spurious duplicate-key errors could occur
when inserting into an AUTO_INCREMENT column.
* mysqldump included views that were excluded with the
* An earlier bug fix resulted in the problem that the InnoDB
plugin could not be used with a server that was compiled with
the built-in InnoDB. To handle this two changes were made:
+ The server now supports an --ignore-builtin-innodb option
that causes the server to behave as if the built-in
InnoDB is not present. This option causes other InnoDB
options not to be recognized.
+ For the INSTALL PLUGIN statement, the server reads option
(my.cnf) files just as during server startup. This
enables the plugin to pick up any relevant options from
those files. Consequently, a plugin no longer is started
with each option set to its default value.
Because of this change, it is possible to add plugin
options to an option file even before loading a plugin
(if the loose prefix is used). It is also possible to
uninstall a plugin, edit my.cnf, and install the plugin
again. Restarting the plugin this way enables it to the
new option values without a server restart.
To take advantage of this bug fix, InnoDB Plugin 1.0.4 or
higher is required. (Bug#42610: http://bugs.mysql.com/42610)
This regression was introduced by
* With the ONLY_FULL_GROUP_BY SQL mode enabled, some legal
queries failed. (Bug#42567: http://bugs.mysql.com/42567)
* Tables could enter open table cache for a thread without being
properly cleaned up, leading to a server crash.
* For InnoDB tables, inserting into floating-point
AUTO_INCREMENT columns failed.
* The InnoDB btr_search_drop_page_hash_when_freed() function had
a race condition. (Bug#42279: http://bugs.mysql.com/42279)
* Parsing of the optional microsecond component of DATETIME
values did not fail gracefully when that component width was
larger than the allowed six places.
* mysqldumpslow parsed the --debug and --verbose options
incorrectly. (Bug#42027: http://bugs.mysql.com/42027)
* Queries that used the loose index scan access method could
return no rows. (Bug#41610: http://bugs.mysql.com/41610)
* The error message for a too-long column comment was Unknown
error rather than a more appropriate message.
* Use of SELECT * allowed users with rights to only some columns
of a view to access all columns.
* The server did not robustly handle problems hang if a table
opened with HANDLER needed to be re-opened because it had been
altered to use a different storage engine that does not
support HANDLER. The server also failed to set an error if the
re-open attempt failed. These problems could cause the server
to crash or hang. (Bug#41110: http://bugs.mysql.com/41110,
* SELECT statements executed concurrently with INSERT statements
for a MyISAM table could cause incorrect results to be
returned from the query cache.
* For prepared statements, multibyte character sets were not
taking into account when calculating max_length for string
values and mysql_stmt_fetch() could return truncated strings.
* Deprecation warnings that referred to MySQL 5.2 were changed
to refer to MySQL 6.0.
* For user-defined variables in a query result, incorrect length
values were returned in the result metadata.
* On Windows, starting the server with an invalid value for
innodb_flush_method caused a crash.
* MySQL 5.1 crashed with index merge algorithm and merge tables.
A query in the MyISAM merge table caused a crash if the index
merge algorithm was being used.
* With strict SQL mode enabled, setting a system variable to an
out-of-bounds value caused an assertion failure.
* Table temporary scans were slower than necessary due to use of
mmap rather than caching, even with the myisam_use_mmap system
variable disabled. (Bug#40634: http://bugs.mysql.com/40634)
* For a view that references a table in another database,
mysqldump wrote the view name qualified with the current
database name. This makes it impossible to reload the dump
file into a different database.
* On platforms where long and pointer variables have different
sizes, MyISAM could copy key statistics incorrectly, resulting
in a server crash or incorrect cardinality values.
* DELETE tried to acquire write (not read) locks for tables
accessed within a subquery of the WHERE clause.
* perror did not produce correct output for error codes 153 to
163. (Bug#39370: http://bugs.mysql.com/39370)
* Several functions in libmysqld called exit() when an error
occurred rather than returning an error to the caller.
* The innodb_log_arch_dir system variable is no longer available
but was present in some of the sample option files included
with MySQL distributions (such as my-huge.cnf). The line was
present as a comment but uncommenting it would cause server
startup failure so the line has been removed.
* --help output for myisamchk did not list the --HELP option.
* Comparisons between row constructors, such as (a, b) = (c, d)
resulted in unnecessary Illegal mix of collations errors for
string columns. (Bug#37601: http://bugs.mysql.com/37601)
* If a user created a view that referenced tables for which the
user had disjoint privileges, an assertion failure occurred.
* An argument to the MATCH() function that was an alias for an
expression other than a column name caused a server crash.
* The event, general_log, and slow_log tables in the mysql
database store server_id values, but did not use an UNSIGNED
column and thus were not able to store the full range of ID
values. (Bug#36540: http://bugs.mysql.com/36540)
* On Windows, the _PC macro in my_global.h was causing problems
for modern compilers. It has been removed because it is no
longer used. (Bug#34309: http://bugs.mysql.com/34309)
* For DROP FUNCTION with names that were qualified with a
database name, the database name was handled in case-sensitive
fashion even with lower_case_table_names set to 1.
* mysqldump --compatible=mysql40 emitted statements referring to
the character_set_client system variable, which is unknown
before MySQL 4.1. Now the statements are enclosed in
* Use of MBR spatial functions such as MBRTouches() with columns
of InnoDB tables caused a server crash rather than an error.
* The mysql client mishandled input parsing if a delimiter
command was not first on the line.
* SHOW PRIVILEGES listed the CREATE ROUTINE privilege as having
a context of Functions,Procedures, but it is a database-level
privilege. (Bug#30305: http://bugs.mysql.com/30305)
* mysqld --help did not work as root.
* CHECK TABLE, REPAIR TABLE, ANALYZE TABLE, and OPTIMIZE TABLE
erroneously reported a table to be corrupt if the table did
not exist or the statement was terminated with KILL.
* SHOW TABLE STATUS could fail to produce output for tables with
non-ASCII characters in their name.
* Allocation of stack space for error messages could be too
small on HP-UX, leading to stack overflow crashes.
* Floating-point numbers could be handled with different numbers
of digits depending on whether the text or prepared-statement
protocol was used. (Bug#21205: http://bugs.mysql.com/21205)
* ROUND() sometimes returned different results on different
platforms. (Bug#15936: http://bugs.mysql.com/15936)
Jonathan Perkin, Product Engineering, MySQL
Database Technology Group, Sun Microsystems
|• MySQL Community Server 5.1.33 has been released||Jonathan Perkin||6 Apr|