







|
Appendix C. MySQL Change History
This appendix lists the changes from version to version in the MySQL
source code through the latest version of MySQL 5.1,
which is currently MySQL 5.1.45. We offer a version of
the Manual for each series of MySQL releases (5.0, 5.1, and so
forth). For information about changes in another release series of
the MySQL database software, see the corresponding version of this
Manual.
We update this section as we add new features in the
5.1 series, so that everybody can follow the
development process.
Note that we tend to update the manual at the same time we make
changes to MySQL. If you find a recent version of MySQL listed here
that you can't find on our download page
(http://dev.mysql.com/downloads/), it means that the version has
not yet been released.
The date mentioned with a release version is the date of the last
Bazaar ChangeSet on which the release was based, not the date when
the packages were made available. The binaries are usually made
available a few days after the date of the tagged ChangeSet, because
building and testing all packages takes some time.
The manual included in the source and binary distributions may not
be fully accurate when it comes to the release changelog entries,
because the integration of the manual happens at build time. For the
most up-to-date release changelog, please refer to the online
version instead.
C.1. Changes in Release 5.1.x (Production)
An overview of which features were added in MySQL 5.1
can be found here: Section 1.5, “What Is New in MySQL 5.1”.
For a full list of changes, please refer to the changelog sections
for each individual 5.1 release.
For discussion of upgrade issues that you many encounter for
upgrades to MySQL 5.1 from MySQL 5.0, see
Section 2.4.1.1, “Upgrading from MySQL 5.0 to 5.1”.
For changes relating to MySQL Cluster NDB 6.x, see
Section 17.7, “Changes in MySQL Cluster NDB 6.X and 7.X”.
C.1.1. Changes in MySQL 5.1.45 (Not yet released)InnoDB Plugin Notes: C.1.2. Changes in MySQL 5.1.44 (Not yet released)InnoDB Plugin Notes: Functionality added or changed: Replication:
Introduced the
--binlog-direct-non-transactional-updates
server option. This option causes updates using the
statement-based logging format to tables using non-transactional
engines to be written directly to the binary log, rather than to
the transaction cache.
Before using this option, be certain that you have no
dependencies between transactional and non-transactional tables.
A statement that both selects from an
InnoDB table and inserts into a
MyISAM table is an example of such
a dependency. For more information, see
Section 16.1.3.4, “Binary Log Options and Variables”.
(Bug#46364) See also Bug#28976, Bug#40116.
Bugs fixed: Partitioning:
When an ALTER TABLE
... REORGANIZE PARTITION statement on an
InnoDB table failed due to
innodb_lock_wait_timeout
expiring while waiting for a lock, InnoDB did
not clean up any temporary files or tables which it had created.
Attempting to reissue the ALTER
TABLE statement following the timeout could lead to
storage engine errors, or possibly a crash of the server.
(Bug#47343) Replication:
In some cases, inserting into a table with many columns could
cause the binary log to become corrupted.
(Bug#50018) See also Bug#42749. Replication:
When using row-based replication, setting a
BIT or
CHAR column of a
MyISAM table to
NULL, then trying to delete from the table,
caused the slave to fail with the error Can't find
record in table.
(Bug#49481, Bug#49482) Replication:
When logging in row-based mode, DDL statements are actually
logged as statements; however, statements that affected
temporary tables and followed DDL statements failed to reset the
binary log format to ROW, with the result
that these statements were logged using the statement-based
format. Now the state of
binlog_format is restored after
a DDL statement has been written to the binary log.
(Bug#49132) Replication:
When using row-based logging, the statement
CREATE TABLE t IF
NOT EXIST ... SELECT was logged as
CREATE TEMPORARY
TABLE t IF NOT EXIST ... SELECT when
t already existed as a temporary table. This
was caused by the fact that the temporary table was opened and
the results of the SELECT were
inserted into it when a temporary table existed and had the same
name.
Now, when this statement is executed, t is
created as a base table, the results of the
SELECT are inserted into it
— even if there already exists a temporary table having
the same name — and the statement is logged correctly.
(Bug#47418) See also Bug#47442. Replication:
Due to a change in the size of event representations in the
binary log, when replicating from a MySQL 4.1 master to a slave
running MySQL 5.0.60 or later, the
START SLAVE
UNTIL statement did not function correctly, stopping
at the wrong position in the log. Now the slave detects that the
master is using the older version of the binary log format, and
corrects for the difference in event size, so that the slave
stops in the correct position.
(Bug#47142)
The SSL certificates in the test suite were about to expire.
They have been updated with expiration dates in the year 2015.
(Bug#50642)
The printstack function does not exist ong
Solaris 8 or earlier, which would lead to a compilation failure.
(Bug#50409)
A user could see tables in
INFORMATION_SCHEMA.TABLES without
appropriate privileges for them.
(Bug#50276)
Debug output for join structures was garbled.
(Bug#50271)
The filesort sorting method applied to a
CHAR(0) column could lead to a
server crash.
(Bug#49897)
sql_buffer_result had an effect
on non-SELECT statements,
contrary to the documentation.
(Bug#49552)
In some cases a subquery need not be evaluated because it
returns only aggregate values that can be calculated from table
metadata. This sometimes was not handled by the enclosing
subquery, resulting in a server crash.
(Bug#49512)
The method for comparing INFORMATION_SCHEMA
names and database names was nonoptimal and an improvement was
made: When the database name length is already known, a length
check is made first and content comparison skipped if the
lengths are unequal.
(Bug#49501)
The MD5() and
SHA1() functions had excessive
overhead for short strings.
(Bug#49491)
Mixing full-text searches and row expressions caused a crash.
(Bug#49445)
Creating or dropping a table with 1023 transactions active
caused an assertion failure.
(Bug#49238)
mysql-test-run.pl now recognizes the
MTR_TESTCASE_TIMEOUT,
MTR_SUITE_TIMEOUT,
MTR_SHUTDOWN_TIMEOUT, and
MTR_START_TIMEOUT environment variables. If
they are set, their values are used to set the
--testcase-timeout,
--suite-timeout,
--shutdown-timeout, and
--start-timeout options, respectively.
(Bug#49210)
C.1.3. Changes in MySQL 5.1.43 (15 January 2010)InnoDB Plugin Notes: Functionality added or changed: Partitioning:
The UNIX_TIMESTAMP() function is
now supported in partitioning expressions using
TIMESTAMP columns. For example,
it now possible to create a partitioned table such as this one:
CREATE TABLE t (c TIMESTAMP)
PARTITION BY RANGE ( UNIX_TIMESTAMP(c) ) (
PARTITION p0 VALUES LESS THAN (631148400),
PARTITION p1 VALUES LESS THAN (946681200),
PARTITION p2 VALUES LESS THAN (MAXVALUE)
);
All other expressions involving
TIMESTAMP values are now rejected
with an error when attempting to create a new partitioned table
or to alter an existing partitioned table.
When accessing an existing partitioned table having a
timezone-dependent partitioning function (where the table was
using a previous version of MySQL), a warning rather than an
error is issued. In such cases, you should fix the table. One
way of doing this is to alter the table's partitioning
expression so that it uses
UNIX_TIMESTAMP().
(Bug#42849)
Bugs fixed: Security Fix:
For servers built with yaSSL, a preauthorization buffer overflow
could cause memory corruption or a server crash. We thank Evgeny
Legerov from Intevydis for providing us with a proof-of-concept
script that allowed us to reproduce this bug.
(Bug#50227, CVE-2009-4484) Important Change: Replication:
The RAND() function is now marked
as unsafe for statement-based replication. Using this function
now generates a warning when
binlog_format=STATEMENT and causes the the
format to switch to row-based logging when
binlog_format=MIXED.
This change is being introduced because, when
RAND() was logged in statement
mode, the seed was also written to the binary log, so the
replication slave generated the same sequence of random numbers
as was generated on the master. While this could make
replication work in some cases, the order of affected rows was
still not guaranteed when this function was used in statements
that could update multiple rows, such as
UPDATE or
INSERT ...
SELECT; if the master and the slave retrieved rows in
different order, they began to diverge.
(Bug#49222) Partitioning:
When used on partitioned tables, the
records_in_range handler call checked all
partitions, rather than the unpruned partitions only.
(Bug#48846) See also Bug#37252, Bug#47261. Partitioning:
A query that searched on a ucs2 column failed
if the table was partitioned.
(Bug#48737) Replication:
A LOAD DATA
INFILE statement that loaded data into a table having
a column name that had to be escaped (such as `key`
INT) caused replication to fail when logging in mixed
or statement mode. In such cases, the master wrote the
LOAD DATA event into the binary
log without escaping the column names.
(Bug#49479) See also Bug#47927. Replication:
Spatial data types caused row-based replication to crash.
(Bug#48776) Replication:
A flaw in the implementation of the purging of binary logs could
result in orphaned files being left behind in the following
circumstances:
In addition, if the slave was not connected during the purge
operation, it was possible for a log file that was in use to be
removed; this could lead data loss and possible inconsistencies
between the master and slave.
(Bug#45292) Replication:
When using the STATEMENT or
MIXED logging format, the statements
LOAD DATA CONCURRENT
LOCAL INFILE and
LOAD DATA CONCURRENT
INFILE were logged as
LOAD DATA LOCAL
INFILE and
LOAD DATA LOCAL
INFILE, respectively (in other words, the
CONCURRENT keyword was omitted). As a result,
when using replication with either of these logging modes,
queries on the slaves were blocked by the replication SQL thread
while trying to execute the affected statements.
(Bug#34628) Replication:
Manually removing entries from the binary log index file on a
replication master could cause the server to repeatedly send the
same binary log file to slaves.
(Bug#28421) Cluster Replication:
When expire_logs_days was set,
the thread performing the purge of the log files could deadlock,
causing all binary log operations to stop.
(Bug#49536)
Within a stored routine, selecting the result of
CONCAT_WS() with a routine
parameter argument into a user variable could return incorrect
results.
(Bug#50096)
The IBMDB2I storage engine was
missing from the i5os 64-bit distribution of MySQL 5.1.42. It is
now included again.
(Bug#50059)
EXPLAIN EXTENDED UNION
... ORDER BY caused a crash when the ORDER
BY referred to a nonconstant or full-text function or
a subquery.
(Bug#49734)
The push_warning_printf() function was being
called with an invalid error level
MYSQL_ERROR::WARN_LEVEL_ERROR, causing an
assertion failure. To fix the problem,
MYSQL_ERROR::WARN_LEVEL_ERROR has been
replaced by MYSQL_ERROR::WARN_LEVEL_WARN.
(Bug#49638)
Some prepared statements could raise an assertion when
re-executed.
(Bug#49570)
A Valgrind error in
make_cond_for_table_from_pred() was
corrected. Thanks to Sergey Petrunya for the patch to fix this
bug.
(Bug#49506)
When compiling on Windows, an error in the CMake definitions for
InnoDB would cause the engine to be built
incorrectly.
(Bug#49502)
Valgrind warnings for CHECKSUM
TABLE were corrected.
(Bug#49465)
Specifying an index algorithm (such as BTREE)
for SPATIAL or FULLTEXT
indexes caused a server crash. These index types do not support
algorithm specification, and it is now disallowed to do so.
(Bug#49250)
The optimizer sometimes incorrectly handled conditions of the
form WHERE
col_name='const1'
AND
col_name='const2'.
(Bug#49199)
Execution of DECODE() and
ENCODE() could be inefficient
because multiple executions within a single statement
reinitialized the random generator multiple times even with
constant parameters.
(Bug#49141)
MySQL 5.1 does not support 2-byte collation numbers, but did not
check the number and crashed for out-of-range values.
(Bug#49134)
With binary logging enabled,
REVOKE ... ON
{PROCEDURE|FUNCTION} FROM ... could cause a crash.
(Bug#49119)
The LIKE operator did not work
correctly when using an index for a ucs2
column.
(Bug#49028)
check_key_in_view() was missing a
DBUG_RETURN in one code branch, causing a
crash in debug builds.
(Bug#48995)
Several strmake() calls had an incorrect
length argument (too large by one).
(Bug#48983)
On Fedora 12, strmov() did not guarantee
correct operation for overlapping source and destination buffer.
Calls were fixed to use an overlap-safe version instead.
(Bug#48866)
Incomplete reset of internal TABLE structures
could cause a crash with
eq_ref table access in
subqueries.
(Bug#48709)
Re-execution of a prepared statement could cause a server crash.
(Bug#48508)
The error message for
ER_UPDATE_INFO was subject to
buffer overflow or truncation.
(Bug#48500)
SHOW BINLOG EVENTS could fail
with a error: Wrong offset or I/O error.
(Bug#48357)
Valgrind warnings related to binary logging of
LOAD DATA
INFILE statements were corrected.
(Bug#48340)
An aliasing violation in the C API could lead to a crash.
(Bug#48284)
With one thread waiting for a lock on a table, if another thread
dropped the table and created a new table with the same name and
structure, the first thread would not notice that the table had
been re-created and would try to used cached metadata that
belonged to the old table but had been freed.
(Bug#48157)
The InnoDB Monitor could fail to print
diagnostic information after a long lock wait.
(Bug#47814)
Queries containing GROUP BY ... WITH ROLLUP
that did not use indexes could return incorrect results.
(Bug#47650)
If an invocation of a stored procedure failed in the table-open
stage, subsequent invocations that did not fail in that stage
could cause a crash.
(Bug#47649)
On Solaris, no stack trace was printed to the error log after a
crash.
(Bug#47391)
A crash occurred when a user variable that was assigned to a
subquery result was used as a result field in a
SELECT statement with aggregate
functions.
(Bug#47371)
The first execution of
STOP SLAVE
UNTIL stopped too early.
(Bug#47210)
When the mysql client was invoked with the
--vertical option, it ignored the
--skip-column-names option.
(Bug#47147)
It was possible for init_available_charsets()
not to initialize correctly.
(Bug#45058)
Comparison with NULL values sometimes did not
produce a correct result.
(Bug#42760)
Crash recovery did not work for
InnoDB temporary tables.
(Bug#41609)
The mysql_upgrade command would create three
additional fields to the mysql.proc table
(character_set_client,
collation_connection, and
db_collation), but did not populate the
fields with correct values. This would lead to error messages
reported during stored procedure execution.
(Bug#41569)
When compressed MyISAM files were
opened, they were always memory mapped, sometimes causing
memory-swapping problems. To deal with this, a new system
variable, myisam_mmap_size, was added to
limit the amount of memory used for memory mapping of
MyISAM files.
(Bug#37408)
A race condition on the privilege hash tables allowed one thread
to try to delete elements that had already been deleted by
another thread. A consequence was that
SET
PASSWORD or
FLUSH
PRIVILEGES could cause a crash.
(Bug#35589, Bug#35591)
ALTER TABLE with both
DROP COLUMN and ADD COLUMN
clauses could crash or lock up the server.
(Bug#31145)
C.1.4. Changes in MySQL 5.1.42 (15 December 2009)InnoDB Plugin Notes: Release availability: Bugs fixed: Performance:
When the query cache is fragmented, the size of the free block
lists in the memory bins grows, which causes query cache
invalidation to become slow. There is now a 50ms timeout for a
SELECT statement waiting for the
query cache lock. If the timeout expires, the statement executes
without using the query cache.
(Bug#39253) See also Bug#21074. Important Change: Replication:
The following functions have been marked unsafe for
statement-based replication:
None of the functions just listed are guaranteed to replicate
correctly when using the statement-based format, because they
can produce different results on the master and the slave. The
use of any of these functions while
binlog_format is set to
STATEMENT is logged with the warning,
Statement is not safe to log in statement
format. When
binlog_format is set to
MIXED, the binary logging format is
automatically switched to the row-based format whenever one of
these functions is used.
(Bug#47995) Partitioning:
In some cases, it was not possible to add a new column to a
table that had subpartitions.
(Bug#48276) Partitioning:
SELECT
COUNT(*) from a partitioned table failed when using
the ONLY_FULL_GROUP_BY SQL
mode.
(Bug#46923) This regression was introduced by Bug#45807. Partitioning:
SUBPARTITION BY KEY failed with
DEFAULT CHARSET=utf8.
(Bug#45904) Replication:
When using row-based logging, TRUNCATE
TABLE was written to the binary log even if the
affected table was temporary, causing replication to fail.
(Bug#48350) Replication:
Replicating TEXT or
VARCHAR columns declared as
NULL on the master but NOT
NULL on the slave caused the slave to crash.
(Bug#43789) See also Bug#38850, Bug#43783, Bug#43785, Bug#47741, Bug#48091. Replication:
When using row-based format, replication failed with the error
Could not execute Write_rows event on table ...;
Field '...' doesn't have a default value when an
INSERT was made on the master
without specifying a value for a column having no default, even
if strict server SQL mode was not in use and the statement would
otherwise have succeeded on the master. Now the SQL mode is
checked, and the statement is replicated unless strict mode is
in effect. For more information, see
Section 5.1.8, “Server SQL Modes”.
(Bug#38173) See also Bug#38262, Bug#43992.
The result of comparison between nullable
BIGINT and
INT columns was inconsistent.
(Bug#49517)
Incorrect cache initialization prevented storage of converted
constant values and could produce incorrect comparison results.
(Bug#49489)
Comparisons involving YEAR values
could produce incorrect results.
(Bug#49480) See also Bug#43668.
InnoDB did not reset table
AUTO_INCREMENT values to the last used values
after a server restart.
(Bug#49032)
If a query involving a table was terminated with
KILL, a subsequent
SHOW CREATE TABLE for that table
caused a server crash.
(Bug#48985)
Privileges for stored routines were ignored for mixed-case
routine names.
(Bug#48872) See also Bug#41049.
Building MySQL on Fedora Core 12 64-bit would due to errors in
comp_err.
(Bug#48864)
Concurrent ALTER TABLE operations
on an InnoDB table could raise an
assertion.
(Bug#48782)
Certain INTERVAL expressions could cause a
crash on 64-bit systems.
(Bug#48739)
During query execution, ranges could be merged incorrectly for
OR operations and return an
incorrect result.
(Bug#48665)
The InnoDB Table Monitor reported
the FLOAT and
DOUBLE data types incorrectly.
(Bug#48526)
With row-based binary logging, the server crashed for statements
of the form CREATE TABLE IF NOT EXISTS
existing_view LIKE
temporary_table. This
occurred because the server handled the existing view as a table
when logging the statement.
(Bug#48506)
DISTINCT was ignored for queries with
GROUP BY WITH ROLLUP and only
const tables.
(Bug#48475)
Loose index scan was inappropriately chosen for some
WHERE conditions.
(Bug#48472)
If the InnoDB tablespace was
configured with too small a value, the server could crash and
corrupt the tablespace.
(Bug#48469)
Parts of the range optimizer could be initialized incorrectly,
resulting in Valgrind errors.
(Bug#48459)
A bad typecast could cause query execution to allocate large
amounts of memory.
(Bug#48458)
On Windows, InnoDB could not be
built as a statically linked library.
(Bug#48317)
mysql_secure_installation did not work on
Solaris.
(Bug#48086)
When running mysql_secure_installation, the
command would fail if the root password contained multiple
spaces, \, # or quote characters.
(Bug#48031)
MATCH IN BOOLEAN MODE searches could return
too many results inside a subquery.
(Bug#47930)
Using REPLACE to update a
previously inserted negative value in an
AUTO_INCREMENT coumn in an
InnoDB table caused the table
auto-increment value to be updated to 2147483647.
(Bug#47720)
If a session held a global read lock acquired with
FLUSH TABLES WITH READ
LOCK, a lock for one table acquired with
LOCK TABLES, and issued an
INSERT DELAYED statement for
another table, deadlock could occur.
(Bug#47682)
The mysql client status
command displayed an incorrect value for the server character
set.
(Bug#47671)
Connecting to a 4.1.x server from a 5.1.x or higher
mysql client resulted in a memory-free error
when disconnecting.
(Bug#47655)
Assignment of a system variable sharing the same base name as a
declared stored program variable in the same context could lead
to a crash.
(Bug#47627)
mysqladmin debug could crash on 64-bit
systems.
(Bug#47382)
The innodb_file_format_check
system variable could not be set at runtime to
DEFAULT or to the value of a user-defined
variable.
(Bug#47167)
After a binary upgrade to MySQL 5.1 from a MySQL 5.0
installation that contains ARCHIVE tables,
accessing those tables caused the server to crash, even if you
had run mysql_upgrade or CHECK TABLE
... FOR UPGRADE.
To work around this problem, use mysqldump to
dump all ARCHIVE tables before upgrading, and
reload them into MySQL 5.1 after upgrading. The same problem
occurs for binary downgrades from MySQL 5.1 to 5.0.
(Bug#47012)
The Mac OS X MySQL Preference Pane component
was not built for 64-bit, which would trigger the System
Preferences application to restart into 32-bit mode.
(Bug#46935)
The IGNORE clause on a
DELETE statement masked an SQL
statement error that occurred during trigger processing.
(Bug#46425)
On 64-bit systems,
--skip-innodb
did not skip InnoDB startup.
(Bug#46043)
Valgrind errors for InnoDB Plugin were
corrected.
(Bug#45992, Bug#46656)
The return value was not checked for some
my_hash_insert() calls.
(Bug#45613)
Truncation of DECIMAL values
could lead to assertion failures; for example, when deducing the
type of a table column from a literal
DECIMAL value.
(Bug#45261) See also Bug#48370.
For YEAR(2) values,
MIN(),
MAX(), and comparisons could
yield incorrect results.
(Bug#43668)
The server could crash when attempting to access a
non-conformant mysql.proc system table. For
example, the server could crash when invoking stored
procedure-related statements after an upgrade from MySQL 5.0 to
5.1 without running mysql_upgrade.
(Bug#41726)
Use of InnoDB monitoring
(SHOW ENGINE INNODB
STATUS or one of the
InnoDB Monitor tables) could cause
a server crash due to invalid access to a shared variable in a
concurrent environment. This is a further fix for a regression
introduced in MySQL 5.1.38 to the original fix in MySQL 5.1.31.
(Bug#38883)
When running mysql_secure_installation on
Windows, the command would fail to load a required module,
Term::ReadKey, which was required for correct
operation.
(Bug#35106)
If the --log-bin server option
was set to a directory name with a trailing component separator
character, the basename of the binary log files was empty so
that the created files were named .000001
and .index. The same thing occurred with
the --log-bin-index,
--relay-log, and
--relay-log-index options. Now
the server reports and error and exits.
(Bug#34739)
If a comparison involved a constant value that required type
conversion, the converted value might not be cached, resulting
in repeated conversion and poorer performance.
(Bug#34384)
Using the SHOW
ENGINE INNODB STATUS statement when using partitions
in InnoDB tables caused Invalid
(old?) table or database name errors to be logged.
(Bug#32430)
On some Windows systems, InnoDB could report
Operating system error number 995 in a file
operation due to transient driver or hardware
problems. InnoDB now retries the operation
and adds Retry attempt is made to the error
message.
(Bug#3139)
C.1.5. Changes in MySQL 5.1.41 (05 November 2009)InnoDB Plugin Notes: Functionality added or changed:
The InnoDB buffer pool is divided
into two sublists: A new sublist containing blocks that are
heavily used by queries, and an old sublist containing less-used
blocks and from which candidates for eviction are taken. In the
default operation of the buffer pool, a block when read in is
loaded at the midpoint and then moved immediately to the head of
the new sublist as soon as an access occurs. In the case of a
table scan (such as performed for a mysqldump
operation), each block read by the scan ends up moving to the
head of the new sublist because multiple rows are accessed from
each block. This occurs even for a one-time scan, where the
blocks are not otherwise used by other queries. Blocks may also
be loaded by the read-ahead background thread and then moved to
the head of the new sublist by a single access. These effects
can be disadvantageous because they push blocks that are in
heavy use by other queries out of the new sublist to the old
sublist where they become subject to eviction.
InnoDB Plugin now provides two system
variables that enable LRU algorithm tuning:
innodb_old_blocks_pct
Specifies the approximate percentage of the buffer pool used
for the old block sublist. The range of values is 5 to 95.
The default value is 37 (that is, 3/8 of the pool).
innodb_old_blocks_time
Specifies how long in milliseconds (ms) a block inserted
into the old sublist must stay there after its first access
before it can be moved to the new sublist. The default value
is 0: A block inserted into the old sublist moves
immediately to the new sublist the first time it is
accessed, no matter how soon after insertion the access
occurs. If the value is greater than 0, blocks remain in the
old sublist until an access occurs at least that many ms
after the first access. For example, a value of 1000 causes
blocks to stay in the old sublist for 1 second after the
first access before they become eligible to move to the new
sublist. See Section 7.4.6, “The InnoDB Buffer Pool”
For additional information, see
Section 7.4.6, “The InnoDB Buffer Pool”.
(Bug#45015)
For InnoDB Plugin, two status variables have
been added to SHOW STATUS output.
Innodb_buffer_pool_read_ahead
and
Innodb_buffer_pool_read_ahead_evicted
indicate the number of pages read in by the
InnoDB read-ahead background
thread, and the number of such pages evicted without ever being
accessed, respectively. Also, the status variables
Innodb_buffer_pool_read_ahead_rnd
and
Innodb_buffer_pool_read_ahead_seq
status variables have been removed.
The built-in version of InnoDB is
not affected by these changes.
(Bug#42885)
The server now supports a Debug Sync facility for thread
synchronization during testing and debugging. To compile in this
facility, configure MySQL with the
--enable-debug-sync option.
The debug_sync system variable
provides the user interface Debug Sync.
mysqld and
mysql-test-run.pl support a
--debug-sync-timeout option to
enable the facility and set the default synchronization point
timeout.
Bugs fixed: Important Change: Security Fix:
Additional corrections were made for the symlink-related
privilege problem originally addressed in MySQL 5.1.24. The
original fix did not correctly handle the data directory path
name if it contained symlinked directories in its path, and the
check was made only at table-creation time, not at table-opening
time later.
(Bug#32167, CVE-2008-2079) See also Bug#39277. Security Fix:
MySQL clients linked against OpenSSL can be tricked not to check
server certificates.
(Bug#47320, CVE-2009-4028) Partitioning:
An ALTER TABLE ...
ADD PARTITION statement that caused
open_files_limit to be exceeded
led to a crash of the MySQL server.
(Bug#46922) See also Bug#47343. Partitioning:
The cardinality of indexes on partitioned tables was calculated
using the first partition in the table, which could result in
suboptimal query execution plans being chosen. Now the partition
having the most records is used instead, which should result in
better use of indexes and thus improved performance of queries
against partitioned tables in many if not most cases.
(Bug#44059) Replication:
This issue occurred in MySQL 5.1.40 only.
(Bug#48297) Replication:
When a session was closed on the master, temporary tables
belonging to that session were logged with the wrong database
names when either of the following conditions was true:
The length of the name of the database to which the
temporary table belonged was greater than the length of the
current database name.
The current database was not set.
(Bug#48216) See also Bug#46861, Bug#48297. Replication:
When using row-based replication, changes to non-transactional
tables that occurred early in a transaction were not immediately
flushed upon committing a statement. This behavior could break
consistency since changes made to non-transactional tables
become immediately visible to other connections.
(Bug#47678) See also Bug#47287, Bug#46864, Bug#43929, Bug#46129. Replication:
When mysqlbinlog
--verbose was used to read a
binary log that had been recorded using the row-based format,
the output for events that updated some but not all columns of
tables was not correct.
(Bug#47323) Replication:
When using the row-based format to replicate a transaction
involving both transactional and non-transactional engines,
which contained a DML statement affecting multiple rows, the
statement failed; if this transaction was followed by a
COMMIT, the master and the slave
could diverge, because the statement was correctly rolled back
on the master, but was applied on the slave.
(Bug#47287) See also Bug#46864. Replication:
A problem with the BINLOG statement in the
output of mysqlbinlog could break
replication; statements could be logged with the server ID
stored within events by the BINLOG statement
rather than the ID of the running server. With this fix, the
server ID of the server executing the statements can no longer
be overridden by the server ID stored in the binary log's
format description statement.
(Bug#46640) This regression was introduced by Bug#32407. Replication:
When using statement-based replication and the transaction
isolation level was set to READ
COMMITTED or a less strict level,
InnoDB returned an error even if
the statement in question was filtered out according to the
--binlog-do-db or
--binlog-ignore-db rules in
effect at the time.
(Bug#42829) Replication:
FLUSH LOGS did
not actually close and reopen the binary log index file.
(Bug#34582) See also Bug#5.0.90.
SUM() artificially increased the
precision of a DECIMAL argument,
which was truncated when a temporary table was created to hold
the results.
(Bug#48370) See also Bug#45261.
If an outer query was invalid, a subquery might not even be set
up. EXPLAIN
EXTENDED did not expect this and caused a crash by
trying to dereference improperly set up information.
(Bug#48295)
A query containing a view using temporary tables and multiple
tables in the FROM clause and
PROCEDURE ANALYSE() caused a server crash.
As a result of this bug fix, PROCEDURE
ANALYSE() is legal only in a top-level
SELECT.
(Bug#48293) See also Bug#46184.
Error handling was missing for
SELECT statements containing
subqueries in the WHERE clause and that
assigned a SELECT result to a
user variable. The server could crash as a result.
(Bug#48291)
An assertion could fail if the optimizer used a
SPATIAL index.
(Bug#48258, Bug#47019)
Memory-allocation failures were handled incorrectly in the
InnoDB
os_mem_alloc_large() function.
(Bug#48237)
WHERE clauses with
outer_value_list NOT IN
subquery were handled
incorrectly if the outer value list contained multiple items at
least one of which could be NULL.
(Bug#48177)
A combination of GROUP BY WITH ROLLUP,
DISTINCT and the
const join type in a query
caused a server crash when the optimizer chose to employ a
temporary table to resolve DISTINCT.
(Bug#48131)
In some cases, using a null microsecond part in a
WHERE condition (for example, WHERE
date_time_field <= 'YYYY-MM-DD HH:MM:SS.0000')
could lead to incorrect results due to improper
DATETIME comparison.
(Bug#47963)
A build configured using the
--without-server option did
not compile the yaSSL code, so if --with-ssl
was also used, the build failed.
(Bug#47957)
When a query used a DATE or
DATETIME value formatted using
any separator characters other than hyphen
('-') and a >=
condition matching only the greatest value in an indexed column,
the result was empty if an index range scan was employed.
(Bug#47925)
mysys/mf_keycache.c requires threading, but
no test was made for thread support.
(Bug#47923)
For debug builds, an assertion could fail during the next
statement executed for a temporary table after a multiple-table
UPDATE involving that table and
modified an AUTO_INCREMENT column with a
user-supplied value.
(Bug#47919)
The mysys/mf_strip.c file, which defines
the strip_sp() function, has been removed
from the MySQL source. The function was no longer used within
the main build, and the supplied function was causing symbol
errors on Windows builds.
(Bug#47857)
The Windows build for MySQL would compile the
split.c and debug.c
files unnecessarily, causing additional symbols to be included
in mysqld.
(Bug#47850)
When building storage engines on Windows it was not possible to
specify additional libraries within the CMake file required for
the build. An ${engine}_LIBS macro has been
added to the files to support these additional storage-engine
specific libraries.
(Bug#47797)
When building a pluggable storage engine on Windows, the engine
name could be based on the directory name where the engine was
located, rather than the configured storage engine name.
(Bug#47795)
During cleanup of a stored procedure's internal structures, the
flag to ignore the errors for
INSERT IGNORE
or UPDATE
IGNORE was not cleaned up, which could result in a
server crash.
(Bug#47788)
If the first argument to
GeomFromWKB() function was a
geometry value, the function just returned its value. However,
it failed to preserve the argument's
null_value flag, which caused an unexpected
NULL value to be returned to the caller,
resulting in a server crash.
(Bug#47780)
InnoDB could crash when updating
spatial values.
(Bug#47777)
On WIndows, when an idle named pipe connection was forcibly
closed with a KILL statement or
because the server was being shut down, the thread that was
closing the connection would hang infinitely.
(Bug#47571, Bug#31621)
A function call could end without throwing an error or setting
the return value. For example, this could happen when an error
occurred while calculating the return value. This is fixed by
setting the value to NULL when an error
occurs during evaluation of an expression.
(Bug#47412)
A simple SELECT with implicit
grouping could return many rows rather than a single row if the
query was ordered by the aggregated column in the select list.
(Bug#47280)
An assertion could be raised for CREATE
TABLE if there was a pending
INSERT DELAYED
or REPLACE
DELAYED for the same table.
(Bug#47274)
InnoDB raised errors in some cases in a
manner not compatible with SIGNAL and
RESIGNAL.
(Bug#47233)
If an InnoDB table was created with
the AUTO_INCREMENT table option to specify an
initial auto-increment value, and an index was added in a
separate operation later, the auto-increment value was lost
(subsequent inserts began at 1 rather than the specified value).
(Bug#47125)
Incorrect handling of predicates involving
NULL by the range optimizer could lead to an
infinite loop during query execution.
(Bug#47123)
Repair by sort or parallel repair of
MyISAM tables could fail to fail
over to repair with key cache.
(Bug#47073)
InnoDB Plugin did not compile on some Solaris
systems.
(Bug#47058)
On WIndows, when a failed I/O operation occurred with return
code of ERROR_WORKING_SET_QUOTA,
InnoDB intentionally crashed the
server. Now InnoDB sleeps for 100ms
and retries the failed operation.
(Bug#47055)
InnoDB now ignores negative values
supplied by a user for an AUTO_INCREMENT
column when calculating the next value to store in the data
dictionary. Setting AUTO_INCREMENT columns to
negative values is undefined behavior and this change should
bring the behavior of InnoDB closer
to what users expect.
(Bug#46965)
When MySQL crashed (or a snapshot was taken that simulates a
crash), it was possible that internal XA transactions (used to
synchronize the binary log and
InnoDB) could be left in a
PREPARED state, whereas they should be rolled
back. This occurred when the
server_id value changed before
the restart, because that value was used to construct XID
values.
Now the restriction is relaxed that the
server_id value be consistent
for XID values to be considered valid. The rollback phase should
then be able to clean up all pending XA transactions.
(Bug#46944)
InnoDB Plugin did not compile using
gcc 4.1 on PPC systems.
(Bug#46718)
If InnoDB Plugin reached its limit on the
number of concurrent transactions (1023), it wrote a descriptive
message to the error log but returned a misleading error message
to the client, or an assertion failure occurred.
(Bug#46672) See also Bug#18828.
A Valgrind error during index creation by InnoDB
Plugin was corrected.
(Bug#46657)
Concurrent INSERT INTO
... SELECT statements for an InnoDB
table could cause an AUTO_INCREMENT assertion
failure.
(Bug#46650)
If a transaction was rolled back inside
InnoDB due to a deadlock or lock
wait timeout, and a statement in the transaction had an
IGNORE clause, the server could crash at the
end of the statement or on shutdown.
(Bug#46539)
Trailing spaces were not ignored for user-defined collations
that mapped spaces to a character other than 0x20.
(Bug#46448) See also Bug#29468.
The GPL and commercial license headers had different sizes, so
that error log, backtrace, core dump, and cluster trace file
line numbers could be off by one if they were not checked
against the version of the source used for the build. (For
example, checking a GPL build backtrace against commercial
sources.)
(Bug#46216)
InnoDB did not disallow creation of an index
with the name GEN_CLUST_INDEX, which is used
internally.
(Bug#46000)
During the build of the Red Hat IA64 MySQL server RPM, the
system library link order was incorrect. This made the resulting
Red Hat IA64 RPM depend on "libc.so.6.1(GLIBC_PRIVATE)(64bit)",
thus preventing installation of the package.
(Bug#45706)
The caseinfo member of the
CHARSET_INFO structure was not initialized
for user-defined Unicode collations, leading to a server crash.
(Bug#45645)
With InnoDB Plugin, renaming a table column
and then creating an index on the renamed column caused a server
crash to the .frm file and the
InnoDB data directory going out of sync. Now
InnoDB Plugin 1.0.5 returns an error instead:
ERROR 1034 (HY000): Incorrect key file for table
'tbl_name'; try to repair
it. To work around the problem, create another table
with the same structure and copy the original table to it.
(Bug#44571)
An InnoDB error message incorrectly
referred to the nonexistent
innodb_max_files_open variable rather than to
innodb_open_files.
(Bug#44338)
For ALTER TABLE, renaming a
DATETIME or
TIMESTAMP column unnecessarily
caused a table copy operation.
(Bug#43508)
The weekday names for the Romanian
lc_time_names locale
'ro_RO' were incorrect. Thanks to Andrei
Boros for the patch to fix this bug.
(Bug#43207)
XA START could
cause an assertion failure or server crash when it is called
after a unilateral rollback issued by the Resource Manager (both
in a regular transaction and after an XA transaction).
(Bug#43171)
The FORCE INDEX FOR ORDER BY index hint was
ignored when join buffering was used.
(Bug#43029)
Incorrect handling of range predicates combined with
OR operators could yield incorrect
results.
(Bug#42846)
Failure to treat BIT values as
unsigned could lead to unpredictable results.
(Bug#42803)
For the embedded server on Windows,
InnoDB crashed when
innodb_file_per_table was
enabled and a table name was in full path format.
(Bug#42383)
Some queries with nested outer joins could lead to crashes or
incorrect results because an internal data structure was handled
improperly.
(Bug#42116)
In a replication scenario with
innodb_locks_unsafe_for_binlog
enabled on the slave, where rows were changed only on the slave
(not through replication), in some rare cases, many messages of
the following form were written to the slave error log:
InnoDB: Error: unlock row could not find a 4 mode lock
on the record.
(Bug#41756)
After renaming a user, granting that user privileges could
result in the user having additional privileges other than those
granted.
(Bug#41597)
With a nonstandard InnoDB page
size, some error messages became inaccurate.
Note
Changing the page size is not a supported operation and there
is no guarantee that InnoDB will
function normally with a page size other than 16KB. Problems
compiling or running InnoDB may occur. In particular,
ROW_FORMAT=COMPRESSED in the
InnoDB Plugin assumes that the page size is
at most 16KB and uses 14-bit pointers.
A version of InnoDB built for one
page size cannot use data files or log files from a version
built for a different page size.
(Bug#41490)
In some cases, the server did not recognize lettercase
differences between GRANT
attributes such as table name or user name. For example, a user
was able to perform operations on a table with privileges of
another user with the same user name but in a different
lettercase.
In consequence of this bug fix, the collation for the
Routine_name column of the
mysql.proc table is changed from
utf8_bin to
utf8_general_ci.
(Bug#41049) See also Bug#48872.
Simultaneous ANALYZE TABLE
operations for an InnoDB tables
could be subject to a race condition.
(Bug#38996)
Previously, InnoDB performed REPLACE
INTO T SELECT ... FROM S WHERE ... by setting shared
next-key locks on rows from S. Now
InnoDB selects rows from S
with shared locks or as a consistent read, as for
INSERT ...
SELECT. This reduces lock contention between sessions.
(Bug#37232)
When an InnoDB tablespace filled up, an error
was logged to the client, but not to the error log. Also, the
error message was misleading and did not indicate the real
source of the problem.
(Bug#31183)
In mysql, using Control-C to kill the current
query resulted in a ERROR 1053 (08S01): Server shutdown
in progress" message if the query was waiting for a
lock.
(Bug#28141)
C.1.6. Release Notes for MySQL Enterprise 5.1.40sp1 [QSP] (25 November 2009)This is a Service Pack release of the MySQL Enterprise Server 5.1. Bugs fixed: Replication:
When using statement-based or mixed-format replication, the
database name was not written to the binary log when executing a
LOAD DATA statement. This caused
problems when the table being loaded belonged to a database
other than the current database; data could be loaded into the
wrong table (if a table having the same name existed in the
current database) or replication could fail (if no table having
that name existed in the current database). Now a table
referenced in a LOAD DATA
statement is always logged using its fully qualified name when
the database to which it belongs is not the current database.
(Bug#48297) Replication:
When a session was closed on the master, temporary tables
belonging to that session were logged with the wrong database
names when either of the following conditions was true:
The length of the name of the database to which the
temporary table belonged was greater than the length of the
current database name.
The current database was not set.
(Bug#48216) See also Bug#46861, Bug#48297.
SUM() artificially increased the
precision of a DECIMAL argument,
which was truncated when a temporary table was created to hold
the results.
(Bug#48370) See also Bug#45261.
If an outer query was invalid, a subquery might not even be set
up. EXPLAIN
EXTENDED did not expect this and caused a crash by
trying to dereference improperly set up information.
(Bug#48295)
A query containing a view using temporary tables and multiple
tables in the FROM clause and
PROCEDURE ANALYSE() caused a server crash.
As a result of this bug fix, PROCEDURE
ANALYSE() is legal only in a top-level
SELECT.
(Bug#48293) See also Bug#46184.
Error handling was missing for
SELECT statements containing
subqueries in the WHERE clause and that
assigned a SELECT result to a
user variable. The server could crash as a result.
(Bug#48291)
An assertion could fail if the optimizer used a
SPATIAL index.
(Bug#48258, Bug#47019)
A combination of GROUP BY WITH ROLLUP,
DISTINCT and the
const join type in a query
caused a server crash when the optimizer chose to employ a
temporary table to resolve DISTINCT.
(Bug#48131)
In some cases, using a null microsecond part in a
WHERE condition (for example, WHERE
date_time_field <= 'YYYY-MM-DD HH:MM:SS.0000')
could lead to incorrect results due to improper
DATETIME comparison.
(Bug#47963)
When a query used a DATE or
DATETIME value formatted using
any separator characters other than hyphen
('-') and a >=
condition matching only the greatest value in an indexed column,
the result was empty if an index range scan was employed.
(Bug#47925)
During cleanup of a stored procedure's internal structures, the
flag to ignore the errors for
INSERT IGNORE
or UPDATE
IGNORE was not cleaned up, which could result in a
server crash.
(Bug#47788)
If the first argument to
GeomFromWKB() function was a
geometry value, the function just returned its value. However,
it failed to preserve the argument's
null_value flag, which caused an unexpected
NULL value to be returned to the caller,
resulting in a server crash.
(Bug#47780)
InnoDB could crash when updating
spatial values.
(Bug#47777)
Incorrect handling of predicates involving
NULL by the range optimizer could lead to an
infinite loop during query execution.
(Bug#47123)
InnoDB now ignores negative values
supplied by a user for an AUTO_INCREMENT
column when calculating the next value to store in the data
dictionary. Setting AUTO_INCREMENT columns to
negative values is undefined behavior and this change should
bring the behavior of InnoDB closer
to what users expect.
(Bug#46965)
In a replication scenario with
innodb_locks_unsafe_for_binlog
enabled on the slave, where rows were changed only on the slave
(not through replication), in some rare cases, many messages of
the following form were written to the slave error log:
InnoDB: Error: unlock row could not find a 4 mode lock
on the record.
(Bug#41756)
C.1.7. Changes in MySQL 5.1.40 (06 October 2009)InnoDB Plugin Notes:
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 S/390, PowerPC, and generic ia64.
Bugs fixed: Incompatible Change:
In binary installations of MySQL, the supplied
binary-configure script would start and
configure MySQL, even when command help was requested with the
--help command-line option. The
--help, if provided, will no longer start and
install the server.
(Bug#30954) Partitioning:
When reorganizing partitions, not all affected subpartitions
were removed prior to renaming. One way in which the issue was
visible was that attempting to reorganize two partitions into a
single partition having the same name as one of the original
partitions could lead to a crash of the server.
(Bug#47029) See also Bug#45961, Bug#43729. Partitioning:
An online or fast ALTER TABLE of
a partitioned table could leave behind temporary files in the
database directory.
This issue was observed in MySQL 5.1.31 and later only.
(Bug#46483) Partitioning:
When performing an
INSERT ...
SELECT into a partitioned table,
read_buffer_size bytes of
memory were allocated for every partition in the target table,
resulting in consumption of large amounts of memory when the
table had many partitions (more than 100).
This fix changes the method used to estimate the buffer size
required for each partition and limits the total buffer size to
a maximum of approximately 10 times
read_buffer_size.
(Bug#45840) Partitioning:
Inserting negative values into an
AUTO_INCREMENT column of a partitioned table
could lead to apparently unrelated errors or a crash of the
server.
(Bug#45823) Partitioning:
Unnecessary calls were made in the server code for performing
bulk inserts on partitions for which no inserts needed to be
made.
(Bug#35845) See also Bug#35843. Replication:
Performing ALTER
TABLE ... DISABLE KEYS on a slave table caused
row-based replication to fail.
(Bug#47312) Replication:
BEGIN
statements were not included in the output of
mysqlbinlog.
(Bug#46998) Replication:
When using row-based replication,
DROP TEMPORARY TABLE
IF EXISTS was written to the binary log if the table
named in the statement did not exist, even though a
DROP TEMPORARY
TABLE statement should never be logged in row-based
logging mode, whether the table exists or not.
(Bug#46572) Replication:
When using row-based replication, importing a dump made with
mysqldump and replicating a row with an
AUTO_INCREMENT column set to 0, with
NO_AUTO_VALUE_ON_ZERO active
on the master, the row was inserted successfully on the master;
however any setting for
NO_AUTO_VALUE_ON_ZERO was
ignored on the slave. When the AUTO_INCREMENT
column was incremented, this caused replication to fail on the
slave due to a duplicate key error. In some cases it could also
cause the slave to crash.
(Bug#45999) Replication:
Concurrent transactions that inserted rows into a table with an
AUTO_INCREMENT column could break
statement-based or mixed-format replication error 1062
Duplicate entry '...' for key 'PRIMARY'
on the slave. This was especially likely to happen when one of
the transactions activated a trigger that inserted rows into the
table with the AUTO_INCREMENT column,
although other conditions could also cause the issue to
manifest.
(Bug#45677) Replication:
By default, all statements executed by the
mysql_upgrade program on the master are
written to the binary log, then replicated to the slave. In some
cases, this can result in problems; for example, it attempted to
alter log tables on replicated databases (this failed due to
logging being enabled).
As part of this fix, a mysql_upgrade option,
--write-binlog, is added. Its inverse,
--skip-write-binlog, can be used to disable
binary logging while the upgrade is in progress.
(Bug#43579) Replication:
On the master, if a binary log event is larger than
max_allowed_packet, the error
message
ER_MASTER_FATAL_ERROR_READING_BINLOG is
sent to a slave when it requests a dump from the master, thus
leading the I/O thread to stop. On a slave, the I/O thread stops
when receiving a packet larger than
max_allowed_packet.
In both cases, however, there was no
Last_IO_Error
reported, which made it difficult to determine why the slave had
stopped in such cases. Now,
Last_IO_Error
is reported when
max_allowed_packet is exceeded,
and provides the reason for which the slave I/O thread stopped.
(Bug#42914) See also Bug#14068, Bug#47200, Bug#47303. API:
The fix for Bug#24507 could lead in some cases to client
application failures due to a race condition. Now the server
waits for the “dummy” thread to return before
exiting, thus making sure that only one thread can initialize
the POSIX threads library.
(Bug#42850)
The pthread_cond_wait() implementations for
Windows could deadlock in some rare circumstances.
(Bug#47768)
On Mac OS X or Windows, sending a SIGHUP
signal to the server or an asynchronous flush (triggered by
flush_time) caused the server
to crash.
(Bug#47525)
Debug builds could not be compiled with the Sun Studio compiler.
(Bug#47474)
A multiple-table UPDATE involving
a natural join and a mergeable view raised an assertion.
(Bug#47150)
Solaris binary packages now are compiled with
-g0 rather than -g.
(Bug#47137)
EXPLAIN caused a server crash for
certain valid queries.
(Bug#47106)
The configure option
--without-server did not work.
(Bug#46980)
The ARCHIVE storage engine lost
records during a bulk insert.
(Bug#46961)
Failed multiple-table DELETE
statements could raise an assertion.
(Bug#46958)
When creating a new instance on Windows using
mysqld-nt and the
--install parameter, the value of the service
would be set incorrectly, resulting in a failure to start the
configured service.
(Bug#46917)
CONCAT_WS() could return
incorrect results due to an argument buffer also being used as a
result buffer.
(Bug#46815)
The server crashed when re-using outer column references in
correlated subqueries when the enclosing query used a temp
table.
(Bug#46791)
For InnoDB tables, an unnecessary table
rebuild for ALTER TABLE could
sometimes occur for metadata-only changes.
(Bug#46760)
Assertion failure could result from repeated execution of a
stored procedure containing an incorrect query with a subselect.
(Bug#46629)
The server ignored the setting of
sync_frm for
CREATE TABLE ...
LIKE.
(Bug#46591)
An attempt to create a table with the same name as an existing
view could cause a server crash.
(Bug#46384)
A parser problem prevented properly stripping backquotes from an
argument to a user-defined function (UDF). If the UDF was in an
ORDER BY clause, its name would not be
properly resolved against an alias with the same name in the
select list.
(Bug#46259)
Dropping an InnoDB table that used an unknown
collation (created on a different server, for example) caused a
server crash.
(Bug#46256)
Certain SELECT statements
containing DISTINCT, GROUP
BY, and HAVING clauses could hang
in an infinite loop.
(Bug#46159)
InnoDB did not disallow creation of an index
with the name GEN_CLUST_INDEX, which is used
internally.
(Bug#46000)
CREATE TEMPORARY TABLE failed for
InnoDB tables on systems with
case-insensitive file systems when
lower_case_table_names
= 2 and the pathname of the temporary file
directory contained uppercase characters.
(Bug#45638)
Appending values to an ENUM or
SET definition is a metadata
change for which ALTER TABLE need
not rebuild the table, but it was being rebuilt anyway.
(Bug#45567)
The socket system variable was
unavailable on Windows.
(Bug#45498)
When re-installing MySQL on Windows on a server that has a data
directory from a previous MySQL installation, the installer
would fail to identify the existence of the installation and the
password configured for the root user.
(Bug#45200)
Client flags were incorrectly initialized for the embedded
server, causing several tests in the jp test
suite to fail.
(Bug#45159)
InnoDB did not always disallow creating
tables containing columns with names that match the names of
internal columns, such as DB_ROW_ID,
DB_TRX_ID, DB_ROLL_PTR,
and DB_MIX_ID.
(Bug#44369)
SELECT ... WHERE ... IN
(NULL, ...) was executed using a full table scan, even
if the same query without the NULL used an
efficient range scan.
(Bug#44139) See also Bug#18360.
InnoDB use of SELECT
MAX(autoinc_column) could
cause a crash when MySQL data dictionaries went out of sync.
(Bug#44030)
LOAD DATA
INFILE statements were written to the binary log in
such a way that parsing problems could occur when re-executing
the statement from the log.
(Bug#43746)
Selecting from the process list in the embedded server caused a
crash.
(Bug#43733) See also Bug#47304.
Attempts to enable large_pages
with a shared memory segment larger than 4GB caused a server
crash.
(Bug#43606)
A test for stack growth failed on some platforms, leading to
server crashes.
(Bug#42213)
The server used the wrong lock type (always
TL_READ instead of
TL_READ_NO_INSERT when appropriate) for
tables used in subqueries of
UPDATE statements. This led in
some cases to replication failure because statements were
written in the wrong order to the binary log.
(Bug#42108)
The mysql-stress-test.pl test script was
missing from the noinstall packages on
Windows.
(Bug#41546)
Privileges for SHOW CREATE VIEW
were not being checked correctly.
(Bug#35996)
Different invocations of CHECKSUM
TABLE could return different results for a table
containing columns with spatial data types.
(Bug#35570)
Concurrent execution of
FLUSH TABLES
along with SHOW FUNCTION STATUS
or SHOW PROCEDURE STATUS could
cause a server crash.
(Bug#34895)
myisamchk performed parameter value casting
at startup that generated unnecessary warning messages.
(Bug#33785)
When using the ARCHIVE storage
engine, SHOW TABLE STATUS displayed incorrect
information for Max_data_length,
Data_length and
Avg_row_length.
(Bug#29203)
When building MySQL on Windows from source, the
WITH_BERKELEY_STORAGE_ENGINE option would
fail to configure BDB support correctly.
(Bug#27693)
C.1.8. Changes in MySQL 5.1.39 (04 September 2009)Bugs fixed: Performance:
For MyISAM tables with
bulk_insert_buffer_size values
larger than 256KB, the performance of bulk insert operations
such as multiple-row INSERT and
INSERT ...
SELECT operations has been improved greatly when up to
a hundred rows are inserted at the same time.
(Bug#44723) Partitioning:
An INSERT ...
SELECT statement on an empty partition of a
partitioned table failed with ERROR 1030 (HY000): Got
error 124 from storage engine. This issue also
caused queries run against a partitioned table while a
LOAD DATA CONCURRENT
INFILE statement was in progress to fail with the same
error.
(Bug#46639) See also Bug#35845, Bug#44657, Bug#45840. Partitioning:
A partitioned table having a
TIMESTAMP column with a default
value of CURRENT_TIMESTAMP and this column
was not defined using an ON UPDATE option, an
ALTER TABLE ...
REORGANIZE PARTITION statement on the table caused the
TIMESTAMP column value to be set
to CURRENT_TIMESTAMP regardless.
(Bug#46478) Partitioning:
Partition pruning did not always work correctly when the
table's partitioning key used the
TO_DAYS() function.
(Bug#46362) Partitioning:
Attempting to access a partitioned table when partitioning
support was disabled in a MySQL server binary that had been
compiled with partitioning support caused the server to crash.
(Bug#39893) Partitioning:
The use of TO_DAYS() in the
partitioning expression led to selection failures when the
column having the date value contained invalid dates. This
occurred because the function returns NULL in
such cases, and the partition containing NULL values was pruned
away. For example, this problem occurred if
'2001-02-00' was inserted into a
DATE column of such a table, and
a subsequent query on this table used WHERE
date_col < '2001-02-00'
— while '2001-01-01' is less than
'2001-02-00',
TO_DAYS('2001-02-00') evaluates as
NULL, and so the row containing
'2001-01-01' was not returned. Now, for
tables using RANGE or LIST
partitioning and having TO_DAYS()
in the partitioning expression, the NULL
partition is also scanned instead of being ignored.
The fix for this issue also corrects misbehavior such that a
query of the form SELECT * FROM
table WHERE
date_col <
date_val on a table
partitioned by RANGE or
LIST was handled as though the server SQL
mode included
ALLOW_INVALID_DATES even if
this was not actually part of the server SQL mode at the time
the query was issued.
(Bug#20577) See also Bug#18198, Bug#32021, Bug#46362. Replication:
Performing a multi-row update of the
AUTO_INCREMENT column of a transactional
table could result in an inconsistency between master and slave
when there was a trigger on the transactional table that updated
a non-transactional table. When such an update failed on the
master, no rows were updated on the master, but some rows could
(erroneously) be updated on the slave.
(Bug#46864) Replication:
When using the
--replicate-rewrite-db option and
the database referenced by this option on the master was the
current database when the connection to the slave was closed,
any temporary tables existing in this database were not properly
dropped.
(Bug#46861) Replication:
When a statement that changed both transactional and
non-transactional tables failed, the transactional changes were
automatically rolled back on the master but the slave ignored
the error and did not roll them back, thus leading to
inconsistencies between master and slave.
This issue is fixed by automatically rolling back a statement
that fails on the slave; however, the transaction is not rolled
back unless a corresponding
ROLLBACK
statement is found in the relay log file.
(Bug#46130) See also Bug#33864. Replication:
When slave_transaction_retries
is set, a statement that replicates, but is then rolled back due
to a deadlock on the slave, should be retried. However, in
certain cases, replication was stopped with error 1213
(Deadlock found when trying to get lock; try
restarting transaction) instead, even when this
variable was set.
(Bug#45694) Replication:
The binary logging behavior (and thus, the replication behavior)
of CREATE
DATABASE IF NOT EXISTS,
CREATE TABLE IF
NOT EXISTS, and
CREATE EVENT IF
NOT EXISTS was not consistent among these statements,
nor with that of
DROP DATABASE IF
EXISTS,
DROP TABLE IF
EXISTS, and
DROP EVENT IF
EXISTS: A DROP ... IF EXISTS
statement is always logged even if the database object named in
the statement does not exist. However, of the CREATE
... IF NOT EXISTS statements, only the
CREATE EVENT IF
NOT EXISTS statement was logged when the database
object named in the statement already existed.
Now, every CREATE ... IF NOT EXISTS statement
is written to the binary log (and thus replicated), whether the
database object named in the statement exists or not. For more
information, see
Section 16.3.1.3, “Replication of CREATE ... IF NOT EXISTS Statements”.
Exception.
Replication and logging of
CREATE TABLE IF
NOT EXISTS ... SELECT continues to be handled
according to existing rules. See
Section 16.3.1.4, “Replication of CREATE
TABLE ... SELECT Statements”, for more
information.
(Bug#45574) Replication:
When using statement-based replication, database-level character
sets were not always honored by the replication SQL thread. This
could cause data inserted on the master using
LOAD DATA to be replicated using
the wrong character set.
Note
This was not an issue when using row-based replication.
(Bug#45516) Replication:
In some cases, a STOP SLAVE
statement could cause the replication slave to crash. This issue
was specific to MySQL on Windows or Macintosh platforms.
(Bug#45238, Bug#45242, Bug#45243, Bug#46013, Bug#46014, Bug#46030) See also Bug#40796. Replication:
Creating a scheduled event whose DEFINER
clause was either set to
CURRENT_USER or not set
explicitly caused the master and the slave to become
inconsistent. This issue stems from the fact that, in both
cases, the DEFINER is set to the
CURRENT_USER of the current
thread. (On the master, the
CURRENT_USER is the
mysqld user; on the slave, the
CURRENT_USER is empty.)
This behavior has been modified as follows:
If CURRENT_USER is used as
the DEFINER, it is replaced with the
value of
CURRENT_USER before the
CREATE EVENT statement is
written to the binary log.
If the definer is not set explicitly, a
DEFINER clause using the value of
CURRENT_USER is added to the
CREATE EVENT statement before
it is written to the binary log.
(Bug#44331) See also Bug#42217. Replication:
When using the statement-based logging format, the only possible
safe combination of transactional and non-transactional
statements within the same transaction is to perform any updates
on non-transactional tables (such as
MyISAM tables) first, before
updating any transactional tables (such as those using the
InnoDB storage engine). This is due
to the fact that, although a modification made to a
non-transactional table is immediately visible to other
connections, the update is not immediately written to the binary
log, which can lead to inconsistencies between master and slave.
(Other combinations may hide a causal dependency, thus making it
impossible to write statements updating non-transactional tables
to the binary log in the correct order.)
However, in some cases, this situation was not handled properly,
and the determination whether a given statement was safe or not
under these conditions was not always correct. In particular, a
multi-table update that affected both transactional and
non-transactional tables or a statement modifying data in a
non-transactional table having a trigger that operated on a
transactional table (or the reverse) was not determined to be
unsafe when it should have been.
With this fix, the following determinations regarding
replication safety are made when combining updates to
transactional and non-transactional tables within the same
transaction in statement-based logging mode:
Any statement modifying data in a non-transactional table
within a given transaction is considered safe if it is
issued prior to any data modification statement accessing a
transactional table within the same transaction.
A statement that updates transactional tables only is always
considered safe.
A statement affecting both transactional and
non-transactional tables within a transaction is always
considered unsafe. It is not necessary that both tables be
modified for this to be true; for example, a statement such
as INSERT INTO
innodb_table SELECT * FROM
myisam_table is also
considered unsafe.
Note
The current fix is valid only when using statement-based
logging mode; we plan to address similar issues occurring when
using the MIXED or ROW
format in a future MySQL release.
(Bug#28976)
Stack overflow checking did not account for the size of the
structure stored in the heap.
(Bug#46807)
The server could crash for queries with the following elements:
1. An “impossible where” in the outermost
SELECT; 2. An aggregate in the outermost
SELECT; 3. A correlated subquery with a
WHERE clause that includes an outer field
reference as a top-level WHERE sargable
predicate;
(Bug#46749)
CREATE TABLE ...
SELECT could cause assertion failure if a table
already existed with the same name and contained an
AUTO_INCREMENT column.
(Bug#46616)
SHOW CREATE TRIGGER for a
MERGE table trigger caused an
assertion failure.
(Bug#46614)
In queries for which the loose index scan access method was
chosen, using a condition of the form
col_name rather than the equivalent
col_name <>
0 caused an assertion failure.
(Bug#46607)
TRUNCATE TABLE for a table that
was opened with HANDLER did not
close the handler and left it in an inconsistent state that
could lead to a server crash. Now TRUNCATE
TABLE for a table closes all open handlers for the
table.
(Bug#46456)
A query containing a subquery in the FROM
clause and PROCEDURE ANALYSE() caused a
server crash.
(Bug#46184) See also Bug#48293.
Killing a query that was performing a sort could result in a
memory leak.
(Bug#45962)
Truncation of DECIMAL values
could lead to assertion failures; for example, when deducing the
type of a table column from a literal
DECIMAL value.
(Bug#45261) See also Bug#48370.
A buffer overflow could occur during handling of IS
NULL ranges.
(Bug#37044)
mysqladmin --wait ping crashed on Windows
systems.
(Bug#35132)
Installation of MySQL on Windows would fail to set the correct
location for the character set files, which could lead to
mysqld and mysql failing
to initialize properly.
(Bug#17270)
C.1.9. Changes in MySQL 5.1.38 (01 September 2009)InnoDB Plugin Notes:
As of MySQL 5.1.38, the InnoDB Plugin is
included in MySQL 5.1 releases, in addition to the
built-in version of InnoDB that has been
included in previous releases. The version of the
InnoDB Plugin in this release is 1.0.4 and is
considered of Beta quality.
The InnoDB Plugin offers new features,
improved performance and scalability, enhanced reliability and
new capabilities for flexibility and ease of use. Among the
features of the InnoDB Plugin are “Fast
index creation,” table and index compression, file format
management, new INFORMATION_SCHEMA tables,
capacity tuning, multiple background I/O threads, and group
commit.
For information about these features, see the InnoDB
Plugin Manual at
http://www.innodb.com/products/innodb_plugin/plugin-documentation.
For general information about using InnoDB in
MySQL, see Section 13.6, “The InnoDB Storage Engine”.
The InnoDB Plugin is included in source and
binary distributions, except RHEL3, RHEL4, SuSE 9 (x86, x86_64,
ia64), and generic Linux RPM packages.
To use the InnoDB Plugin, you must disable
the built-in version of InnoDB that is also
included and instruct the server to use InnoDB
Plugin instead. To accomplish this, use the following
lines in your my.cnf file:
[mysqld]
ignore-builtin-innodb
plugin-load=innodb=ha_innodb_plugin.so
For the plugin-load option,
innodb is the name to associate with the
plugin and ha_innodb_plugin.so is the name
of the shared object library that contains the plugin code. The
extension of .so applies for Unix (and
similar) systems. For HP-UX on HPPA (11.11) or Windows, the
extension should be .sl or
.dll, respectively, rather than
.so.
If the server has problems finding the plugin when it starts up,
specify the pathname to the plugin directory. For example, if
plugins are located in the lib/mysql/plugin
directory under the MySQL installation directory and you have
installed MySQL at /usr/local/mysql, use
these lines in your my.cnf file:
[mysqld]
ignore-builtin-innodb
plugin-load=innodb=ha_innodb_plugin.so
plugin_dir=/usr/local/mysql/lib/mysql/plugin
The previous examples show how to activate the storage engine
part of InnoDB Plugin, but the plugin also
implements several InnoDB-related
INFORMATION_SCHEMA tables. (For information
about these tables, see
http://www.innodb.com/doc/innodb_plugin-1.0/innodb-information-schema.html.)
To enable these tables, include additional
name=library
pairs in the value of the
plugin-load option:
[mysqld]
ignore-builtin-innodb
plugin-load=innodb=ha_innodb_plugin.so
;innodb_trx=ha_innodb_plugin.so
;innodb_locks=ha_innodb_plugin.so
;innodb_lock_waits=ha_innodb_plugin.so
;innodb_cmp=ha_innodb_plugin.so
;innodb_cmp_reset=ha_innodb_plugin.so
;innodb_cmpmem=ha_innodb_plugin.so
;innodb_cmpmem_reset=ha_innodb_plugin.so
The plugin-load option value as
shown here is formatted on multiple lines for display purposes
but should be written in my.cnf using a
single line without spaces in the option value. On Windows,
substitute .dll for each instance of the
.so extension.
After the server starts, verify that InnoDB
Plugin has been loaded by using the
SHOW PLUGINS statement. For
example, if you have loaded the storage engine and the
INFORMATION_SCHEMA tables, the output should
include lines similar to these:
mysql> SHOW PLUGINS;
+---------------------+--------+--------------------+---------------------...
| Name | Status | Type | Library ...
+---------------------+--------+--------------------+---------------------...
...
| InnoDB | ACTIVE | STORAGE ENGINE | ha_innodb_plugin.so ...
| INNODB_TRX | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so ...
| INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so ...
| INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so ...
| INNODB_CMP | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so ...
| INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so ...
| INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so ...
| INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA | ha_innodb_plugin.so ...
+---------------------+--------+--------------------+---------------------...
An alternative to using the
plugin-load option at server
startup is to use the INSTALL
PLUGIN statement at runtime. First start the server
with the ignore-builtin-innodb
option to disable the built-in version of
InnoDB:
[mysqld]
ignore-builtin-innodb
Then issue an INSTALL PLUGIN
statement for each plugin that you want to load:
mysql> INSTALL PLUGIN InnoDB SONAME 'ha_innodb_plugin.so';
mysql> INSTALL PLUGIN INNODB_TRX SONAME 'ha_innodb_plugin.so';
mysql> INSTALL PLUGIN INNODB_LOCKS SONAME 'ha_innodb_plugin.so';
...
INSTALL PLUGIN need be issued
only once for each plugin. Installed plugins will be loaded
automatically on subsequent server restarts.
If you build MySQL from a source distribution, InnoDB
Plugin is one of the storage engines that is built by
default. Build MySQL the way you normally do; for example, by
using the instructions at Section 2.3, “MySQL Installation Using a Source Distribution”.
After the build completes, you should find the plugin shared
object file under the storage/innodb_plugin
directory, and make install should install it
in the plugin directory. Configure MySQL to use InnoDB
Plugin as described earlier for binary distributions.
If you use gcc, InnoDB
Plugin cannot be compiled with gcc
3.x; you must use gcc 4.x instead.
Note
In MySQL 5.4, the InnoDB Plugin is also
included, but it becomes the built-in version of
InnoDB in MySQL Server, replacing the
version previously included as the built-in
InnoDB engine. This means that if you use
InnoDB Plugin in MySQL 5.1 using the
instructions just given, you will need to remove
ignore-builtin-innodb and
plugin-load from your startup
options after an upgrade to MySQL 5.4 or the server will fail
to start.
Functionality added or changed: Replication:
With statement-based logging (SBL), repeatedly calling
statements that are unsafe for SBL caused a warning message to
be written to the error log for each statement, and there was no
way to disable this behavior. Now the server logs messages about
statements that are unsafe for statement-based logging only if
the log_warnings variable is greater than 0.
(Bug#46265)
The undocumented TRANSACTIONAL and
PAGE_CHECKSUM keywords were removed from the
grammar.
(Bug#45829)
Previously, mysqldump would not dump the
INFORMATION_SCHEMA database and ignored it if
it was named on the command line. Now,
mysqldump will dump
INFORMATION_SCHEMA if it is named on the
command line. Currently, this requires that the
--skip-lock-tables
(or --skip-opt) option be
given.
(Bug#33762)
Previously, SELECT ...
INTO OUTFILE dumped column values without character
set conversion, which could produce data files that cannot be
imported without error if different columns used different
character sets. A consequence of this is that
mysqldump ignored the
--default-character-set option
if the --tab option was given
(which causes SELECT ...
INTO OUTFILE to be used to dump data.)
INTO OUTFILE now can be followed by a
CHARACTER SET clause indicating the character
set to which dumped values should be converted. Also,
mysqldump adds a CHARACTER
SET clause to the
SELECT ... INTO
OUTFILE statement used to dump data, so that
--default-character-set is no
longer ignored if --tab is
given.
Other changes are that
SELECT ... INTO
OUTFILE enforces that ENCLOSED BY
and ESCAPED BY arguments must be a single
character, and SELECT
... INTO OUTFILE and
LOAD DATA
INFILE produce warnings if non-ASCII field or line
separators are specified.
(Bug#30946)
Pluggable storage engines now can be built for Windows.
The MySQL euckr character set now can store
extended codes [81...FE][41..5A,61..7A,81..FE], which makes
euckr compatible with the Microsoft
cp949 character set.
Bugs fixed: Performance:
The table cache lock (LOCK_open) is now an
adaptive mutex, which should improve performance in workloads
where this lock is heavily contended.
(Bug#43435) Partitioning:
Attempting to create a table using an invalid or inconsistent
subpartition definition caused the server to crash. An example
of such a statement is shown here:
CREATE TABLE t2 (s1 INT, s2 INT)
PARTITION BY LIST (s1) SUBPARTITION BY HASH (s2) SUBPARTITIONS 1
(
PARTITION p1 VALUES IN (1),
PARTITION p2 VALUES IN (2) (SUBPARTITION p3)
);
(Bug#46354) Partitioning:
When using a debug build of MySQL, if a query against a
partitioned table having an index on one or more
DOUBLE columns used that index,
the server failed with an assertion.
(Bug#45816) Partitioning:
A failed RENAME TABLE operation
on a table with user-defined partitioning left the table in an
unusable state, due to only some of the table files having been
renamed.
(Bug#30102) Replication:
When a statement that changes a non-transactional table failed,
the transactional cache was flushed, causing a mismatch between
the execution and logging histories. Now we avoid flushing the
transactional cache unless a
COMMIT or
ROLLBACK is
issued.
(Bug#46129) Replication:
The internal function
get_master_version_and_clock() (defined in
sql/slave.cc) ignored errors and passed
directly when queries failed, or when queries succeeded but the
result retrieved was empty. Now this function tries to reconnect
the master if a query fails due to transient network problems,
and to fail otherwise. The I/O thread now prints a warning if
the same system variables do not exist on master (in the event
the master is a very old version of MySQL, compared to the
slave.)
(Bug#45214) Replication:
When using the MIXED logging format, after
creating a temporary table and performing an update that
switched the logging format to ROW, the
format switch persisted following the update. This prevented any
subsequent DDL statements on temporary tables from being written
to the binary log until the temporary table was dropped.
(Bug#43046) See also Bug#40013. This regression was introduced by Bug#20499. Replication:
If the
--log-bin-trust-function-creators
option is not enabled,
CREATE
FUNCTION requires one of the modifiers
DETERMINISTIC, NO SQL, or
READS SQL DATA. When using statement-based
mode, the execution of a stored function should follow the same
rules; however, only functions defined with
DETERMINISTIC could actually be executed. In
addition, the wrong error was generated
(ER_BINLOG_ROW_RBR_TO_SBR instead of
ER_BINLOG_UNSAFE_ROUTINE).
Now execution of stored functions is compatible with creation in
this regard; when a stored function without one of the modifiers
above is executed in STATEMENT mode, the
correct error is raised, and functions defined using NO
SQL, READS SQL DATA, or both (that
is, without using DETERMINISTIC) can be
excuted.
(Bug#41166)
The test suite was missing from RPM packages.
(Bug#46834)
Incorrect index optimization could lead to incorrect results or
server crashes.
(Bug#46454)
The server printed warnings at startup about adjusting the value
of the max_join_size system
variable. (These were harmless, but might be seen by users as
significant.)
(Bug#46385)
mysql did not handle backspace properly for
multi-byte characters. This has been fixed now if
mysql is linked with the
readline library. It is not fixed if
mysql is linked with
libedit, which does not contain the necessary
support for multi-byte character sets.
(Bug#46310)
After an error such as a table-full condition,
INSERT IGNORE
could cause an assertion failure for debug builds.
(Bug#46075)
An optimization that moved an item from a subquery to an outer
query could cause a server crash.
(Bug#46051)
Several Valgrind warnings were corrected.
(Bug#46003, Bug#46034, Bug#46042)
CREATE TABLE ...
SELECT could cause a server crash if no default
database was selected.
(Bug#45998)
The MySQL Server crashed when performing a
REPLACE into a MERGE table
if there was a duplicate.
(Bug#45800)
An infinite hang and 100% CPU usage occurred after handler tried
to open a merge table.
If the command mysqladmin shutdown was
executed during the hang, the debug server generated the
following assert:
mysqld: table.cc:407: void free_table_share(TABLE_SHARE*): Assertion `share->ref_count ==
0' failed.
090610 14:54:04 - mysqld got signal 6 ;
(Bug#45781)
For problems reading SSL files during SSL initialization, the
server wrote error messages to stderr rather
than to the error log.
(Bug#45770)
The vendor name change from MySQL AB to Sun Microsystems, Inc.
in RPM packages was not handled gracefully when upgrading MySQL
using an RPM package.
(Bug#45534)
A Windows Installation using the GUI installer would fail with:
MySQL Server 5.1 Setup Wizard ended prematurely
The wizard was interrupted before MySQL Server 5.1. could be completely installed.
Your system has not been modified. To complete installation at another time, please run
setup again.
Click Finish to exit the wizard
This was due to an step in the MSI installer that could fail to
execute correctly on some environments.
(Bug#45418)
Invalid memory reads could occur using the compressed
client/server protocol.
(Bug#45031)
The mysql_real_connect() C API
function only attempted to connect to the first IP address
returned for a hostname. This could be a problem if a hostname
mapped to multiple IP address and the server was not bound to
the first one returned. Now
mysql_real_connect() attempts to
connect to all IPv4 or IPv6 addresses that a domain name maps
to.
(Bug#45017) See also Bug#47757.
Invalid input could cause invalid memory reads by the parser.
(Bug#45010)
Some files in an AIX tar file distribution
unpacked with incorrect permissions.
(Bug#44647)
For debug builds, executing a stored procedure as a prepared
statement could sometimes cause an assertion failure.
(Bug#44521)
Using mysql_stmt_execute() to
call a stored procedure could cause a server crash.
(Bug#44495)
Creating a new instance after previously removing an instance
would fail to complete the installation properly because the
security settings could not be applied correctly.
(Bug#44428)
mysqlslap ignored the
--csv option if it was given
without an argument.
(Bug#44412)
Enabling the event scheduler from within the file specified by
--init-file caused a server
crash.
(Bug#43587)
The server did not always check the return value of calls to the
hash_init() function.
(Bug#43572)
mysqladmin --count=X
--sleep=Y incorrectly
delayed Y seconds after the last
iteration before exiting.
(Bug#42639)
A test for stack growth failed on some platforms, leading to
server crashes.
(Bug#42213)
mysqladmin did not have enough space
allocated for tracking all variables when using
--vertical or
--relative with
extended-status.
(Bug#40395)
Partitioning a log table caused a server crash.
(Bug#40281)
When using quick access methods to search for rows in
UPDATE and DELETE
statements, there was no check whether a fatal error had already
been sent to the client while evaluating the quick condition.
Consequently, a false OK (following the error) was sent to the
client, causing the error to be incorrectly transformed into a
warning.
(Bug#40113)
SHOW PROCESSLIST could access freed memory of
a stored procedure run in a concurrent session.
(Bug#38816)
During installation on Windows, the MySQL Instance Configuration
Wizard window could be opened at a size too small to be usable.
(Bug#38723)
make_binary_distribution did not always
generate correct distribution names.
(Bug#37808)
The server crashed when executing a prepared statement
containing a duplicated MATCH() function call
in the select list and ORDER BY clause; for
example, SELECT MATCH(a) AGAINST('test') FROM t1 ORDER
BY MATCH(a) AGAINST('test').
(Bug#37740)
The output of mysqldump --tab for views
included a DROP TABLE statement
without the IF EXISTS qualifier.
(Bug#37377)
mysql_upgrade silently ignored the
--basedir and
--datadir options, which
it accepts for backward compatibility. Now it prints a warning.
(Bug#36558)
mysqlimport was not always compiled correctly
to enable thread support, which is required for the
--use-threads option.
(Bug#32991)
mysqlcheck failed to fix table names when the
--fix-table-names and
--all-in-1 options were both
specified.
(Bug#31821)
If the MySQL server was killed without the PID file being
removed, attempts to stop the server with mysql.server
stop waited 900 seconds before giving up.
(Bug#31785)
When performing an installation on Windows using the GUI
installer, the installer would fail to wait long enough during
installation for the MySQL service to be installed, which would
cause the installation to fail and may cause security settings,
such as the root password to not be applied
correctly.
(Bug#30525)
mysql included extra spaces at the end of
some result set lines.
(Bug#29622)
The mysql client inconsistently handled NUL
bytes in column data in various output formats.
(Bug#28203)
mysqlimport did not correctly quote and
escape table identifiers and file names.
(Bug#28071)
When installing the Windows service, using quotes around
command-line configuration parameters could cause the quotes to
incorrectly placed around the entire command-line option, and
not just the value.
(Bug#27535)
If the mysql client was built with the
readline library and the
.inputrc file mapped
Space to the magic-space
function, it became impossible to enter spaces.
(Bug#27439)
If InnoDB reached its limit on the number of
concurrent transactions (1023), it wrote a descriptive message
to the error log but returned a misleading error message to the
client, or an assertion failure occurred.
(Bug#18828) See also Bug#46672.
C.1.10. Release Notes for MySQL Enterprise 5.1.37sp1 [QSP] (10 October 2009)This is a Service Pack release of the MySQL Enterprise Server 5.1. Bugs fixed:
The test suite was missing from RPM packages.
(Bug#46834)
The server could crash for queries with the following elements:
1. An “impossible where” in the outermost
SELECT; 2. An aggregate in the outermost
SELECT; 3. A correlated subquery with a
WHERE clause that includes an outer field
reference as a top-level WHERE sargable
predicate;
(Bug#46749)
SHOW CREATE TRIGGER for a
MERGE table trigger caused an
assertion failure.
(Bug#46614)
Incorrect index optimization could lead to incorrect results or
server crashes.
(Bug#46454)
A query containing a subquery in the FROM
clause and PROCEDURE ANALYSE() caused a
server crash.
(Bug#46184) See also Bug#48293.
CREATE TABLE ...
SELECT could cause a server crash if no default
database was selected.
(Bug#45998)
A Windows Installation using the GUI installer would fail with:
MySQL Server 5.1 Setup Wizard ended prematurely
The wizard was interrupted before MySQL Server 5.1. could be completely installed.
Your system has not been modified. To complete installation at another time, please run
setup again.
Click Finish to exit the wizard
This was due to an step in the MSI installer that could fail to
execute correctly on some environments.
(Bug#45418)
For debug builds, executing a stored procedure as a prepared
statement could sometimes cause an assertion failure.
(Bug#44521)
Using mysql_stmt_execute() to
call a stored procedure could cause a server crash.
(Bug#44495)
C.1.11. Changes in MySQL 5.1.37 (13 July 2009)Functionality added or changed: Bugs fixed: Performance:
With InnoDB tables, MySQL used a
less-selective secondary index to avoid a filesort even if a
prefix of the primary key was much more selective.
The fix for this problem might cause other queries to run more
slowly.
(Bug#45828) Partitioning: Security Fix:
Accessing a table having user-defined partitioning when the
server SQL mode included
ONLY_FULL_GROUP_BY caused the
MySQL server to crash. For example, the following sequence of
statements crashed the server:
DROP TABLE IF EXISTS t1;
SET SESSION SQL_MODE='ONLY_FULL_GROUP_BY';
CREATE TABLE t1 (id INT, KEY(id))
PARTITION BY HASH(id) PARTITIONS 2;
(Bug#45807) Security Fix:
The strxnmov() library function could write a
null byte after the end of the destination buffer.
(Bug#44834) Important Change: Replication:
When using STATEMENT or
MIXED binary logging format, a statement that
changes both non-transactional and transactional tables must be
written to the binary log whenever there are changes to
non-transactional tables. This means that the statement goes
into the binary log even when the changes to the transactional
tables fail. In particular, in the event of a failure such
statement is annotated with the error number and wrapped inside
a pair of
BEGIN and
ROLLBACK
statements.
On the slave, while applying the statement, it is expected that
the same failure and the rollback prevent the transactional
changes from persisting. However, statements that fail due to
concurrency issues such as deadlocks and timeouts are logged in
the same way, causing the slave to stop since the statements are
applied sequentially by the SQL thread.
To address this issue, we ignore concurrency failures on the
slave. Specifically, the following failures are now ignored:
ER_LOCK_WAIT_TIMEOUT,
ER_LOCK_DEADLOCK, and
ER_XA_RBDEADLOCK.
(Bug#44581) Partitioning:
Truncating a partitioned MyISAM table did not
reset the AUTO_INCREMENT value.
(Bug#35111) Replication:
The SHOW SLAVE STATUS connection
thread competed with the slave SQL thread for use of the error
message buffer. As a result, the connection thread sometimes
received incomplete messages. This issue was uncovered with
valgrind when message strings were passed
without NULL terminators, causing the error
Conditional jump or move depends on uninitialised
value(s).
(Bug#45511) See also Bug#43076. Replication:
For replication of a stored procedure that uses the
gbk character set, the result on the master
and slave differed.
(Bug#45485) Replication:
The internal function purge_relay_logs() did
not propagate an error occurring in another internal function
count_relay_log_space().
(Bug#44115) Replication:
Large transactions and statements could corrupt the binary log
if the size of the cache (as set by
max_binlog_cache_size) was not
large enough to store the changes.
Now, for transactions that do not fit into the cache, the
statement is not logged, and the statement generates an error
instead.
For non-transactional changes that do not fit into the cache,
the statement is also not logged — an incident event is
logged after committing or rolling back any pending transaction,
and the statement then raises an error.
Note
If a failure occurs before the incident event is written the
binary log, the slave does not stop, and the master does not
report any errors.
(Bug#43929) See also Bug#37148. Replication:
The --database option for
mysqlbinlog was ignored when using the
row-based logging format.
(Bug#42941) Replication:
Statements using LIMIT generated spurious
Statement is not safe to log in statement
format warnings in the error log, causing the log to
grow rapidly in size.
(Bug#42851) See also Bug#46265, Bug#42415. This regression was introduced by Bug#34768. Replication:
Shutting down the slave while executing FLUSH
LOGS, CHANGE MASTER TO,
or STOP SLAVE could sometimes
cause it to crash.
(Bug#38240) Replication:
When reading a binary log that was in use by a master or that
had not been properly closed (possibly due to a crash), the
following message was printed: Warning: this binlog
was not closed properly. Most probably mysqld crashed writing
it. This message did not take into account the
possibility that the file was merely in use by the master, which
caused some users concern who were not aware that this could
happen.
To make this clear, the original message has been replaced with
Warning: this binlog is either is use or was not
closed properly.
(Bug#34687)
The server crashed if evaluation of
GROUP_CONCAT(... ORDER BY)
required allocation of a sort buffer but allocation failed.
(Bug#46080)
When creating tables using the IBMDB2I
storage engine with the
ibmdb2i_create_index_option option set to 1,
creating an IBMDB2I table with a primary key
should produce an additional index that uses EBCDIC hexadecimal
sorting, but this index was not created.
(Bug#45983)
The server crashed for attempts to use
REPLACE or
INSERT ... ON DUPLICATE
KEY UPDATE with a view defined using a join.
(Bug#45806)
Some collations were causing IBMDB2I to
report inaccurate key range estimations to the optimizer for
LIKE clauses that select substrings. This can
be seen by running EXPLAIN. This
problem primarily affects multi-byte and unicode character sets.
(Bug#45803)
Invalid memory reads and writes were generated when altering
merge and base tables. This could lead to a crash or Valgrind
errors:
==28038== Invalid write of size 1
at: memset (mc_replace_strmem.c:479)
by: myrg_attach_children (myrg_open.c:433)
by: ha_myisammrg::attach_children() (ha_myisammrg.cc:546)
by: ha_myisammrg::extra(ha_extra_function) (ha_myisammrg.cc:944)
by: attach_merge_children(TABLE_LIST*) (sql_base.cc:4147)
by: open_tables(THD*, TABLE_LIST**, unsigned*, unsigned) (sql_base.cc:4709)
by: open_and_lock_tables_derived(THD*, TABLE_LIST*, bool) (sql_base.cc:4977)
by: open_n_lock_single_table (mysql_priv.h:1550)
by: mysql_alter_table(sql_table.cc:6428)
by: mysql_execute_command(THD*) (sql_parse.cc:2860)
by: mysql_parse(THD*, char const*, unsigned, char const**) (sql_parse.cc:5933)
by: dispatch_command (sql_parse.cc:1213) (Bug#45796)
Inserting data into a table using the macce
character set with the IBMDB2I storage engine
would fail.
(Bug#45793)
There was a race condition when changing
innodb_commit_concurrency at
runtime to the value DEFAULT.
(Bug#45749) See also Bug#42101.
Performing an empty XA transaction caused the server to crash
for the next XA transaction.
(Bug#45548)
SHOW CREATE TRIGGER requires the
TRIGGER privilege but was not
checking privileges.
(Bug#45412)
An assertion failure could occur if InnoDB
tried to unlock a record when the clustered index record was
unknown.
(Bug#45357)
--enable-plugin_name
options (for example, --enable-innodb) did not
work correctly.
(Bug#45336) See also Bug#19027.
If autocommit was enabled,
InnoDB did not roll back
DELETE or
UPDATE statements if the
statement was killed.
(Bug#45309)
The optimizer mishandled “impossible range”
conditions and returned empty results due to an uninitialized
variable.
(Bug#45266)
Use of DECIMAL constants with
more than 65 digits in
CREATE TABLE ...
SELECT statements led to spurious errors or assertion
failures.
(Bug#45262)
The mysql client could misinterpret some
character sequences as commands under some circumstances.
(Bug#45236)
Use of CONVERT() with an empty
SET value could cause an
assertion failure.
(Bug#45168)
InnoDB recovery could hang due to redo
logging of doublewrite buffer pages.
(Bug#45097)
When reading binary data, the concatenation function for
geometry data collections did not rigorously check for available
data, leading to invalid reads and server crashes.
(Bug#44684)
If an error occurred during the creation of a table (for
example, the table already existed) having an
AUTO_INCREMENT column and a
BEFORE trigger that used the
INSERT ...
SELECT construct, an internal flag was not reset
properly. This led to a crash the next time the table was opened
again.
(Bug#44653)
configure.in contained references to
literal instances of nm and
libc, rather than to variables parameterized
for the proper values on the current platform.
(Bug#42721)
configure.in did not properly check for the
pthread_setschedprio() function.
(Bug#42599)
SHOW ERRORS returned an empty
result set after an attempt to drop a nonexistent table.
(Bug#42364)
A workaround for a Sun Studio bug was instituted.
(Bug#41710)
For queries with a sufficient number of subqueries in the
FROM clause of this form:
SELECT * FROM (SELECT 1) AS t1,
(SELECT 2) AS t2,
(SELECT 3) AS t3, ...
The query failed with a Too high level of nesting for
select error, as though the query had this form:
SELECT * FROM (SELECT 1 FROM (SELECT 2 FROM (SELECT 3 FROM ...
(Bug#41156)
Some UPDATE statements that
affected no rows returned a rows-affected count of one.
(Bug#40565)
Valgrind warnings that occurred for SHOW
TABLE STATUS with InnoDB tables
were silenced.
(Bug#38479)
In the mysql client, if the server connection
was lost during repeated status commands, the
client would fail to detect this and command output would be
inconsistent.
(Bug#37274)
A Valgrind error during subquery execution was corrected.
(Bug#36995)
When invoked to start multiple server instances,
mysqld_multi sometimes would fail to start
them all due to not changing location into the base directory
for each instance.
(Bug#36654)
Rows written to the slow query log could have an indeterminate
Rows_examined value due to improper
initialization.
(Bug#34002)
Renaming a column that appeared in a foreign key definition did
not update the foreign key definition with the new column name.
(Bug#21704)
C.1.12. Changes in MySQL 5.1.36 (16 June 2009)Functionality added or changed: Important Change: Replication:
Previously, incident log events were represented as comments in
the output from mysqlbinlog, making them
effectively silent when playing back the binlog.
(An incident log event represents an incident that could cause
the contents of the database to change without that event being
recorded in the binary log.)
This meant that, if the SQL were applied to a server, it could
potentially lead to the master and the slave having different
data. To make it possible to handle incident log events without
breaking applications that expect the previous behavior, the
nonsense statement RELOAD DATABASE is added
to the SQL output for that incident log event, which causes an
error.
To use this functionality currently requires hand editing of the
dump file and handling of each case on an individual basis by a
database administrator before applying the output to a server.
(Bug#44442)
mysql_upgrade now displays a message
indicating the connection parameters it uses when invoking
mysqlcheck.
(Bug#44638)
The time zone tables for Windows available at
http://dev.mysql.com/downloads/timezones.html have been
updated.
(Bug#39923)
The mysqltest program now has a
move_file from_file
to_file command for renaming files. This
should be used in test cases rather than invoking an external
command that might be platform specific.
(Bug#39542)
The maximum value for
max_binlog_cache_size has been
increased from 232 – 1 to
264 – 1 (even on 32-bit
platforms), which enables transactions 4GB and larger to be
performed when binary logging is enabled.
(Bug#10206)
Bugs fixed: Performance:
The InnoDB adaptive hash latch is released
(if held) for several potentially long-running operations. This
improves throughput for other queries if the current query is
removing a temporary table, changing a temporary table from
memory to disk, using
CREATE TABLE ...
SELECT, or performing a MyISAM
repair on a table used within a transaction.
(Bug#32149) Security Fix:
The server crashed if an account with the
CREATE ROUTINE privilege but not
the EXECUTE privilege attempted
to create a stored procedure.
(Bug#44798) Security Fix:
The server crashed if an account without the proper privileges
attempted to create a stored procedure.
(Bug#44658) Security Fix:
Four potential format string vulnerabilities were fixed
(discovered by the Veracode code analysis).
(Bug#44166) Incompatible Change:
The server can load plugins under the control of startup
options. For example, many storage engines can be built in
pluggable form and loaded when the server starts. In the
following descriptions, plugin_name
stands for a plugin name such as innodb.
Previously, plugin options were handled like other boolean
options (see Section 4.2.3.2, “Program Option Modifiers”). That is, any
of these options enabled the plugin:
--plugin_name
--plugin_name=1
--enable-plugin_name
And these options disabled the plugin:
--plugin_name=0
--disable-plugin_name
--skip-plugin_name
However, use of a boolean option for plugin loading did not
provide control over what to do if the plugin failed to start
properly: Should the server exit, or start with the plugin
disabled? The actual behavior has been that the server starts
with the plugin disabled, which can be problematic. For example,
if InnoDB fails to start, existing
InnoDB tables become inaccessible, and
attempts to create new InnoDB tables result
in tables that use the default storage engine unless the
NO_ENGINE_SUBSTITUTION SQL
mode has been enabled to cause an error to occur instead.
Now, there is a change in the options used to control plugin
loading, such that they have a tristate format:
--plugin_name=OFF
Do not enable the plugin.
--plugin_name[=ON]
Enable the plugin. If plugin initialization fails, start the
server anyway, but with the plugin disabled. Specifying the
option as
--plugin_name
without a value also enables the plugin.
--plugin_name=FORCE
Enable the plugin. If plugin initialization fails, do not
start the server. In other words, force the server to run
with the plugin or not at all.
The values OFF, ON, and
FORCE are not case sensitive.
Suppose that CSV and
InnoDB have been built as pluggable storage
engines and that you want the server to load them at startup,
subject to these conditions: The server is allowed to run if
CSV initialization fails, but must require
that InnoDB initialization succeed. To
accomplish that, use these lines in an option file:
[mysqld]
csv=ON
innodb=FORCE
This change is incompatible with the previous implementation if
you used options of the form
--plugin_name=0 or
--plugin_name=1,
which should be changed to
--plugin_name=OFF or
--plugin_name=ON,
respectively.
--enable-plugin_name
is still supported and is the same as
--plugin_name=ON.
--disable-plugin_name
and
--skip-plugin_name
are still supported and are the same as
--plugin_name=OFF.
(Bug#19027) See also Bug#45336. Important Change: Replication:
BEGIN,
COMMIT, and
ROLLBACK
statements are no longer affected by
--replicate-do-db or
--replicate-ignore-db rules.
(Bug#43263) Partitioning:
Queries using DISTINCT on multiple columns or
GROUP BY on multiple columns did not return
correct results with partitioned tables.
(Bug#44821) See also Bug#41136. Replication:
When using row-based logging, the length of an event for which
the field metadata exceeded 255 bytes in size was incorrectly
calculated. This could lead to corruption of the binary log, or
cause the server to hang.
(Bug#42749) See also Bug#44548, Bug#44672, Bug#44752. Replication:
The warning Statement is not safe to log in statement
format, issued in situations when it cannot be
determined that a statement or other database event can be
written reliably to the binary log using the statement-based
format, has been changed to Statement may not be safe
to log in statement format.
(Bug#42415) Replication:
The Query_log_event used by replication to
transfer a query to the slave has been refactored.
Query_log_event also stores and sends the
error code resulting from the execution since it, in some cases,
is necessary to execute the statement on the slave as well,
which should result in the same error code. The
Query_log_event constructor previously worked
out for itself the error code using a complex routine, the
result of which was often set aside within the constructor
itself. This was also involved with at least 2 known bugs
relating to invalid errors, and taken as a clear sign that the
constructor was not well-designed and needed to be re-written.
(Bug#41948) See also Bug#37145. Replication:
When stopping and restarting the slave while it was replicating
temporary tables, the slave server could crash or raise an
assertion failure. This was due to the fact that, although
temporary tables were saved between slave thread restarts, the
reference to the thread being used
(table->in_use) was not being properly
updated when restarting, continuing to reference the old thread
instead of the new one. This issue affected statement-based
replication only.
(Bug#41725)
The combination of MIN() or
MAX() in the select list with
WHERE and GROUP BY clauses
could lead to incorrect results.
(Bug#45386)
Linker failures with libmysqld on VC++ 2008
were fixed.
(Bug#45326)
Compiler warnings on Mac OS X were fixed.
(Bug#45286)
Running a SELECT query over an
IBMDB2I table using the
cp1250 character set would produce an error
ibmdb2i error 2027: Error converting single-byte sort sequence to UCS-2 (Bug#45197)
Use of ROUND() on a
LONGTEXT or
LONGBLOB column of a derived
table could cause a server crash.
(Bug#45152)
DROP USER could fail to drop all
privileges for an account if the
PAD_CHAR_TO_FULL_LENGTH SQL
mode was enabled.
(Bug#45100)
GROUP BY on a constant
(single-row) InnoDB table joined to other
tables caused a server crash.
(Bug#44886)
ALTER TABLE on a view crashed the
server.
(Bug#44860)
When using partitioning with the IBMDB2I
storage engine, the engine could report that a valid character
set was not supported.
(Bug#44856)
Running queries on tables with the IBMDB2I
storage engine using the utf8 character would
fail when using the 64-bit version of MySQL.
(Bug#44811)
Index Merge followed by a filesort could result in a server
crash if sort_buffer_size was
not large enough for all sort keys.
(Bug#44810) See also Bug#40974.
UNCOMPRESSED_LENGTH() returned a
garbage result when passed a string shorter than 5 bytes. Now
UNCOMPRESSED_LENGTH() returns
NULL and generates a warning.
(Bug#44796)
Several Valgrind warnings were silenced.
(Bug#44774, Bug#44792)
Selecting
RAND(N)
function where N is a column of a
constant table (table with a single row)
failed with a SIGFPE signal.
(Bug#44768)
The PASSWORD() and
OLD_PASSWORD() functions could
read memory outside of an internal buffer when used with
BLOB arguments.
(Bug#44767)
Conversion of a string to a different character set could use
the same buffer for input and output, leading to incorrect
results or warnings.
(Bug#44743, Bug#44766)
mysqld_safe could fail to find the
logger program.
(Bug#44736)
Code that optimized a read-only XA transaction failed to reset
the XID once the transaction was no longer active.
(Bug#44672)
A Valgrind warning related to transaction processing was
silenced.
(Bug#44664)
Some Perl scripts in AIX packages contained an incorrect path to
the perl executable.
(Bug#44643)
When creating tables using the IBMDB2I
storage engine, the RCDFMT (record format)
that would be applied to the corresponding files within the IBM
i would be set according to the table name. During whole table
operations, the name could get modified to a value inconsistent
with the table name. In addition, the record format would be
inconsistent compared to the file content. The
IBMDB2I storage engine now adds an explicit
RCDFMT clause to the CREATE
TABLE statement passed down to the DB2 storage engine
layer.
(Bug#44610)
innochecksum could incorrectly determine the
input file name from the arguments.
(Bug#44484)
Incorrect time was reported at the end of
mysqldump output.
(Bug#44424)
Caching of GROUP BY expressions could lead to
mismatches between compile-time and runtime calculations and
cause a server crash.
(Bug#44399)
Lettercase conversion in multibyte cp932 or
sjis character sequences could produce
incorrect results.
(Bug#44352)
InnoDB was missing
DB_ROLL_PTR information in Table Monitor
COLUMNS output.
(Bug#44320)
Assertion failure could occur for duplicate-key errors in
INSERT INTO ...
SELECT statements.
(Bug#44306)
Trying to use an unsupported character set on an
IBMDB2I table would produce DB2 error 2501 or
2511. The error has been updated to produce Error 2504
(Character set is unsupported).
(Bug#44232)
On 64-bit Windows systems, myisamchk did not
handle key_buffer_size values larger than
4GB.
(Bug#43940)
For user-defined utf8 collations, attempts to
store values too long for a column could cause a server crash.
(Bug#43827)
Invalidation of query cache entries due to table modifications
could cause threads to hang inside the query cache with state
“freeing items”.
(Bug#43758)
EXPLAIN
EXTENDED could crash for
UNION queries in which the last
SELECT was not parenthesized and
included an ORDER BY clause.
(Bug#43612)
Multiple-table updates for InnoDB tables
could produce unexpected results.
(Bug#43580)
If the client lost the connection to the MySQL server after
mysql_stmt_prepare(), the first
call to mysql_stmt_execute()
returned an error (as expected) but consecutive calls to
mysql_stmt_execute() or
mysql_stmt_close() crashed the
client.
(Bug#43560)
For DELETE statements with ORDER BY
var, where
var was a global system variable with
a NULL value, the server could crash.
(Bug#42778)
Builds linked against OpenSSL had a memory leak in association
with use of X509 certificates.
(Bug#42158)
There was a race condition when changing
innodb_commit_concurrency at
runtime from zero to nonzero or from nonzero to zero. Now this
variable cannot be changed at runtime from zero to nonzero or
vice versa. The value can still be changed from one nonzero
value to another.
(Bug#42101) See also Bug#45749.
SELECT ... INTO
@var could produce values different from
SELECT ...
without the INTO clause.
(Bug#42009)
mysql_zap did not work on Mac OS X.
(Bug#41883)
A crash occurred due to a race condition between the merge table
and table_cache evictions.
00000001403C452F mysqld.exe!memcpy()[memcpy.asm:151]
00000001402A275F mysqld.exe!ha_myisammrg::info()[ha_myisammrg.cc:854]
00000001402A2471 mysqld.exe!ha_myisammrg::attach_children()[ha_myisammrg.cc:488]
00000001402A2788 mysqld.exe!ha_myisammrg::extra()[ha_myisammrg.cc:863]
000000014015FC5D mysqld.exe!attach_merge_children()[sql_base.cc:4135]
000000014016A4C1 mysqld.exe!open_tables()[sql_base.cc:4697]
000000014016A898 mysqld.exe!open_and_lock_tables_derived()[sql_base.cc:4956]
000000014018BB54 mysqld.exe!mysql_insert()[sql_insert.cc:613]
000000014019EDD3 mysqld.exe!mysql_execute_command()[sql_parse.cc:3066]
00000001401A2F06 mysqld.exe!mysql_parse()[sql_parse.cc:5791]
00000001401A3C1A mysqld.exe!dispatch_command()[sql_parse.cc:1202]
00000001401A4CD7 mysqld.exe!do_command()[sql_parse.cc:857]
0000000140246327 mysqld.exe!handle_one_connection()[sql_connect.cc:1115]
00000001402B82C5 mysqld.exe!pthread_start()[my_winthread.c:85]
00000001403CAC37 mysqld.exe!_callthreadstart()[thread.c:295]
00000001403CAD05 mysqld.exe!_threadstart()[thread.c:275]
0000000077D6B69A kernel32.dll!BaseThreadStart()
Trying to get some variables.
Some pointers may be invalid and cause the dump to abort... (Bug#41212)
Shared-memory connections did not work in Vista if
mysqld was started from the command line.
(Bug#41190)
For views created with a column list clause, column aliases were
not substituted when selecting through the view using a
HAVING clause.
(Bug#40825)
A multiple-table DELETE involving
a table self-join could cause a server crash.
(Bug#39918)
Creating an InnoDB table with a comment
containing a '#' character caused foreign key
constraints to be omitted.
(Bug#39793)
ALTER TABLE neglected to preserve
ROW_FORMAT information from the original
table, which could cause subsequent ALTER
TABLE and OPTIMIZE
TABLE statements to lose the row format for
InnoDB tables.
(Bug#39200)
The mysql option
--ignore-spaces was nonfunctional.
(Bug#39101)
If a query was such as to produce the error 1054
Unknown column '...' in 'field list', using
EXPLAIN
EXTENDED with the query could cause a server crash.
(Bug#37362)
In the mysql client, using a default
character set of binary caused internal
commands such as DELIMITER to become case
sensitive.
(Bug#37268)
mysqldump --tab dumped triggers to
stdout rather than to the
.sql file for the corresponding table.
(Bug#34861)
If the MYSQL_HISTFILE environment variable
was set to /dev/null, the
mysql client overwrote the
/dev/null device file as a normal file.
(Bug#34224)
mysqld_safe mishandled certain parameters if
they contained spaces.
(Bug#33685)
mysqladmin kill did not work for thread IDs
larger than 32 bits.
(Bug#32457)
Several client programs failed to interpret
--skip-password
as “send no password.”
(Bug#28479)
Output from mysql --html did not encode the
<, >, or
& characters.
(Bug#27884)
mysql_convert_table_format did not prevent
conversion of tables to MEMORY or
BLACKHOLE tables, which could result in data
loss.
(Bug#27149)
C.1.13. Changes in MySQL 5.1.35 (13 May 2009)Windows Notes: Bugs fixed: Performance:
InnoDB uses random numbers to
generate dives into indexes for calculating index cardinality.
However, under certain conditions, the algorithm did not
generate random numbers, so ANALYZE
TABLE did not update cardinality estimates properly. A
new algorithm has been introduced with better randomization
properties, together with a system variable,
innodb_use_legacy_cardinality_algorithm,
that controls which algorithm to use. The default value of the
variable is 1 (ON), to use the original
algorithm for compatibility with existing applications. The
variable can be set to 0 (OFF) to use the new
algorithm with improved randomness.
(Bug#43660) Performance:
If the character set for a column being compared was neither the
default server character set nor latin1,
InnoDB was slower than necessary due to
excessive contention for a character set mutex.
As a workaround for earlier versions, set the default server
character set to the character set other than
latin1 that is most often used in indexed
columns.
(Bug#42649) Important Change: Replication:
The transactional behavior of STOP
SLAVE has changed. Formerly, it took effect
immediately, even inside a transaction; now, it waits until the
current replication event group (if any) has finished executing,
or until the user issues a
KILL QUERY or
KILL CONNECTION
statement.
This was done in order to solve the problem encountered when
replication was stopped while a nontransactional slave was
replicating a transaction on the master. (It was impossible to
roll back a mixed-engines transaction when one of the engines
was nontransactional, which meant that the slave could not
safely re-apply any transaction that had been interrupted by
STOP SLAVE.)
(Bug#319, Bug#38205) See also Bug#43217. Partitioning:
When a value was equal to a PARTITION ... VALUES LESS
THAN (value) value other
than MAXVALUE, the corresponding partition
was not pruned.
(Bug#42944) Replication:
Unrelated errors occurring during the execution of
RESET SLAVE could cause the slave
to crash.
(Bug#44179) Replication:
The --slave-skip-errors option
had no effect when using row-based logging format.
(Bug#39393) Replication:
The following errors were not correctly reported:
Information about these types of failures can now be found in
the output of SHOW SLAVE
STATUS.
(Bug#38197) Replication:
Killing the thread executing a DDL statement, after it had
finished its execution but before it had written the binlog
event, caused the error code in the binlog event to be set
(incorrectly) to ER_SERVER_SHUTDOWN or
ER_QUERY_INTERRUPTED, which caused
replication to fail.
(Bug#37145) See also Bug#27571, Bug#22725. Replication:
Column aliases used inside subqueries were ignored in the binary
log.
(Bug#35515)
Valgrind warnings for the
DECODE(),
ENCRYPT(), and
FIND_IN_SET() functions were
corrected.
(Bug#44358, Bug#44365, Bug#44367)
On Windows, entries for build-vs9.bat and
build-vs9_x64.bat were missing in
win/Makefile.am.
(Bug#44353)
Incomplete cleanup of JOIN_TAB::select during
the filesort of rows for a GROUP BY clause
inside a subquery caused a server crash.
(Bug#44290)
Not all lock types had proper descriptive strings, resulting in
garbage output from mysqladmin debug.
(Bug#44164)
Use of HANDLER statements with
INFORMATION_SCHEMA tables caused a server
crash. Now HANDLER is prohibited
with such tables.
(Bug#44151)
MySQL Server allowed the creation of a merge table based on
views but crashed when attempts were made to read from that
table. The following example demonstrates this:
#Create a test table
CREATE TABLE tmp (id int, c char(2));
#Create two VIEWs upon it
CREATE VIEW v1 AS SELECT * FROM tmp;
CREATE VIEW v2 AS SELECT * FROM tmp;
#Finally create a MERGE table upon the VIEWs
CREATE TABLE merge (id int, c char(2))
ENGINE=MERGE UNION(v1, v2);
#Reading from the merge table lead to a crash
SELECT * FROM merge;
The final line of the code generated the crash.
(Bug#44040)
Some schema names longer than 8 characters were not supported by
IBMDB2I. The engine has been updated to allow
digits and underscore characters to be used in names longer than
8 characters.
(Bug#44025)
In some circumstances, when a table is created with the
IBMDB2I engine, the CREATE
TABLE statement will return successfully but the table
will not exist.
(Bug#44022)
The ucs2_swedish_ci and
utf8_swedish_ci collations did not work with
indexes using the IBMDB2I storage engine.
Support is now provided for MySQL when running on IBM i 6.1 or
higher.
(Bug#44020)
Invoking SHOW TABLE STATUS from
within a stored procedure could cause a Packets out of
order error.
(Bug#43962)
myisamchk could display a negative
Max keyfile length value.
(Bug#43950)
On 64-bit systems, a
key_buffer_size value larger
than 4GB could couse MyISAM index corruption.
(Bug#43932)
mysqld_multi incorrectly passed
--no-defaults to
mysqld_safe.
(Bug#43876)
SHOW VARIABLES did not properly
display the value of
slave_skip_errors.
(Bug#43835)
On Windows, a server crash occurred for attempts to insert a
floating-point value into a CHAR
column with a maximum length less than the converted
floating-point value length.
(Bug#43833)
Incorrect initialization of MyISAM table
indexes could cause incorrect query results.
(Bug#43737)
libmysqld crashed when it was reinitialized.
(Bug#43706, Bug#44091)
UNION of floating-point numbers
did unnecessary rounding.
(Bug#43432)
ALTER DATABASE
... UPGRADE DATA DIRECTORY NAME failed when the
database contained views.
(Bug#43385)
Certain statements might open a table and then wait for an
impending global read lock without noticing whether they hold a
table being waiting for by the global read lock, causing a hang.
Affected statements are
SELECT ... FOR
UPDATE,
LOCK TABLES ...
WRITE, TRUNCATE TABLE,
and LOAD DATA
INFILE.
(Bug#43230)
Using an XML function such as ExtractValue()
more than once in a single query could produce erroneous
results.
(Bug#43183) See also Bug#43937.
Full-text prefix searches could hang the connection and cause
100% CPU consumption.
(Bug#42907)
Incorrect elevation of warning messages to error messages for
unsafe statements caused a server crash.
(Bug#42640)
CHECK TABLE suggested use of
REPAIR TABLE for corrupt tables
for storage engines not supported by REPAIR
TABLE. Now CHECK TABLE
suggests that the user dump and reload the table.
(Bug#42563)
Compressing a table with the myisampack
utility caused the server to produce Valgrind warnings when it
opened the table.
(Bug#41541)
For a MyISAM table with
DELAY_KEY_WRITE enabled, the index file could
be corrupted without the table being marked as crashed if the
server was killed.
(Bug#41330)
For some queries, an equality propagation problem could cause
a = b and b = a to be
handled differently.
(Bug#40925)
Killing an INSERT
... SELECT statement for a MyISAM
table could cause table corruption if the table had indexes.
(Bug#40827)
A multiple-table DELETE
IGNORE statement involving a foreign key constraint
caused an assertion failure.
(Bug#40127)
Multiple-table UPDATE statements
did not properly activate triggers.
(Bug#39953)
The mysql_setpermission operation for
removing database privileges removed global privileges instead.
(Bug#39852)
A stored routine contain a C-style comment could not be dumped
and reloaded.
(Bug#39559)
In an UPDATE or
DELETE via a secondary index,
InnoDB did not store the cursor position.
This made InnoDB crash in semi-consistent
read while attempting to unlock a nonmatching record.
(Bug#39320)
The functions listed in
Section 11.13.4.2.3, “Creating Geometry Values Using MySQL-Specific Functions”, previously
accepted WKB arguments and returned WKB values. They now accept
WKB or geometry arguments and return geometry values.
The functions listed in Section 11.13.4.2.2, “Creating Geometry Values Using WKB Functions”,
previously accepted WKB arguments and returned geometry values.
They now accept WKB or geometry arguments and return geometry
values.
(Bug#38990)
On WIndows, running the server with
myisam_use_mmap enabled caused
MyISAM table corruption.
(Bug#38848)
CHECK TABLE did not properly
check whether MyISAM tables created by
servers from MySQL 4.0 or older needed to be upgraded. This
could cause problems upgrading to MySQL 5.1 or higher.
(Bug#37631)
An UPDATE statement that updated
a column using the same
DES_ENCRYPT() value for each row
actually updated different rows with different values.
(Bug#35087)
For shared-memory connections, the read and write methods did
not properly handle asynchronous close events, which could lead
to the client locking up waiting for a server response. For
example, a call to
mysql_real_query() would block
forever on the client side if the executed statement was aborted
on the server side. Thanks to Armin Sch?ffmann for the bug
report and patch.
(Bug#33899)
CHECKSUM TABLE was not killable
with KILL QUERY.
(Bug#33146)
myisamchk and myisampack
were not being linked with the library that enabled support for
* filename pattern expansion.
(Bug#29248)
For InnoDB tables that have their own
.ibd tablespace file, a superfluous
ibuf cursor restoration fails! message could
be written to the error log. This warning has been suppressed.
(Bug#27276)
COMMIT did not delete savepoints
if there were no changes in the transaction.
(Bug#26288)
Several memory allocation functions were not being checked for
out-of-memory return values.
(Bug#25058)
C.1.14. Release Notes for MySQL Enterprise 5.1.34sp1 [QSP] (25 June 2009)This is a Service Pack release of the MySQL Enterprise Server 5.1.
This section documents all changes and bugfixes that have been
applied since the last MySQL Enterprise Server release (5.1.34).
Note
The fix for Bug#40974 in MySQL 5.1.31 caused the regression
problem reported in Bug#44810. Users for whom stability is of
utmost priority should note that 5.1.34sp1 is affected by this
problem because Bug#44810 is not fixed until MySQL 5.1.36.
If you would like to receive more fine-grained and personalized
update alerts about fixes that are relevant
to the version and features you use, please consider subscribing
to MySQL Enterprise (a commercial MySQL
offering). For more details please see
http://www.mysql.com/products/enterprise/advisors.html.
Bugs fixed:
Incomplete cleanup of JOIN_TAB::select during
the filesort of rows for a GROUP BY clause
inside a subquery caused a server crash.
(Bug#44290)
Use of HANDLER statements with
INFORMATION_SCHEMA tables caused a server
crash. Now HANDLER is prohibited
with such tables.
(Bug#44151)
On 64-bit systems, a
key_buffer_size value larger
than 4GB could couse MyISAM index corruption.
(Bug#43932)
On Windows, a server crash occurred for attempts to insert a
floating-point value into a CHAR
column with a maximum length less than the converted
floating-point value length.
(Bug#43833)
libmysqld crashed when it was reinitialized.
(Bug#43706, Bug#44091)
Certain statements might open a table and then wait for an
impending global read lock without noticing whether they hold a
table being waiting for by the global read lock, causing a hang.
Affected statements are
SELECT ... FOR
UPDATE,
LOCK TABLES ...
WRITE, TRUNCATE TABLE,
and LOAD DATA
INFILE.
(Bug#43230)
Using an XML function such as ExtractValue()
more than once in a single query could produce erroneous
results.
(Bug#43183) See also Bug#43937.
Incorrect elevation of warning messages to error messages for
unsafe statements caused a server crash.
(Bug#42640)
In an UPDATE or
DELETE via a secondary index,
InnoDB did not store the cursor position.
This made InnoDB crash in semi-consistent
read while attempting to unlock a nonmatching record.
(Bug#39320)
The functions listed in
Section 11.13.4.2.3, “Creating Geometry Values Using MySQL-Specific Functions”, previously
accepted WKB arguments and returned WKB values. They now accept
WKB or geometry arguments and return geometry values.
The functions listed in Section 11.13.4.2.2, “Creating Geometry Values Using WKB Functions”,
previously accepted WKB arguments and returned geometry values.
They now accept WKB or geometry arguments and return geometry
values.
(Bug#38990)
C.1.15. Changes in MySQL 5.1.34 (02 April 2009)RPM Notes:
Support Ending for AIX 5.2: Per the
http://www.mysql.com/about/legal/lifecycle/ regarding ending
support for OS versions that have reached vendor end of life, we
plan to discontinue building or supporting MySQL binaries for
AIX 5.2 as of April 30, 2009. This release of MySQL 5.1 (5.1.34)
is the last MySQL 5.1 release with support for AIX 5.2. For more
information, see the March 24, 2009 note at
MySQL
Product Support EOL Announcements.
Functionality added or changed: Bugs fixed: Replication: Important Note:
Binary logging with
--binlog-format=ROW failed when a
change to be logged included more than 251 columns. This issue
was not known to occur with mixed-format or statement-based
logging.
(Bug#42977) See also Bug#42914. Replication:
Assigning an invalid directory for the
--slave-load-tmpdir caused the
replication slave to crash.
(Bug#42861) Replication:
The mysql.procs_priv system table was not
replicated.
(Bug#42217) Replication:
An INSERT
DELAYED into a
TIMESTAMP column issued
concurrently with an insert on the same column not using
DELAYED, but applied after the other insert,
was logged using the same timestamp as generated by the other
(non-DELAYED) insert.
(Bug#41719) Replication:
The MIXED binary logging format did not
switch to row-based mode for statements containing the
LOAD_FILE() function.
(Bug#39701) Replication:
When the server SQL mode included
IGNORE_SPACE, statement-based
replication of LOAD
DATA INFILE ... INTO
tbl_name failed because the
statement was read incorrectly from the binary log; a trailing
space was omitted, causing the statement to fail with a syntax
error when run on the slave.
(Bug#22504) See also Bug#43746.
An attempt by a user who did not have the
SUPER privilege to kill a system
thread could cause a server crash.
(Bug#43748)
On Windows, incorrectly specified link dependencies in
CMakeLists.txt resulted in link errors for
mysql_embedded,
mysqltest_embedded, and
mysql_client_test_embedded.
(Bug#43715)
mysql crashed if a request for the current
database name returned an empty result, such as after the client
has executed a preceding SET
sql_select_limit=0 statement.
(Bug#43254)
If the value of the version_comment system
variable was too long, the mysql client
displayed a truncated startup message.
(Bug#43153)
Queries of the following form returned an empty result:
SELECT ... WHERE ... (col=col AND col=col) OR ... (false expression)
(Bug#42957)
The strings/CHARSET_INFO.txt file was not
included in source distributions.
(Bug#42937)
A dangling pointer in mysys/my_error.c
could lead to client crashes.
(Bug#42675)
Passing an unknown time zone specification to
CONVERT_TZ() resulted in a memory
leak.
(Bug#42502)
The MySQL Instance Configuration Wizard would fail to start
correctly on Windows Vista.
(Bug#42386)
With more than two arguments,
LEAST(),
GREATEST(), and
CASE could unnecessarily return
Illegal mix of collations errors.
(Bug#41627)
The mysql client could misinterpret its input
if a line was longer than an internal buffer.
(Bug#41486)
In the help command output displayed by
mysql, the description for the
\c (clear) command was
misleading.
(Bug#41268)
The load_defaults(),
my_search_option_files() and
my_print_default_files() functions in the C
client library were subject to a race condition in
multi-threaded operation.
(Bug#40552)
If --basedir was specified,
mysqld_safe did not use it when attempting to
locate my_print_defaults.
(Bug#39326)
When running the MySQL Instance Configuration Wizard in
command-line only mode, the service name would be ignored
(effectively creating all instances with the default
MySQL service name), irrespective of the name
specified on the command line. However, the wizard would attempt
to start the service with the specified name, and would fail.
(Bug#38379)
When MySQL was configured with the
--with-max-indexes=128 option,
mysqld crashed.
(Bug#36751)
Setting the join_buffer_size
variable to its minimum value produced spurious warnings.
(Bug#36446)
The use of NAME_CONST() can
result in a problem for
CREATE TABLE ...
SELECT statements when the source column expressions
refer to local variables. Converting these references to
NAME_CONST() expressions can
result in column names that are different on the master and
slave servers, or names that are too long to be legal column
identifiers. A workaround is to supply aliases for columns that
refer to local variables.
Now a warning is issued in such cases that indicate possible
problems.
(Bug#35383)
An attempt to check or repair an
ARCHIVE table that had been
subjected to a server crash returned a 144 internal error. The
data appeared to be irrecoverable.
(Bug#32880)
The Time column for SHOW
PROCESSLIST output and the value of the
TIME column of the
INFORMATION_SCHEMA.PROCESSLIST
table now can have negative values. Previously, the column was
unsigned and negative values were displayed incorrectly as large
positive values. Negative values can occur if a thread alters
the time into the future with
SET TIMESTAMP =
value or the thread is
executing on a slave and processing events from a master that
has its clock set ahead of the slave.
(Bug#22047)
Restoring a mysqldump dump file containing
FEDERATED tables failed because the file
contained the data for the table. Now only the table definition
is dumped (because the data is located elsewhere).
(Bug#21360)
C.1.16. Changes in MySQL 5.1.33 (13 March 2009)RPM Notes:
Support Ending for AIX 5.2: Per the
http://www.mysql.com/about/legal/lifecycle/ regarding ending
support for OS versions that have reached vendor end of life, we
plan to discontinue building or supporting MySQL binaries for
AIX 5.2 as of April 30, 2009. The next release of MySQL 5.1
(5.1.34) will be the last MySQL 5.1 release with support for AIX
5.2. For more information, see the March 24, 2009 note at
MySQL
Product Support EOL Announcements.
Functionality added or changed: Performance:
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.
(Bug#37416)
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.
(Bug#42888)
The MD5 algorithm now uses the Xfree implementation.
(Bug#42434)
Bugs fixed: Partitioning:
A duplicate key error raised when inserting into a partitioned
table using a different error code from that returned by such an
error raised when inserting into a table that was not
partitioned.
(Bug#38719) See also Bug#28842. Partitioning:
Several error messages relating to partitioned tables were
incorrect or missing.
(Bug#36001) 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.
(Bug#41980) 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.
(Bug#40013) See also Bug#43046. This regression was introduced by Bug#20499. 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).
(Bug#39753) See also Bug#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) 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 replication.
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.
(Bug#38174) Replication:
Server IDs greater than 2147483647
(232 – 1) were represented by
negative numbers in the binary log.
(Bug#37313) 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:
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.
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).
(Bug#22082) 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.
(Bug#13684) See also Bug#25705.
The IBM DB2i storage engine has been added to this release for
the IBM i Series platform. For more information, see
Section 13.7, “The IBMDB2I Storage Engine”.
(Bug#44217)
On 64-bit debug builds, code in safemalloc
resulted in errors due to use of a 32-bit value for 64-bit
allocations.
(Bug#43885)
make distcheck failed to properly handle
subdirectories of storage/ndb.
(Bug#43614)
Use of USE INDEX hints could cause
EXPLAIN
EXTENDED to crash.
(Bug#43354)
For InnoDB tables, overflow in an
AUTO_INCREMENT column could cause a server
crash.
(Bug#43203)
On 32-bit Windows, mysqld could not use large
buffers due to a 2GB user mode address limit.
(Bug#43082)
stderr should be unbuffered, but when the
server redirected stderr to a file, it became
buffered.
(Bug#42790)
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.)
(Bug#42758)
For InnoDB tables, spurious duplicate-key
errors could occur when inserting into an
AUTO_INCREMENT column.
(Bug#42714)
mysqldump included views that were excluded
with the --ignore-table
option.
(Bug#42635)
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.
Note
InnoDB Plugin versions 1.0.4 and higher
will take advantage of this bug fix. Although the
InnoDB Plugin is source code compatible
with multiple MySQL releases, a given binary
InnoDB Plugin can be used only with a
specific MySQL release. When InnoDB Plugin
1.0.4 is released, it is expected to be compiled for MySQL
5.1.34. For 5.1.33, you can use InnoDB
Plugin 1.0.3, but you must build from source.
(Bug#42610) This regression was introduced by Bug#29263.
With the ONLY_FULL_GROUP_BY
SQL mode enabled, some legal queries failed.
(Bug#42567)
Tables could enter open table cache for a thread without being
properly cleaned up, leading to a server crash.
(Bug#42419)
For InnoDB tables, inserting into
floating-point AUTO_INCREMENT columns failed.
(Bug#42400)
The InnoDB
btr_search_drop_page_hash_when_freed()
function had a race condition.
(Bug#42279)
For InnoDB tables, there was a race condition
for ALTER TABLE,
OPTIMIZE TABLE,
CREATE INDEX, and
DROP INDEX operations when
periodically checking whether table copying can be committed.
(Bug#42152)
Parsing of the optional microsecond component of
DATETIME values did not fail
gracefully when that component width was larger than the allowed
six places.
(Bug#42146)
In InnoDB recovery after a server crash,
table lookup could fail and corrupt the data dictionary cache.
(Bug#42075)
mysqldumpslow parsed the
--debug and
--verbose options
incorrectly.
(Bug#42027)
Queries that used the loose index scan access method could
return no rows.
(Bug#41610)
In InnoDB recovery after a server crash,
rollback of a transaction that updated a column from
NULL to NULL could cause
another crash.
(Bug#41571)
The error message for a too-long column comment was
Unknown error rather than a more appropriate
message.
(Bug#41465)
Use of SELECT * allowed users with rights to
only some columns of a view to access all columns.
(Bug#41354)
If the tables underlying a MERGE table had a
primary key but the MERGE table itself did
not, inserting a duplicate row into the MERGE
table caused a server crash.
(Bug#41305)
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, Bug#41112)
SELECT statements executed
concurrently with INSERT
statements for a MyISAM table could cause
incorrect results to be returned from the query cache.
(Bug#41098)
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.
(Bug#41078)
Deprecation warnings that referred to MySQL 5.2 were changed to
refer to MySQL 6.0.
(Bug#41077)
For user-defined variables in a query result, incorrect length
values were returned in the result metadata.
(Bug#41030)
On Windows, starting the server with an invalid value for
innodb_flush_method caused a
crash.
(Bug#40757)
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.
(Bug#40675)
With strict SQL mode enabled, setting a system variable to an
out-of-bounds value caused an assertion failure.
(Bug#40657)
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)
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.
(Bug#40345)
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.
(Bug#40321)
DELETE tried to acquire write
(not read) locks for tables accessed within a subquery of the
WHERE clause.
(Bug#39843)
perror did not produce correct output for
error codes 153 to 163.
(Bug#39370)
Several functions in libmysqld called
exit() when an error occurred rather than
returning an error to the caller.
(Bug#39289)
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.
(Bug#38249)
Setting a savepoint with the same name as an existing savepoint
incorrectly deleted any other savepoints that had been set in
the meantime. For example, setting savepoints named
a, b,
c, b resulted in
savepoints a, b, rather
than the correct savepoints a,
c, b.
(Bug#38187)
--help output for
myisamchk did not list the
--HELP option.
(Bug#38103)
Comparisons between row constructors, such as (a, b) =
(c, d) resulted in unnecessary Illegal mix of
collations errors for string columns.
(Bug#37601)
If a user created a view that referenced tables for which the
user had disjoint privileges, an assertion failure occurred.
(Bug#37191)
An argument to the MATCH()
function that was an alias for an expression other than a column
name caused a server crash.
(Bug#36737)
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)
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)
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.
(Bug#33813)
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 version-specific comments.
(Bug#33550)
Detection by configure of several functions
such as setsockopt(),
bind(), sched_yield(), and
gtty() could fail.
(Bug#31506)
Use of MBR spatial functions such as
MBRTouches() with columns of
InnoDB tables caused a server crash rather
than an error.
(Bug#31435)
The mysql client mishandled input parsing if
a delimiter command was not first on the
line.
(Bug#31060)
SHOW PRIVILEGES listed the
CREATE ROUTINE privilege as
having a context of Functions,Procedures, but
it is a database-level privilege.
(Bug#30305)
mysqld --help did not work as
root.
(Bug#30261)
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.
(Bug#29458)
SHOW TABLE STATUS could fail to
produce output for tables with non-ASCII characters in their
name.
(Bug#25830)
Allocation of stack space for error messages could be too small
on HP-UX, leading to stack overflow crashes.
(Bug#21476)
Floating-point numbers could be handled with different numbers
of digits depending on whether the text or prepared-statement
protocol was used.
(Bug#21205)
Incorrect length metadata could be returned for LONG
TEXT columns when a multibyte server character set was
used.
(Bug#19829)
ROUND() sometimes returned
different results on different platforms.
(Bug#15936)
C.1.17. Changes in MySQL 5.1.32 (14 February 2009)Functionality added or changed: Bugs fixed: Security Fix:
Using an XPath expression employing a scalar expression as a
FilterExpr
with ExtractValue() or
UpdateXML() caused the server to
crash. Such expressions now cause an error instead.
(Bug#42495) Incompatible Change:
The fix for Bug#33699 introduced a change to the
UPDATE statement such that
assigning NULL to a NOT
NULL column caused an error even when strict SQL mode
was not enabled. The original behavior before was that such
assignments caused an error only in strict SQL mode, and
otherwise set the column to the implicit default value for the
column data type and generated a warning. (For information about
implicit default values, see
Section 10.1.4, “Data Type Default Values”.)
The change caused compatibility problems for applications that
relied on the original behavior. It also caused replication
problems between servers that had the original behavior and
those that did not, for applications that assigned
NULL to NOT NULL columns
in UPDATE statements without
strict SQL mode enabled. This change has been reverted so that
UPDATE again had the original
behavior. Problems can still occur if you replicate between
servers that have the modified
UPDATE behavior and those that do
not.
(Bug#39265) Important Change:
When using the MySQL Instance Configuration Wizard with a
configuration where you already have an existing installation
with a custom datadir, the wizard could reset
the data to the default data directory. When performing an
upgrade installation in this situation, you must re-specify your
custom settings, including the datadir, to
ensure that your configuration file is not reset to the default
values.
(Bug#37534) Important Change:
Uninstalling MySQL using the MySQL installer on Windows would
delete the my.ini file. The file is no longer
deleted. In addition, when a new installation is conducted, any
existing cofiguration file will be renamed to
myDATETIME.ini.bak during configuration.
(Bug#36493) Important Change:
When installing MySQL on Windows, it was possible to install
multiple editions (Complete, and Essential, for example) of the
same version of MySQL, leading to two separate entries in the
installed packages which were impossible to isolate. This could
lead to problems with installation and uninstallation. The MySQL
installer on Windows no longers allow multiple installations of
the same version of MySQL on a single machine.
(Bug#4217) Replication:
START SLAVE
UNTIL did not work correctly with
--replicate-same-server-id
enabled; when started with this option, the slave did not
perform events recorded in the relay log and that originated
from a different master.
Log rotation events are automatically generated and written when
rotating the binary log or relay log. Such events for relay logs
are usually ignored by the slave SQL thread because they have
the same server ID as that of the slave. However, when
--replicate-same-server-id was
enabled, the rotation event for the relay log was treated as if
it originated on the master, because the log's name and
position were incorrectly updated. This caused the
MASTER_POS_WAIT() function always
to return NULL and thus to fail.
(Bug#38734, Bug#38934) Replication:
TRUNCATE TABLE statements failed
to replicate when statement-based binary logging mode was not
available. The issue was observed when using
InnoDB with the transaction
isolation level set to READ UNCOMMITTED (thus
forcing InnoDB not to allow
statement-based logging). However, the same behavior could be
reproduced using any transactional storage engine supporting
only row-based logging, regardless of the isolation level. This
was due to two separate problems:
An error was printed by InnoDB
for TRUNCATE TABLE when using
statement-based logging mode where the transaction isolation
level was set to READ COMMITTED or
READ UNCOMMITTED, because
InnoDB permits statement-based
replication for DML statements. However,
TRUNCATE TABLE is not
transactional; since it is the equivalent of
DROP TABLE followed by
CREATE TABLE, it is actually
DDL, and should therefore be allowed to be replicated as a
statement.
TRUNCATE TABLE was not logged
in mixed mode because of the error just described; however,
this error was not reported to the client.
As a result of this fix, TRUNCATE
TABLE is now treated as DDL for purposes of binary
logging and replication; that is, it is always logged as a
statement and so no longer causes an error when replicated using
a transactional storage engine such as
InnoDB.
(Bug#36763) See also Bug#42643. Replication:
mysqlbinlog replay of
CREATE TEMPORARY
TABLE ... LIKE statements and of
TRUNCATE TABLE statements used on
temporary tables failed with Error 1146 (Table ...
doesn't exist).
(Bug#35583) Replication:
In statement mode, mysqlbinlog failed to
issue a SET @@autommit statement when the
autocommit mode was changed.
(Bug#34541) Replication:
LOAD DATA
INFILE statements did not replicate correctly from a
master running MySQL 4.1 to a slave running MySQL 5.1 or later.
(Bug#31240)
The use by libedit of the
__weak_reference() macro caused compilation
failure on FreeBSD.
(Bug#42817)
A '%' character in SQL statements could cause
the server to crash.
(Bug#42634)
An optimization introduced for Bug#37553 required an explicit
cast to be added for some uses of
TIMEDIFF() because automatic
casting could produce incorrect results. (It was necessary to
use TIME(TIMEDIFF(...)).)
(Bug#42525)
On the IBM i5 platform, the MySQL configuration process caused
the system version of pthread_setschedprio()
to be used. This function returns SIGILL on
i5 because it is not supported, causing the server to crash. Now
the my_pthread_setprio() function in the
mysys library is used instead.
(Bug#42524)
The SSL certficates included with MySQL distributions were
regenerated because the previous ones had expired.
(Bug#42366)
User variables within triggers could cause a crash if the
mysql_change_user() C API
function was invoked.
(Bug#42188)
Dependent subqueries such as the following caused a memory leak
proportional to the number of outer rows:
SELECT COUNT(*) FROM t1, t2 WHERE t2.b
IN (SELECT DISTINCT t2.b FROM t2 WHERE t2.b = t1.a);
(Bug#42037)
Some queries using NAME_CONST(.. COLLATE
...) led to a server crash due to a failed type cast.
(Bug#42014)
On Mac OS X, some of the universal client libraries were not
actually universal and were missing code for one or more
architectures.
(Bug#41940)
String reallocation could cause memory overruns.
(Bug#41868)
mysql_install_db did not pass some relevant
options to mysqld.
(Bug#41828)
Setting
innodb_locks_unsafe_for_binlog
should be equivalent to setting the transaction isolation level
to READ COMMITTED. However,
if both of those things were done, nonmatching semi-consistently
read rows were not unlocked when they should have been.
(Bug#41671)
REPAIR TABLE crashed for
compressed MyISAM tables.
(Bug#41574)
For a TIMESTAMP NOT
NULL DEFAULT ... column, storing
NULL as the return value from some functions
caused a “cannot be NULL” error.
NULL returns now correctly cause the column
default value to be stored.
(Bug#41370)
The server cannot execute
INSERT DELAYED
statements when statement-based binary logging is enabled, but
the error message displayed only the table name, not the entire
statement.
(Bug#41121)
FULLTEXT indexes did not work for Unicode
columns that used a custom UCA collation.
(Bug#41084)
The Windows installer displayed incorrect product names in some
images.
(Bug#40845)
Changing
innodb_thread_concurrency at
runtime could cause errors.
(Bug#40760)
SELECT statements could be blocked by
INSERT DELAYED
statements that were waiting for a lock, even with
low_priority_updates enabled.
(Bug#40536)
For InnoDB tables that used
ROW_FORMAT=REDUNDANT, storage size of
NULL columns could be determined incorrectly.
(Bug#40369)
The query cache stored only partial query results if a statement
failed while the results were being sent to the client. This
could cause other clients to hang when trying to read the cached
result. Now if a statement fails, the result is not cached.
(Bug#40264)
When a MEMORY table became full,
the error generated was returned to the client but was not
written to the error log.
(Bug#39886)
With row-based binary logging, replication of
InnoDB tables containing
NULL-valued
BIT columns could fail.
(Bug#39648)
The expression ROW(...) IN (SELECT ... FROM
DUAL) always returned TRUE.
(Bug#39069)
The greedy optimizer could cause a server crash due to improper
handling of nested outer joins.
(Bug#38795)
Use of COUNT(DISTINCT) prevented
NULL testing in the HAVING
clause.
(Bug#38637)
The innodb_stats_on_metadata
system variable was not displayed by SHOW
VARIABLES and was not settable at runtime.
(Bug#38189)
Enabling the sync_frm system
variable had no effect on the handling of
.frm files for views.
(Bug#38145)
The embedded server truncated some error messages.
(Bug#37995)
For comparison of NULL to a subquery result
inside IS NULL, the comparison could evaluate
to NULL rather than to
TRUE or FALSE. This
occurred for expressions such as:
SELECT ... WHERE NULL IN (SELECT ...) IS NULL
(Bug#37822)
Setting myisam_repair_threads
greater than 1 caused a server crash for table repair or
alteration operations for MyISAM
tables with multiple FULLTEXT indexes.
(Bug#37756)
When using the MySQL MSI Installer on Windows and selecting
Back after a choosing Repair, you would
be returned to the Fresh Install section of the installer. You
are now correctly returned to the Install, Repair, Modify
screen.
(Bug#37294)
The mysql client sometimes improperly
interpreted string escape sequences in nonstring contexts.
(Bug#36391)
The query cache stored packets containing the server status of
the time when the cached statement was run. This might lead to
an incorrect transaction status on the client side if a
statement was cached during a transaction and later served
outside a transaction context (or vice versa).
(Bug#36326)
If the system time was adjusted backward during query execution,
the apparent execution time could be negative. But in some cases
these queries would be written to the slow query log, with the
negative execution time written as a large unsigned number. Now
statements with apparent negative execution time are not written
to the slow query log.
(Bug#35396)
libmysqld was not built with all character
sets.
(Bug#32831)
For mysqld_multi, using the
--mysqld=mysqld_safe option
caused the --defaults-file
and --defaults-extra-file
options to behave the same way.
(Bug#32136)
Attempts to open a valid MERGE table sometimes resulted in a
ER_WRONG_MRG_TABLE error. This
happened after failure to open an invalid MERGE table had also
generated an ER_WRONG_MRG_TABLE
error.
(Bug#32047)
For Solaris package installation using
pkgadd, the postinstall script failed,
causing the system tables in the mysql
database not to be created.
(Bug#31164)
If the default database was dropped, the value of
character_set_database was not
reset to character_set_server
as it should have been.
(Bug#27208)
C.1.18. Release Notes for MySQL Enterprise 5.1.31sp1 [QSP] (19 March 2009)This is a Service Pack release of the MySQL Enterprise Server 5.1.
This section documents all changes and bugfixes that have been
applied since the last MySQL Enterprise Server release (5.1.31).
If you would like to receive more fine-grained and personalized
update alerts about fixes that are relevant
to the version and features you use, please consider subscribing
to MySQL Enterprise (a commercial MySQL
offering). For more details please see
http://www.mysql.com/products/enterprise/advisors.html.
Functionality added or changed: Bugs fixed: Security Fix:
Using an XPath expression employing a scalar expression as a
FilterExpr
with ExtractValue() or
UpdateXML() caused the server to
crash. Such expressions now cause an error instead.
(Bug#42495)
On the IBM i5 platform, the MySQL configuration process caused
the system version of pthread_setschedprio()
to be used. This function returns SIGILL on
i5 because it is not supported, causing the server to crash. Now
the my_pthread_setprio() function in the
mysys library is used instead.
(Bug#42524)
The SSL certficates included with MySQL distributions were
regenerated because the previous ones had expired.
(Bug#42366)
User variables within triggers could cause a crash if the
mysql_change_user() C API
function was invoked.
(Bug#42188)
Some queries using NAME_CONST(.. COLLATE
...) led to a server crash due to a failed type cast.
(Bug#42014)
C.1.19. Changes in MySQL 5.1.31 (19 January 2009)Functionality added or changed:
MySQL-shared-compat-advanced-gpl-5.1.31-0.*.rpm
and
MySQL-shared-compat-advanced-5.1.31-0.*.rpm
packages are now available. These client library compatibility
packages are like the MySQL-shared-compat
package, but are for the “MySQL Enterprise Server
–dash; Advanced Edition” products. Install these
packages rather than the normal
MySQL-shared-compat package if you want to
included shared client libraries for older MySQL versions.
(Bug#41838)
A new status variable,
Queries, indicates the number
of statements executed by the server. This includes statements
executed within stored programs, unlike the
Questions variable which
includes only statements sent to the server by clients.
(Bug#41131)
Performance of SELECT * retrievals from
INFORMATION_SCHEMA.COLUMNS was
improved slightly.
(Bug#38918)
Previously, index hints did not work for
FULLTEXT searches. Now they work as follows:
For natural language mode searches, index hints are silently
ignored. For example, IGNORE INDEX(i) is
ignored with no warning and the index is still used.
For boolean mode searches, index hints with FOR ORDER
BY or FOR GROUP BY are silently
ignored. Index hints with FOR JOIN or no
FOR modifier are honored. In contrast to how
hints apply for non-FULLTEXT searches, the
hint is used for all phases of query execution (finding rows and
retrieval, grouping, and ordering). This is true even if the
hint is given for a non-FULLTEXT index.
(Bug#38842)
Bugs fixed: Performance:
For an InnoDB table,
DROP TABLE or
ALTER TABLE ...
DISCARD TABLESPACE could take a long time or cause a
server crash.
(Bug#39939) Important Change: Replication:
If a trigger was defined on an
InnoDB table and this trigger
updated a nontransactional table, changes performed on the
InnoDB table were replicated and
were visible on the slave before they were committed on the
master, and were not rolled back on the slave after a successful
rollback of those changes on the master.
As a result of the fix for this issue, the semantics of mixing
nontransactional and transactional tables in a transaction in
the first statement of a transaction have changed. Previously,
if the first statement in a transaction contained
nontransactional changes, the statement was written directly to
the binary log. Now, any statement appearing after a
BEGIN (or
immediately following a COMMIT if
autocommit = 0) is always
considered part of the transaction and cached. This means that
nontransactional changes do not propagate to the slave until the
transaction is committed and thus written to the binary log.
See Section 16.3.1.28, “Replication and Transactions”, for
more information about this change in behavior.
(Bug#40116) Important Change:
The MSI installer packages for Windows are now digitally signed
with a certificate, allowing installation on Windows where only
certified packages are allowed by group policy or configuration.
As part of this change, and to comply with the certified
installer requirements, the Setup.exe
versions of the MySQL installer have been discontinued. You must
have Windows Installer support in your Windows installation to
use the MSI install package. This is a standard component on
Windows XP SP2 and higher. For earlier versions, you can
download the Microsoft Installer support from Microsoft.com.
(Bug#36409) Partitioning: Replication:
Changing the transaction isolation level while replicating
partitioned InnoDB tables could cause
statement-based logging to fail.
(Bug#39084) Partitioning:
A comparison with an invalid DATE value in a
query against a partitioned table could lead to a crash of the
MySQL server.
Note
Invalid DATE and
DATETIME values referenced in the
WHERE clause of a query on a partitioned
table are treated as NULL. See
Section 18.4, “Partition Pruning”, for more information.
(Bug#40972) Partitioning:
A query on a user-partitioned table caused MySQL to crash, where
the query had the following characteristics:
The query's WHERE clause referenced
an indexed column that was also in the partitioning key.
The query's WHERE clause included a
value found in the partition.
The query's WHERE clause used the
< or <>
operators to compare with the indexed column's value
with a constant.
The query used an ORDER BY clause, and
the same indexed column was used in the ORDER
BY clause.
The ORDER BY clause used an explcit or
implicit ASC sort priority.
Two examples of such a query are given here, where
a represents an indexed column used in the
table's partitioning key:
SELECT * FROM table WHERE a < constant ORDER BY a;
SELECT * FROM table WHERE a <> constant ORDER BY a;
This bug was introduced in MySQL 5.1.29.
(Bug#40954) This regression was introduced by Bug#30573, Bug#33257, Bug#33555. Partitioning:
With READ COMMITTED
transaction isolation level, InnoDB
uses a semi-consistent read that releases nonmatching rows after
MySQL has evaluated the WHERE clause.
However, this was not happening if the table used partitions.
(Bug#40595) Partitioning:
A query that timed out when run against a partitioned table
failed silently, without providing any warnings or errors,
rather than returning Lock wait timeout
exceeded.
(Bug#40515) Partitioning:
ALTER TABLE ... REORGANIZE PARTITION could
crash the server when the number of partitions was not changed.
(Bug#40389) See also Bug#41945. Partitioning:
For a partitioned table having an
AUTO_INCREMENT column: If the first statement
following a start of the server or a FLUSH
TABLES statement was an UPDATE
statement, the AUTO_INCREMENT column was not
incremented correctly.
(Bug#40176) Partitioning:
The server attempted to execute the statements ALTER
TABLE ... ANALYZE PARTITION, ALTER TABLE ...
CHECK PARTITION, ALTER TABLE ... OPTIMIZE
PARTITION, and ALTER TABLE ... REORGANIZE
PARTITION on tables that were not partitioned.
(Bug#39434) See also Bug#20129. Partitioning:
The value of the CREATE_COLUMNS column in
INFORMATION_SCHEMA.TABLES was not
partitioned for partitioned tables.
(Bug#38909) Partitioning:
When executing an ORDER BY query on a
partitioned InnoDB table using an index that
was not in the partition expression, the results were sorted on
a per-partition basis rather than for the table as a whole.
(Bug#37721) Partitioning:
Dropping or creating an index on a partitioned table managed by
the InnoDB Plugin locked the table.
(Bug#37453) Partitioning:
Partitioned table checking sometimes returned a warning with an
error code of 0, making proper response to errors impossible.
The fix also renders the error message subject to translation in
non-English deployments.
(Bug#36768) Partitioning:
SHOW TABLE STATUS could show a nonzero value
for the Mean record length of a partitioned
InnoDB table, even if the table
contained no rows.
(Bug#36312) Partitioning:
When SHOW CREATE TABLE was used on a
partitioned table, all of the table's
PARTITION and SUBPARTITION
clauses were output on a single line, making it difficult to
read or parse.
(Bug#14326) Replication:
Per-table AUTO_INCREMENT option values were
not replicated correctly for InnoDB
tables.
(Bug#41986) Replication:
Some log_event types did not skip the
post-header when reading.
(Bug#41961) Replication:
Attempting to read a binary log containing an
Incident_log_event having an invalid incident
number could cause the debug server to crash.
(Bug#40482) Replication:
When using row-based replication, an update of a primary key
that was rolled back on the master due to a duplicate key error
was not rolled back on the slave.
(Bug#40221) Replication:
When rotating relay log files, the slave deletes relay log files
and then edits the relay log index file. Formerly, if the slave
shut down unexpectedly between these two events, the relay log
index file could then reference relay logs that no longer
existed. Depending on the circumstances, this could when
restarting the slave cause either a race condition or the
failure of replication.
(Bug#38826, Bug#39325) Replication:
With row-based replication, UPDATE and
DELETE statements using
LIMIT and a table's primary key could
produce different results on the master and slave.
(Bug#38230)
resolve_stack_dump was unable to resolve the
stack trace format produced by mysqld in
MySQL 5.1 and up (see Section 22.5.1.5, “Using a Stack Trace”).
(Bug#41612)
In example option files provided in MySQL distributions, the
thread_stack value was
increased from 64K to 128K.
(Bug#41577)
The optimizer could ignore an error and rollback request during
a filesort, causing an assertion failure.
(Bug#41543)
DATE_FORMAT() could cause a
server crash for year-zero dates.
(Bug#41470)
SET PASSWORD caused a server
crash if the account name was given as
CURRENT_USER().
(Bug#41456)
When a repair operation was carried out on a
CSV table, the debug server
crashed.
(Bug#41441)
When substituting system constant functions with a constant
result, the server was not expecting NULL
function return values and could crash.
(Bug#41437)
Queries such as SELECT ... CASE AVG(...) WHEN
... that used aggregate functions in a
CASE expression crashed the server.
(Bug#41363)
INSERT INTO .. SELECT
... FROM and
CREATE TABLE ...
SELECT ... FROM a TEMPORARY table could inadvertently
change the locking type of the temporary table from a write lock
to a read lock, causing statement failure.
(Bug#41348)
The
INFORMATION_SCHEMA.SCHEMA_PRIVILEGES
table was limited to 7680 rows.
(Bug#41079)
In debug builds, obsolete debug code could be used to crash the
server.
(Bug#41041)
Some queries that used a “range checked for each
record” scan could return incorrect results.
(Bug#40974) See also Bug#44810.
Certain SELECT queries could fail
with a Duplicate entry error.
(Bug#40953)
For debug servers, OPTIMIZE TABLE
on a compressed table caused a server crash.
(Bug#40949)
Accessing user variables within triggers could cause a server
crash.
(Bug#40770)
IF(..., CAST(longtext_val AS
UNSIGNED), signed_val) as
an argument to an aggregate function could cause an assertion
failure.
(Bug#40761)
For single-table UPDATE
statements, an assertion failure resulted from a runtime error
in a stored function (such as a recursive function call or an
attempt to update the same table as in the
UPDATE statement).
(Bug#40745)
TRUNCATE TABLE for an
InnoDB table did not flush cached queries for
the table.
(Bug#40386)
Prepared statements allowed invalid dates to be inserted when
the ALLOW_INVALID_DATES SQL
mode was not enabled.
(Bug#40365)
mc.exe is no longer needed to compile MySQL
on Windows. This makes it possible to build MySQL from source
using Visual Studio Express 2008.
(Bug#40280)
The ':' character was incorrectly disallowed
in table names.
(Bug#40104)
Support for the revision field in
.frm files has been removed. This addresses
the downgrading problem introduced by the fix for Bug#17823.
(Bug#40021)
Retrieval speed from the following
INFORMATION_SCHEMA tables was improved by
shortening the VARIABLE_VALUE column to 1024
characters:
GLOBAL_VARIABLES,
SESSION_VARIABLES,
GLOBAL_STATUS,
and
SESSION_STATUS.
As a result of this change, any variable value longer than 1024
characters will be truncated with a warning. This affects only
the init_connect system
variable.
(Bug#39955)
If the operating system is configured to return leap seconds
from OS time calls or if the MySQL server uses a time zone
definition that has leap seconds, functions such as
NOW() could return a value having
a time part that ends with :59:60 or
:59:61. If such values are inserted into a
table, they would be dumped as is by
mysqldump but considered invalid when
reloaded, leading to backup/restore problems.
Now leap second values are returned with a time part that ends
with :59:59. This means that a function such
as NOW() can return the same
value for two or three consecutive seconds during the leap
second. It remains true that literal temporal values having a
time part that ends with :59:60 or
:59:61 are considered invalid.
For additional details about leap-second handling, see
Section 9.7.2, “Time Zone Leap Second Support”.
(Bug#39920)
The server could crash during a sort-order optimization of a
dependent subquery.
(Bug#39844)
For a server started with the
--temp-pool option on Windows,
temporary file creation could fail. This option now is ignored
except on Linux systems, which was its original intended scope.
(Bug#39750)
ALTER TABLE on a table with
FULLTEXT index that used a pluggable
FULLTEXT parser could cause debug servers to
crash.
(Bug#39746)
With the ONLY_FULL_GROUP_BY
SQL mode enabled, the check for nonaggregated columns in queries
with aggregate functions, but without a GROUP
BY clause was treating all the parts of the query as
if they were in the select list. This is fixed by ignoring the
nonaggregated columns in the WHERE clause.
(Bug#39656)
The server crashed if an integer field in a CSV file did not
have delimiting quotes.
(Bug#39616)
Creating a table with a comment of 62 characters or longer
caused a server crash.
(Bug#39591)
The do_abi_check program run during the build
process depends on mysql_version.h but that
file was not created first, resulting in build failure.
(Bug#39571)
CHECK TABLE failed for
MyISAM
INFORMATION_SCHEMA tables.
(Bug#39541)
On 64-bit Windows systems, the server accepted
key_buffer_size values larger
than 4GB, but allocated less. (For example, specifying a value
of 5GB resulted in 1GB being allocated.)
(Bug#39494)
InnoDB could hang trying to open an adaptive
hash index.
(Bug#39483)
Following ALTER
TABLE ... DISCARD TABLESPACE for an
InnoDB table, an attempt to determine the
free space for the table before the ALTER
TABLE operation had completely finished could cause a
server crash.
(Bug#39438)
Use of the PACK_KEYS or
MAX_ROWS table option in
ALTER TABLE should have triggered
table reconstruction but did not.
(Bug#39372)
The server returned a column type of
VARBINARY rather than
DATE as the result from the
COALESCE(),
IFNULL(),
IF(),
GREATEST(), or
LEAST() functions or
CASE expression if the result was
obtained using filesort in an anonymous
temporary table during the query execution.
(Bug#39283)
A server built using yaSSL for SSL support would crash if
configured to use an RSA key and a client sent a cipher list
containing a non-RSA key as acceptable.
(Bug#39178)
When built with Valgrind, the server failed to access tables
created with the DATA DIRECTORY or
INDEX DIRECTORY table option.
(Bug#39102)
With binary logging enabled CREATE
VIEW was subject to possible buffer overwrite and a
server crash.
(Bug#39040)
The fast mutex implementation was subject to excessive lock
contention.
(Bug#38941)
Use of InnoDB monitoring
(SHOW ENGINE INNODB
STATUS or one of the
InnoDB Monitor tables) could cause
a server crash due to invalid access to a shared variable in a
concurrent environment.
(Bug#38883)
InnoDB could fail to generate
AUTO_INCREMENT values after an
UPDATE statement for the table.
(Bug#38839)
If delayed insert failed to upgrade the lock, it did not free
the temporary memory storage used to keep newly constructed
BLOB values in memory, resulting
in a memory leak.
(Bug#38693)
On Windows, a five-second delay occurred at shutdown of
applications that used the embedded server.
(Bug#38522)
On Solaris, a scheduling policy applied to the main server
process could be unintentionally overwritten in client-servicing
threads.
(Bug#38477)
Building MySQL on FreeBSD would result in a failure during the
gen_lex_hash phase of the build.
(Bug#38364)
On Windows, the embedded server would crash in
mysql_library_init() if the
language file was missing.
(Bug#38293)
A mix of TRUNCATE TABLE with
LOCK TABLES and
UNLOCK
TABLES for an InnoDB could cause a
server crash.
(Bug#38231)
The ExtractValue() function did not work
correctly with XML documents containing a
DOCTYPE declaration.
(Bug#38227)
Queries with a HAVING clause could return a
spurious row.
(Bug#38072)
The Event Scheduler no longer logs “started in
thread” or “executed” successfully messages
to the error log.
(Bug#38066)
Use of spatial data types in prepared statements could cause
memory leaks or server crashes.
(Bug#37956, Bug#37671)
An error in a debugging check caused crashes in debug servers.
(Bug#37936)
A SELECT with a NULL NOT
IN condition containing a complex subquery from the
same table as in the outer select caused an assertion failure.
(Bug#37894)
The presence of a /* ... */ comment preceding
a query could cause InnoDB to use unnecessary
gap locks.
(Bug#37885)
Use of an uninitialized constant in
EXPLAIN evaluation caused an
assertion failure.
(Bug#37870)
When using ALTER TABLE on an
InnoDB table, the
AUTO_INCREMENT value could be changed to an
incorrect value.
(Bug#37788)
Primary keys were treated as part of a covering index even if
only a prefix of a key column was used.
(Bug#37742)
Renaming an ARCHIVE table to the
same name with different lettercase and then selecting from it
could cause a server crash.
(Bug#37719)
The MONTHNAME() and
DAYNAME() functions returned a
binary string, so that using
LOWER() or
UPPER() had no effect. Now
MONTHNAME() and
DAYNAME() return a value in
character_set_connection
character set.
(Bug#37575)
TIMEDIFF() was erroneously
treated as always returning a positive result. Also,
CAST() of
TIME values to
DECIMAL dropped the sign of
negative values.
(Bug#37553) See also Bug#42525.
SHOW PROCESSLIST displayed
“copy to tmp table” when no such copy was
occurring.
(Bug#37550)
mysqlcheck used
SHOW FULL
TABLES to get the list of tables in a database. For
some problems, such as an empty .frm file
for a table, this would fail and mysqlcheck
then would neglect to check other tables in the database.
(Bug#37527)
Updating a view with a subquery in the CHECK
option could cause an assertion failure.
(Bug#37460)
Statements that displayed the value of system variables (for
example, SHOW VARIABLES) expect
variable values to be encoded in
character_set_system. However,
variables set from the command line such as
basedir or
datadir were encoded using
character_set_filesystem and
not converted correctly.
(Bug#37339)
CREATE INDEX could crash with
InnoDB plugin 1.0.1.
(Bug#37284)
Certain boolean-mode FULLTEXT searches that
used the truncation operator did not return matching records and
calculated relevance incorrectly.
(Bug#37245)
On a 32-bit server built without big tables support, the offset
argument in a LIMIT clause might be truncated
due to a 64-bit to 32-bit cast.
(Bug#37075)
For an InnoDB table with a FOREIGN
KEY constraint, TRUNCATE
TABLE may be performed using row by row deletion. If
an error occurred during this deletion, the table would be only
partially emptied. Now if an error occurs, the truncation
operation is rolled back and the table is left unchanged.
(Bug#37016)
The code for the ut_usectime() function in
InnoDB did not handle errors from the
gettimeofday() system call. Now it retries
gettimeofday() several times and updates
the value of the
Innodb_row_lock_time_max
status variable only if ut_usectime() was
successful.
(Bug#36819)
Use of CONVERT() with
GROUP BY to convert numeric values to
CHAR could return truncated
results.
(Bug#36772)
The mysql client, when built with Visual
Studio 2005, did not display Japanese characters.
(Bug#36279)
CREATE INDEX for
InnoDB tables could under very rare
circumstances cause the server to crash..
(Bug#36169)
A read past the end of the string could occur while parsing the
value of the
--innodb-data-file-path option.
(Bug#36149)
Setting the
slave_compressed_protocol
system variable to DEFAULT failed in the
embedded server.
(Bug#35999)
For upgrades to MySQL 5.1 or higher,
mysql_upgrade did not re-encode database or
table names that contained nonalphanumeric characters. (They
would still appear after the upgrade with the
#mysql50# prefix described in
Section 8.2.3, “Mapping of Identifiers to File Names”.) To correct this problem,
it was necessary to run mysqlcheck --all-databases
--check-upgrade --fix-db-names --fix-table-names
manually. mysql_upgrade now runs that command
automatically after performing the initial upgrade.
(Bug#35934)
SHOW CREATE TABLE did not display
a printable value for the default value of
BIT columns.
(Bug#35796)
The columns that store character set and collation names in
several INFORMATION_SCHEMA tables were
lengthened because they were not long enough to store some
possible values: SCHEMATA,
TABLES,
COLUMNS,
CHARACTER_SETS,
COLLATIONS, and
COLLATION_CHARACTER_SET_APPLICABILITY.
(Bug#35789)
The max_length metadata value was calculated
incorrectly for the FORMAT()
function, which could cause incorrect result set metadata to be
sent to clients.
(Bug#35558)
InnoDB was not updating the
Handler_delete or
Handler_update status
variables.
(Bug#35537)
InnoDB could fail to generate
AUTO_INCREMENT values if rows previously had
been inserted containing literal values for the
AUTO_INCREMENT column.
(Bug#35498, Bug#36411, Bug#39830)
The CREATE_OPTIONS column for
INFORMATION_SCHEMA.TABLES did not
display the KEY_BLOCK_SIZE option.
(Bug#35275)
Selecting from an INFORMATION_SCHEMA table
into an incorrectly defined MERGE
table caused an assertion failure.
(Bug#35068)
perror on Windows did not know about Win32
system error codes.
(Bug#34825)
EXPLAIN
EXTENDED evaluation of aggregate functions that
required a temporary table caused a server crash.
(Bug#34773)
SHOW GLOBAL
STATUS shows values that aggregate the session status
values for all threads. This did not work correctly for the
embedded server.
(Bug#34517)
mysqldumpslow did not aggregate times.
(Bug#34129)
mysql_config did not output
-ldl (or equivalent) when needed for
--libmysqld-libs, so its
output could be insufficient to build applications that use the
embedded server.
(Bug#34025)
The mysql client incorrectly parsed
statements containing the word “delimiter” in
mid-statement.
This fix is different from the one applied for this bug in MySQL
5.1.26.
(Bug#33812) See also Bug#38158.
For a stored procedure containing a SELECT * ... RIGHT
JOIN query, execution failed for the second call.
(Bug#33811)
Previously, use of index hints with views (which do not have
indexes) produced the error ERROR 1221 (HY000):
Incorrect usage of USE/IGNORE INDEX and VIEW. Now
this produces ERROR 1176 (HY000): Key '...' doesn't
exist in table '...', the same error as for base
tables without an appropriate index.
(Bug#33461)
Three conditions were discovered that could cause an upgrade
from MySQL 5.0 to 5.1 to fail: 1) Triggers associated with a
table that had a #mysql50# prefix in the name
could cause assertion failure. 2)
ALTER DATABASE
... UPGRADE DATA DIRECTORY NAME failed for databases
that had a #mysql50# prefix if there were
triggers in the database. 3) mysqlcheck
--fix-table-name didn't use UTF8 as the default
character set, resulting in parsing errors for tables with
nonlatin symbols in their names and trigger definitions.
(Bug#33094, Bug#41385)
Execution of a prepared statement that referred to a system
variable caused a server crash.
(Bug#32124)
Some division operations produced a result with incorrect
precision.
(Bug#31616)
Queries executed using join buffering of
BIT columns could produce
incorrect results.
(Bug#31399)
ALTER TABLE CONVERT TO CHARACTER SET did not
convert TINYTEXT or
MEDIUMTEXT columns to a longer
text type if necessary when converting the column to a different
character set.
(Bug#31291)
Server variables could not be set to their current values on
Linux platforms.
(Bug#31177) See also Bug#6958.
For installation on Solaris using pkgadd
packages, the mysql_install_db script was
generated in the scripts directory, but the
temporary files used during the process were left there and not
deleted.
(Bug#31052)
Static storage engines and plugins that were disabled and
dynamic plugins that were installed but disabled were not listed
in the INFORMATION_SCHEMA appropriate
PLUGINS or
ENGINES table.
(Bug#29263)
Some SHOW statements and
retrievals from the INFORMATION_SCHEMA
TRIGGERS and
EVENTS tables used a temporary
table and incremented the
Created_tmp_disk_tables status
variable, due to the way that TEXT columns
are handled. The TRIGGERS.SQL_MODE,
TRIGGERS.DEFINER, and
EVENTS.SQL_MODE columns now are
VARCHAR to avoid this problem.
(Bug#29153)
For several read only system variables that were viewable with
SHOW VARIABLES, attempting to
view them with SELECT
@@var_name or set their
values with SET resulted in an
unknown system variable error. Now they can
be viewed with SELECT
@@var_name and attempting
to set their values results in a message indicating that they
are read only.
(Bug#28234)
On Windows, Visual Studio does not take into account some x86
hardware limitations, which led to incorrect results converting
large DOUBLE values to unsigned
BIGINT values.
(Bug#27483)
SSL support was not included in some “generic” RPM
packages.
(Bug#26760)
The Questions status variable
is intended as a count of statements sent by clients to the
server, but was also counting statements executed within stored
routines.
(Bug#24289)
Setting the session value of the
max_allowed_packet or
net_buffer_length system
variable was allowed but had no effect. The session value of
these variables is now read only.
(Bug#22891) See also Bug#32223.
A race condition between the mysqld.exe
server and the Windows service manager could lead to inability
to stop the server from the service manager.
(Bug#20430)
On Windows, moving an InnoDB
.ibd file and then symlinking to it in the
database directory using a .sym file caused
a server crash.
(Bug#11894)
C.1.20. Changes in MySQL 5.1.30 (14 November 2008 General Availability)Bugs fixed: Partitioning:
A SELECT using a range
WHERE condition with an ORDER
BY on a partitioned table caused a server crash.
(Bug#40494) Replication:
Row-based replication failed with nonpartitioned
MyISAM tables having no indexes.
(Bug#40004)
With statement-based binary logging format and a transaction
isolation level of READ
COMMITTED or stricter, InnoDB
printed an error because statement-based logging might lead to
inconsistency between master and slave databases. However, this
error was printed even when binary logging was not enabled (in
which case, no such inconsistency can occur).
(Bug#40360)
The CHECK TABLE ...
FOR UPGRADE statement did not check for incompatible
collation changes made in MySQL 5.1.24 (Bug#27877). This also
affects mysqlcheck and
mysql_upgrade, which cause that statement to
be executed. See
Section 2.4.3, “Checking Whether Tables or Indexes Must Be Rebuilt”.
Prior to this fix, a binary upgrade (performed without dumping
tables with mysqldump before the upgrade and
reloading the dump file after the upgrade) would corrupt tables
that have indexes that use the
utf8_general_ci or
ucs2_general_ci collation for columns that
contain '?' LATIN SMALL LETTER SHARP S
(German). After the fix,
CHECK TABLE ... FOR
UPGRADE properly detects the problem and warns about
tables that need repair.
However, the fix is not backward compatible and can result in a
downgrading problem under these circumstances:
The solution is to dump tables with mysqldump
before the downgrade and reload the dump file after the
downgrade. Alternatively, drop and recreate affected indexes.
(Bug#40053)
Some recent releases for Solaris 10 were built on Solaris 10 U5,
which included a new version of libnsl.so
that does not work on U4 or earlier. To correct this, Solaris 10
builds now are created on machines that do not have that
upgraded libnsl.so, so that they will work
on Solaris 10 installations both with and without the upgraded
libnsl.so.
(Bug#39074)
With binary logging enabled,
CREATE TABLE ...
SELECT and
INSERT INTO ...
SELECT failed if the source table was a log table.
(Bug#34306)
XA transaction rollbacks could result in corrupted transaction
states and a server crash.
(Bug#28323)
ALTER TABLE for an
ENUM column could change column
values.
(Bug#23113)
C.1.21. Changes in MySQL 5.1.29 (11 October 2008)Functionality added or changed: Important Change:
The --skip-thread-priority option is now
deprecated such that the server won't change the thread
priorities by default. Giving threads different priorities might
yield marginal improvements in some platforms (where it actually
works), but it might instead cause significant degradation
depending on the thread count and number of processors. Meddling
with the thread priorities is a not a safe bet as it is very
dependent on the behavior of the CPU scheduler and system where
MySQL is being run.
(Bug#35164, Bug#37536) Important Change:
The --log option now is
deprecated and will be removed (along with the
log system variable) in the future. Instead,
use the --general_log option to
enable the general query log and the
--general_log_file=file_name
option to set the general query log file name. The values of
these options are available in the
general_log and
general_log_file system
variables, which can be changed at runtime.
Similar changes were made for the
--log-slow-queries option and
log_slow_queries system
variable. You should use the
--slow_query_log and
--slow_query_log_file=file_name
options instead (and the
slow_query_log and
slow_query_log_file system
variables).
The BUILD/compile-solaris-* scripts now
compile MySQL with the mtmalloc library
rather than malloc.
(Bug#38727)
Bugs fixed: Incompatible Change: Replication:
The default binary logging mode has been changed from
MIXED to STATEMENT for
compatibility with MySQL 5.0.
(Bug#39812) Incompatible Change:
CHECK TABLE ... FOR
UPGRADE did not check for incompatible collation
changes made in MySQL 5.1.21 (Bug#29499) and 5.1.23 (Bug#27562,
Bug#29461). This also affects mysqlcheck and
mysql_upgrade, which cause that statement to
be executed. See
Section 2.4.3, “Checking Whether Tables or Indexes Must Be Rebuilt”.
(Bug#39585) See also Bug#40984. Incompatible Change:
In connection with view creation, the server created
arc directories inside database directories
and maintained useless copies of .frm files
there. Creation and renaming procedures of those copies as well
as creation of arc directories has been
discontinued.
This change does cause a problem when downgrading to older
server versions which manifests itself under these
circumstances:
Create a view v_orig in MySQL 5.1.29 or
higher.
Rename the view to v_new and then back to
v_orig.
Downgrade to an older 5.1.x server and run
mysql_upgrade.
Try to rename v_orig to
v_new again. This operation fails.
As a workaround to avoid this problem, use either of these
approaches:
Dump your data using mysqldump before
downgrading and reload the dump file after downgrading.
Instead of renaming a view after the downgrade, drop it and
recreate it.
The downgrade problem introduced by the fix for this bug has
been addressed as Bug#40021.
(Bug#17823) Important Change: Replication:
The SUPER privilege is now
required to change the session value of
binlog_format as well as its
global value. For more information about
binlog_format, see
Section 16.1.2, “Replication Formats”.
(Bug#39106) Partitioning: Replication:
Replication to partitioned MyISAM tables
could be slow with row-based binary logging.
(Bug#35843) Partitioning:
If an error occurred when evaluating a column of a partitioned
table for the partitioning function, the row could be inserted
anyway.
(Bug#38083) Partitioning:
Using INSERT ...
SELECT to insert records into a partitioned
MyISAM table could fail if some partitions
were empty and others are not.
(Bug#38005) Partitioning:
Ordered range scans on partitioned tables were not always
handled correctly. In some cases this caused some rows to be
returned twice. The same issue also caused GROUP
BY query results to be aggregated incorrectly.
(Bug#30573, Bug#33257, Bug#33555) Replication:
Server code used in binary logging could in some cases be
invoked even though binary logging was not actually enabled,
leading to asserts and other server errors.
(Bug#38798) Replication:
Replication of BLACKHOLE tables did not work
with row-based binary logging.
(Bug#38360) Replication:
In some cases, a replication master sent a special event to a
reconnecting slave to keep the slave's temporary tables, but
they still had references to the “old” slave SQL
thread and used them to access that thread's data.
(Bug#38269) Replication:
Replication filtering rules were inappropiately applied when
executing BINLOG pseudo-queries.
One way in which this problem showed itself was that, when
replaying a binary log with mysqlbinlog, RBR
events were sometimes not executed if the
--replicate-do-db option was
specified. Now replication rules are applied only to those
events executed by the slave SQL thread.
(Bug#36099) Replication:
For a CREATE TABLE
... SELECT statement that creates a table in a
database other than the current one, the table could be created
in the wrong database on replication slaves if row-based binary
logging is used.
(Bug#34707) Replication:
A statement did not always commit or roll back correctly when
the server was shut down; the error could be triggered by having
a failing UPDATE or
INSERT statement on a
transactional table, causing an implicit rollback.
(Bug#32709) See also Bug#38262.
The Sun Studio compiler failed to build debug versions of the
server due to use of features specific to
gcc.
(Bug#39451)
For a TIMESTAMP column in an
InnoDB table, testing the column with
multiple conditions in the WHERE clause
caused a server crash.
(Bug#39353)
References to local variables in stored procedures are replaced
with
NAME_CONST(name,
value) when written to the
binary log. However, an “illegal mix of collation”
error might occur when executing the log contents if the value's
collation differed from that of the variable. Now information
about the variable collation is written as well.
(Bug#39182)
Queries of the form SELECT ... REGEXP BINARY
NULL could lead to a hung or crashed server.
(Bug#39021)
Statements of the form INSERT ... SELECT .. ON
DUPLICATE KEY UPDATE col_name =
DEFAULT could result in a server crash.
(Bug#39002)
Column names constructed due to wild-card expansion done inside
a stored procedure could point to freed memory if the expansion
was performed after the first call to the stored procedure.
(Bug#38823)
Repeated CREATE
TABLE ... SELECT statements, where the created table
contained an AUTO_INCREMENT column, could
lead to an assertion failure.
(Bug#38821)
For deadlock between two transactions that required a timeout to
resolve, all server tables became inaccessible for the duration
of the deadlock.
(Bug#38804)
When inserting a string into a duplicate-key error message, the
server could improperly interpret the string, resulting in a
crash.
(Bug#38701)
A race condition between threads sometimes caused unallocated
memory to be addressed.
(Bug#38692)
A server crash resulted from concurrent execution of a
multiple-table UPDATE that used a
NATURAL or USING join
together with FLUSH
TABLES WITH READ LOCK or ALTER
TABLE for the table being updated.
(Bug#38691)
On ActiveState Perl, mysql-test-run.pl
--start-and-exit started but did not exit.
(Bug#38629)
An uninitialized variable in the query profiling code was
corrected (detected by Valgrind).
(Bug#38560)
A server crash resulted from execution of an
UPDATE that used a derived table
together with FLUSH
TABLES.
(Bug#38499)
Stored procedures involving substrings could crash the server on
certain platforms due to invalid memory reads.
(Bug#38469)
The handlerton-to-plugin mapping implementation did not free
handler plugin references when the plugin was uninstalled,
resulting in a server crash after several install/uninstall
cycles. Also, on Mac OS X, the server crashed when trying to
access an EXAMPLE table after the
EXAMPLE plugin was installed.
(Bug#37958)
The server crashed if an argument to a stored procedure was a
subquery that returned more than one row.
(Bug#37949)
When analyzing the possible index use cases, the server was
incorrectly reusing an internal structure, leading to a server
crash.
(Bug#37943)
Access checks were skipped for SHOW
PROCEDURE STATUS and SHOW
FUNCTION STATUS, which could lead to a server crash or
insufficient access checks in subsequent statements.
(Bug#37908)
The <=>
operator could return incorrect results when comparing
NULL to DATE,
TIME, or
DATETIME values.
(Bug#37526)
The combination of a subquery with a GROUP
BY, an aggregate function calculated outside the
subquery, and a GROUP BY on the outer
SELECT could cause the server to
crash.
(Bug#37348)
The NO_BACKSLASH_ESCAPES SQL
mode was ignored for
LOAD DATA
INFILE and SELECT INTO ... OUTFILE.
The setting is taken into account now.
(Bug#37114)
In some cases, references to views were confused with references
to anonymous tables and privilege checking was not performed.
(Bug#36086)
For crash reports on Windows, symbol names in stack traces were
not correctly resolved.
(Bug#35987)
ALTER EVENT changed the
PRESERVE attribute of an event even when
PRESERVE was not specified in the statement.
(Bug#35981)
Host name values in SQL statements were not being checked for
'@', which is illegal according to RFC952.
(Bug#35924)
mysql_install_db failed on machines that had
the host name set to localhost.
(Bug#35754)
Dynamic plugins failed to load on i5/OS.
(Bug#35743)
With the
PAD_CHAR_TO_FULL_LENGTH SQL
mode enabled, a ucs2
CHAR column returned additional
garbage after trailing space characters.
(Bug#35720)
A trigger for an InnoDB table activating
multiple times could lead to AUTO_INCREMENT
gaps.
(Bug#31612)
mysqldump could fail to dump views containing
a large number of columns.
(Bug#31434)
The server could improperly type user-defined variables used in
the select list of a query.
(Bug#26020)
For access to the
INFORMATION_SCHEMA.VIEWS table, the
server did not check the SHOW
VIEW and SELECT
privileges, leading to inconsistency between output from that
table and the SHOW CREATE VIEW
statement.
(Bug#22763)
mysqld_safe would sometimes fail to remove
the pid file for the old mysql process after
a crash. As a result, the server would fail to start due to a
false A mysqld process already exists...
error.
(Bug#11122)
C.1.22. Changes in MySQL 5.1.28 (28 August 2008)Functionality added or changed: Bugs fixed: Performance: Incompatible Change:
Some performance problems of
SHOW ENGINE INNODB
STATUS were reduced by removing used
cells and Total number of lock structs in row
lock hash table from the output. Now these values are
present only if the UNIV_DEBUG symbol is
defined at MySQL build time.
(Bug#36941, Bug#36942) Performance:
Over-aggressive lock acquisition by InnoDB
when calculating free space for tablespaces could result in
performance degradation when multiple threads were executing
statements on multi-core machines.
(Bug#38185) Important Change: Security Fix:
Additional corrections were made for the symlink-related
privilege problem originally addressed in MySQL 5.1.24. The
original fix did not correctly handle the data directory path
name if it contained symlinked directories in its path, and the
check was made only at table-creation time, not at table-opening
time later.
Note
Additional fixes were made in MySQL 5.1.41.
(Bug#32167, CVE-2008-2079) See also Bug#39277. Security Enhancement:
The server consumed excess memory while parsing statements with
hundreds or thousands of nested boolean conditions (such as
OR (OR ... (OR ... ))). This could lead to a
server crash or incorrect statement execution, or cause other
client statements to fail due to lack of memory. The latter
result constitutes a denial of service.
(Bug#38296) Incompatible Change:
There were some problems using DllMain()
hook functions on Windows that automatically do global and
per-thread initialization for
libmysqld.dll:
Per-thread initialization: MySQL internally counts the
number of active threads, which causes a delay in
my_end() if not all threads have
exited. But there are threads that can be started either by
Windows internally (often in TCP/IP scenarios) or by users.
Those threads do not necessarily use
libmysql.dll functionality but still
contribute to the open-thread count. (One symptom is a
five-second delay in times for PHP scripts to finish.)
Process-initialization:
my_init() calls
WSAStartup that itself loads DLLs and
can lead to a deadlock in the Windows loader.
To correct these problems, DLL initialization code now is not
invoked from libmysql.dll by default. To
obtain the previous behavior (DLL initialization code will be
called), set the LIBMYSQL_DLLINIT environment
variable to any value. This variable exists only to prevent
breakage of existing Windows-only applications that do not call
mysql_thread_init() and work
okay today. Use of LIBMYSQL_DLLINIT is
discouraged and is removed in MySQL 6.0.
(Bug#37226, Bug#33031) Incompatible Change:
SHOW STATUS took a lot of CPU
time for calculating the value of the
Innodb_buffer_pool_pages_latched
status variable. Now this variable is calculated and included in
the output of SHOW STATUS only if
the UNIV_DEBUG symbol is defined at MySQL
build time.
(Bug#36600) Incompatible Change:
An additional correction to the original MySQL 5.1.23 fix was
made to normalize directory names before adding them to the list
of directories. This prevents /etc/ and
/etc from being considered different, for
example.
(Bug#20748) See also Bug#38180. Partitioning:
When a partitioned table had a
TIMESTAMP column defined with
CURRENT_TIMESTAMP as the default but with no
ON UPDATE clause, the column's value was
incorrectly set to CURRENT_TIMESTAMP when
updating across partitions.
(Bug#38272) Partitioning:
myisamchk failed with an assertion error when
analyzing a partitioned MyISAM table.
(Bug#37537) Partitioning:
A LIST partitioned MyISAM
table returned erroneous results when an index was present on a
column in the WHERE clause and NOT
IN was used on that column.
Searches using the index were also much slower then if the index
were not present.
(Bug#35931) Partitioning:
SELECT COUNT(*) was not correct for some
partitioned tables using a storage engine that did not support
HA_STATS_RECORDS_IS_EXACT. Tables using the
ARCHIVE storage engine were known to be
affected.
This was because ha_partition::records() was
not implemented, and so the default
handler::records() was used in its place.
However, this is not correct behavior if the storage engine does
not support HA_STATS_RECORDS_IS_EXACT.
The solution was to implement
ha_partition::records() as a wrapper around
the underlying partition records.
As a result of this fix, the rows column in the output of
EXPLAIN
PARTITIONS now includes the total number of records in
the partitioned table.
(Bug#35745) Partitioning:
MyISAM recovery enabled with the
--myisam-recover option did not
work for partitioned MyISAM tables.
(Bug#35161) Partitioning:
When one user was in the midst of a transaction on a partitioned
table, a second user performing an ALTER
TABLE on this table caused the server to hang.
(Bug#34604) Partitioning:
Attempting to execute an INSERT
DELAYED statement on a partitioned table produced the
error Table storage engine for
'table' doesn't have this
option, which did not reflect the source of the
error accurately. The error message returned in such cases has
been changed to DELAYED option not supported for
table 'table'.
(Bug#31210) Replication:
Some kinds of internal errors, such as Out of
memory errors, could cause the server to crash when
replicating statements with user variables.
certain internal errors.
(Bug#37150) Replication:
Row-based replication did not correctly copy
TIMESTAMP values from a
big-endian storage engine to a little-endian storage engine.
(Bug#37076) Replication:
INSTALL PLUGIN and
UNINSTALL PLUGIN caused row-based
replication to fail.
Note
These statements are not replicated; however, when using
row-based logging, the changes they introduce in the
mysql system tables are written to the
binary log.
(Bug#35807)
Server-side cursors were not initialized properly, which could
cause a server crash.
(Bug#38486)
A server crash or Valgrind warnings could result when a stored
procedure selected from a view that referenced a function.
(Bug#38291)
A failure to clean up binary log events was corrected (detected
by Valgrind).
(Bug#38290)
Incorrect handling of aggregate functions when loose index scan
was used caused a server crash.
(Bug#38195)
Queries containing a subquery with DISTINCT
and ORDER BY could cause a server crash.
(Bug#38191)
The fix for Bug#20748 caused a problem such that on Unix, MySQL
programs looked for options in ~/my.cnf
rather than the standard location of
~/.my.cnf.
(Bug#38180)
If the table definition cache contained tables with many
BLOB columns, much memory could
be allocated to caching BLOB
values. Now a size limit on the cached
BLOB values is enforced.
(Bug#38002)
For InnoDB tables, ORDER BY ...
DESC sometimes returned results in ascending order.
(Bug#37830)
If a table has a BIT NOT NULL column
c1 with a length shorter than 8 bits and some
additional NOT NULL columns
c2, ..., and a
SELECT query has a
WHERE clause of the form (c1 =
constant) AND c2 ..., the
query could return an unexpect
| |