Dear MySQL users,
MySQL Community Server 5.1.46, a new version of the popular Open
Source Database Management System, has been released. MySQL 5.1.46 is
recommended for use on production systems.
For an overview of what's new in MySQL 5.1, please see
For information on installing MySQL 5.1.46 on new servers or upgrading
to MySQL 5.1.46 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
C.1.2. Changes in MySQL 5.1.46
InnoDB Plugin Notes:
* InnoDB Plugin has been upgraded to version 1.0.7. This version
is considered of General Availability (GA) quality. The InnoDB
Plugin Change History
ml) may contain information in addition to those changes
In this release, the InnoDB Plugin is included in source and
binary distributions, except RHEL3, RHEL4, SuSE 9 (x86,
x86_64, ia64), and generic Linux RPM packages. It also does
not work for FreeBSD 6 and HP-UX or for Linux on generic ia64.
Functionality added or changed:
* There is a new system variable, skip_name_resolve, that is set
from the value of the --skip-name-resolve server option. This
provides a way to determine at runtime whether the server uses
name resolution for client connections.
* Security Fix: Privilege checking for UNINSTALL PLUGIN was
incorrect. (Bug#51770: http://bugs.mysql.com/bug.php?id=51770)
* Partitioning: Partition pruning on RANGE partitioned tables
did not always work correctly; the last partition was not
excluded if the range was beyond it (when not using MAXVALUE).
Now the last partition is not included if the partitioning
function value is not within the range.
* Partitioning: The insert_id server system variable was not
reset following an insert that failed on a partitioned MyISAM
table having an AUTO_INCREMENT column.
* Partitioning: Foreign keys are not supported on partitioned
tables. However, it was possible via an ALTER TABLE statement
to set a foreign key on a partitioned table; it was also
possible to partition a table with a single foreign key.
* Partitioning: GROUP BY queries performed poorly for some
partitioned tables. This was due to the block size not being
set for partitioned tables, thus the keys per block was not
correct, which could cause such queries to be optimized
See also Bug#37252: http://bugs.mysql.com/bug.php?id=37252.
* Partitioning: REPAIR TABLE failed for partitioned ARCHIVE
tables. (Bug#46565: http://bugs.mysql.com/bug.php?id=46565)
* Replication: TRUNCATE TABLE performed on a temporary table
using the InnoDB storage engine was logged even when using
* Replication: When using temporary tables the binary log needs
to insert a pseudo-thread ID for threads that are using
temporary tables, each time a switch happens between two
threads, both of which are using temporary tables. However, if
a thread issued a failing statement before exit, its ID was
not recorded in the binary log, and this in turn caused the ID
for the next thread that tried to do something with a
temporary table not to be logged as well. Subsequent replays
of the binary log failed with the error Table ... doesn't
exist. (Bug#51226: http://bugs.mysql.com/bug.php?id=51226)
* Replication: If the master was using sql_mode='TRADITIONAL',
duplicate key errors were not sent to the slave, which
received 0 rather than the expected error code. This caused
replication to fail even when such an error was expected.
* Replication: When run with the --database option, mysqlbinlog
printed ROLLBACK statements but did not print any
corresponding SAVEPOINT statements.
* Replication: CREATE EVENT statements were padded with
"garbage" characters when written to the binary log, which
caused a syntax error when trying to read back from the log.
* Replication: Column length information generated by InnoDB did
not match that generated by MyISAM, which caused invalid
metadata to be written to the binary log when trying to
replicate BIT columns.
* Replication: The value of Slave_IO_running in the output of
SHOW SLAVE STATUS did not distinguish between all 3 possible
states of the slave I/O thread (not running; running but not
connected; connected). Now the value Connecting (rather than
No) is shown when the slave I/O thread is running but the
slave is not connected to a replication master.
The server system variable Slave_running also reflects this
change, and is now consistent with what is shown for
* EXPLAIN EXTENDED crashed trying to resolve references to freed
temporary table columns for GROUP_CONCAT() ORDER BY arguments.
* For InnoDB Plugin, bit fields were causing problems with
concurrency on SMP systems because of word-packing issues.
* The optimizer could attempt to evaluate the WHERE clause
before any rows had been read, resulting in a server crash.
* For LDML-defined collations, some data structures were not
initialized properly to enable UPPER() and LOWER() to work
correctly. (Bug#51976: http://bugs.mysql.com/bug.php?id=51976)
* On Windows, LOAD_FILE() could cause a crash for some
pathnames. (Bug#51893: http://bugs.mysql.com/bug.php?id=51893)
* Invalid memory reads occurred for HANDLER ... READ NEXT after
a failed HANDLER ... READ FIRST.
* After TRUNCATE TABLE of a MyISAM table, subsequent queries
could crash the server if myisam_use_mmap was enabled.
* If myisam_sort_buffer_size was set to a small value, table
repair for MyISAM tables with FULLTEXT indexes could crash the
server. (Bug#51866: http://bugs.mysql.com/bug.php?id=51866)
* In LOAD DATA INFILE, using a SET clause to set a column equal
to itself caused a server crash.
* A problem with equality propagation optimization for prepared
statements and stored procedures caused a server crash upon
re-execution of the prepared statement or stored procedure.
See also Bug#8115: http://bugs.mysql.com/bug.php?id=8115,
* The optimizer performed an incorrect join type when COALESCE()
appeared within an IN() operation.
* The server crashed when the optimizer attempted to determine
constant tables but a table storage engine did not support
exact record count.
* The server could crash populating the
INFORMATION_SCHEMA.PROCESSLIST table due to lack of mutex
* Use of HANDLER statements with tables that had spatial indexes
caused a server crash.
* With an XA transaction active, SET autocommit = 1 could cause
side effects such as memory corruption or a server crash.
* Following a bulk insert into a MyISAM table, if MyISAM failed
to build indexes using repair by sort, data file corruption
* CHECKSUM TABLE could compute the checksum for BIT columns
* A HAVING clause on a joined table in some cases failed to
eliminate rows which should have been excluded from the result
set. (Bug#51242: http://bugs.mysql.com/bug.php?id=51242)
* The type inference used for view columns caused some columns
in views to be handled as the wrong type, as compared to the
same columns in base tables. DATE columns in base tables were
treated as TIME columns in views, and base table TIME columns
as view DATETIME columns.
* The YEAR values 2000 and 0000 could be treated as equal.
* Performing a single in-place ALTER TABLE containing ADD INDEX
and DROP INDEX options that used the same index name could
result in a corrupt table definition file. Now such ALTER
TABLE statements are no longer performed in place.
* mysql_upgrade did not detect when CSV log tables incorrectly
contained columns that could be NULL. Now these columns are
altered to be NOT NULL.
* If a stored function contained a RETURN statement with an ENUM
value in the ucs2 character set, SHOW CREATE FUNCTION and
SELECT DTD_IDENTIFIER FROM INFORMATION_SCHEMA.ROUTINES
returned incorrect values.
* The server crashed when it could not determine the best
execution plan for queries involving outer joins with
nondeterministic ON clauses such as the ones containing the
RAND() function, a user-defined function, or a NOT
DETERMINISTIC stored function.
* A query that read from a derived table (of the form SELECT ...
FROM (SELECT ...)) produced incorrect results when the
following conditions were present:
+ The table subquery contained a derived query ((SELECT ...
) AS column).
+ The derived query could potentially produce zero rows or
a single NULL (that is, no rows matched, or the query
used an aggregate function such as SUM() running over
+ The table subquery joined at least two tables.
+ The join condition involved an index.
* The optimization to read MIN() or MAX() values from an index
did not properly handle comparisons with NULL values. This
could produce incorrect results for MIN() or MAX()when the
WHERE clause tested a NOT NULL column for NULL.
* Killing a query during the optimization phase of a subquery
could cause a server crash.
* The query shown by EXPLAIN EXTENDED plus SHOW WARNINGS could
produce results different from the original query.
* Renaming a column of an InnoDB table caused the server to go
out of sync with the InnoDB data dictionary.
* MyISAM could write uninitialized data to new index pages. Now
zeros are written to unused bytes in the pages.
* Setting myisam_repair_threads larger than 1 could result in
the cardinality for all indexes of a MyISAM table being set to
1 after parallel index repair.
* In debug builds, if the listed columns in the view definition
of the table used in an INSERT ... SELECT statement
mismatched, an assertion was raised in the query cache
invalidation code following the failing statement.
* For a query that selected from a view and used an alias for
the view, the metadata used the alias name rather than the
view name in the MYSQL_FIELD.table member.
* mysql_upgrade did not create temporary files properly.
* It was possible for DROP TABLE of one MyISAM table to remove
the data and index files of a different MyISAM table.
* If the arguments to a CONCAT() call included a local routine
variable, selecting the return value into a user variable
could produce an incorrect result.
* SHOW CREATE VIEW returned invalid SQL if the definition
contained a SELECT 'string' statement where the string was
longer than the maximum length of a column name, due to the
fact that this text was also used as an alias (in the AS
Because not all names retrieved from arbitrary SELECT
statements can be used as view column names due to length and
format restrictions, the server now checks the conformity of
automatically generated column names and rewrites according to
a predefined format any names that are not acceptable as view
column names before storing the final view definition on disk.
In such cases, the name is now rewritten as Name_exp_pos,
where pos is the position of the column. To avoid this
conversion scheme, define explicit, valid names for view
columns using the column_list clause of the CREATE VIEW
As part of this fix, aliases are now generated only for
* While looking for the shortest index for a covering index
scan, the optimizer ignored that a clustered primary key read
the entire table.
* mysqlbinlog had a memory leak in its option-processing code.
* The test for readline during configuration failed when trying
to build MySQL in a directory other than the source tree root.
MySQL RE Team
Hery Ramilison, Karen Langford, MySQL Release Engineers
Database Group, Oracle.
|• MySQL Community Server 5.1.46 has been released||Karen Langford||23 Apr|