Performance Schema Notes:
MySQL Server now includes Performance Schema, a feature for
monitoring server execution at a low level. It is implemented
via the PERFORMANCE_SCHEMA
storage
engine and the performance_schema
database.
Performance Schema focuses primarily on performance data. This
differs from INFORMATION_SCHEMA
, which serves
for inspection of metadata. For more information, see
Chapter 20, MySQL Performance Schema.
Performance Schema support is included in binary MySQL
distributions. It is disabled by default. To enable it, start
the server with the
--performance_schema
option.
To create the performance_schema
database if
you are upgrading from an earlier release, run
mysql_upgrade and restart the server. See
Section 4.4.7, “mysql_upgrade — Check Tables for MySQL Upgrade”.
InnoDB Plugin Notes:
This release includes InnoDB Plugin
1.0.6.
This version is considered of Release Candidate (RC) quality.
Functionality added or changed:
Performance: The performance of internal functions that trim multiple spaces from strings when comparing them has been improved. (Bug#14637)
Incompatible Change: The following obsolete constructs have been removed. Where alternatives are shown, applications should be updated to use them.
The log_bin_trust_routine_creators
system
variable (use
log_bin_trust_function_creators
).
The myisam_max_extra_sort_file_size
system variable.
The record_buffer
system variable (use
read_buffer_size
).
The sql_log_update
system variable.
The table_type
system variable (use
storage_engine
).
The FRAC_SECOND
modifier for the
TIMESTAMPADD()
function.
The TYPE
table option to specify the
storage engine for CREATE
TABLE
or ALTER
TABLE
(use ENGINE
).
The SHOW TABLE TYPES
SQL statement (use
SHOW ENGINES
).
The SHOW INNODB STATUS
and
SHOW MUTEX STATUS
SQL statements (use
SHOW ENGINE
INNODB STATUS
SHOW ENGINE
INNODB MUTEX
).
The SHOW PLUGIN
SQL statement (use
SHOW PLUGINS
).
The LOAD TABLE ... FROM MASTER
and
LOAD DATA FROM MASTER
SQL statements (use
mysqldump or
mysqlhotcopy to dump tables and
mysql to reload dump files).
The BACKUP TABLE
and
RESTORE TABLE
SQL statements
(use mysqldump or
mysqlhotcopy to dump tables and
mysql to reload dump files).
TIMESTAMP(
data type: The ability to specify a display width of
N
)N
(use without
N
).
The --default-character-set
and
--default-collation
server options (use
--character-set-server
and
--collation-server
).
The --delay-key-write-for-all-tables
server
option (use
--delay-key-write=ALL
).
The --enable-locking
and
--skip-locking
server options (use
--external-locking
and
--skip-external-locking
).
The --log-bin-trust-routine-creators
server
option (use
--log-bin-trust-function-creators
).
The --log-long-format
server option.
The --log-update
server option.
The --master-
server options to set replication parameters (use the
xxx
CHANGE MASTER TO
statement
instead): --master-host
,
--master-user
, --master-password
, --master-port
,
--master-connect-retry
,
--master-ssl
,
--master-ssl-ca
,
--master-ssl-capath
,
--master-ssl-cert
,
--master-ssl-cipher
,
--master-ssl-key
.
The --safe-show-database
server option.
The --skip-symlink
and
--use-symbolic-links
server options (use
--skip-symbolic-links
and --symbolic-links
).
The --sql-bin-update-same
server option.
The --warnings
server option (use
--log-warnings
).
The --no-named-commands
option for
mysql (use
--skip-named-commands
The --no-pager
option for
mysql (use
--skip-pager
).
The --no-tee
option for
mysql (use --skip-tee
).
The --position
option for
mysqlbinlog (use
--start-position
).
The --all
option for
mysqldump (use
--create-options
).
The --first-slave
option for
mysqldump (use
--lock-all-tables
).
The --config-file
option for
mysqld_multi (use
--defaults-extra-file
).
The
--set-variable=
and var_name
=value
-O
general-purpose options for setting program variables (use
var_name
=value
--
).
var_name
=value
See also Bug#47974.
Incompatible Change:
Aliases for wildcards (as in SELECT t.* AS 'alias' FROM
t
) are no longer accepted and result in an error.
Previously, such aliases were ignored silently.
(Bug#27249)
Incompatible Change:
FLUSH TABLES
has a new variant, FLUSH
TABLES
. This variant enables tables to be flushed and
locked in a single operation. It provides a workaround for the
restriction (due to work done for Bug#989) that
tbl_list
WITH READ
LOCKFLUSH TABLES
is
disallowed when there is an active
LOCK TABLES ...
READ
.
See also Bug#42465.
Incompatible Change:
The server now includes dtoa
, a library for
conversion between strings and numbers by David M. Gay. In
MySQL, this library provides the basis for improved conversion
between string or DECIMAL
values
and approximate-value
(FLOAT
/DOUBLE
)
numbers:
Consistent conversion results across platforms, which eliminates, for example, Unix versus Windows conversion differences.
Accurate representation of values in cases where results previously did not provide sufficient precision, such as for values close to IEEE limits.
Conversion of numbers to string format with the best
possible precision. The precision of dtoa
is always the same or better than that of the standard C
library functions.
Because the conversions produced by this library differ in some cases from previous results, the potential exists for incompatibilities in applications that rely on previous results. For example, applications that depend on a specific exact result from previous conversions might need adjustment to accommodate additional precision.
For additional information about the properties of
dtoa
conversions, see
Section 11.2.2, “Type Conversion in Expression Evaluation”.
See also Bug#12860, Bug#21497, Bug#26788, Bug#24541, Bug#34015.
Incompatible Change: The Unicode implementation has been extended to provide support for supplementary characters that lie outside the Basic Multilingual Plane (BMP). Noteworthy features:
utf16
and utf32
character sets have been added. These correspond to the
UTF-16 and UTF-32 encodings of the Unicode character set,
and they both support supplementary characters.
The utf8mb4
character set has been added.
This is similar to utf8
, but its encoding
allows up to four bytes per character to enable support for
supplementary characters.
The ucs2
character set is essentially
unchanged except for the inclusion of some newer BMP
characters.
In most respects, upgrading to MySQL 5.5 should present few problems with regard to Unicode usage, although there are some potential areas of incompatibility. These are the primary areas of concern:
For the variable-length character data types
(VARCHAR
and the
TEXT
types), the maximum
length in characters is less for utf8mb4
columns than for utf8
columns.
For all character data types
(CHAR
,
VARCHAR
, and the
TEXT
types), the maximum
number of characters that can be indexed is less for
utf8mb4
columns than for
utf8
columns.
Consequently, if you want to upgrade tables from
utf8
to utf8mb4
to take
advantage of supplementary-character support, it may be
necessary to change some column or index definitions.
For additional details about the new Unicode character sets and potential incompatibilities, see Section 9.1.10, “Unicode Support”, and Section 9.1.11, “Upgrading from Previous to Current Unicode Support”.
Incompatible Change:
Several columns were added to the
INFORMATION_SCHEMA.ROUTINES
table
to provide information about the RETURNS
clause data type for stored functions:
DATA_TYPE
,
CHARACTER_MAXIMUM_LENGTH
,
CHARACTER_OCTET_LENGTH
,
NUMERIC_PRECISION
,
NUMERIC_SCALE
,
CHARACTER_SET_NAME
, and
COLLATION_NAME
.
This change produces an incompatibility for applications that
depend on column order in the
ROUTINES
table because the new
columns appear between the ROUTINE_TYPE
and
DTD_IDENTIFIER
columns. Such applications may
need to be adjusted to account for the new columns.
Important Change: Replication:
RESET MASTER
and
RESET SLAVE
now reset the values
shown for Last_IO_Error
,
Last_IO_Errno
,
Last_SQL_Error
, and
Last_SQL_Errno
in the output of
SHOW SLAVE STATUS
.
(Bug#34654)
See also Bug#44270.
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)
Cluster Replication: Replication:
MySQL Replication now supports attribute promotion and demotion
for row-based replication between columns of different but
similar types on the master and the slave. For example, it is
possible to promote an INT
column
on the master to a BIGINT
column
on the slave, and to demote a
TEXT
column to a
VARCHAR
column.
The implementation of type demotion distinguishes between lossy
and non-lossy type conversions, and their use on the slave can
be controlled by setting the
slave_type_conversions
global
server system variable.
For more information, see Row-based replication: attribute promotion and demotion. (Bug#47163, Bug#46584)
mysqltest has a new
--max-connections
option to set a higher number
of maximum allowed server connections than the default 128. This
option can also be passed via
mysql-test-run.pl.
(Bug#51135)
mysql-test-run.pl has a new
--portbase
option and a corresponding
MTR_PORT_BASE
environment variable for
setting the port range, as an alternative to the existing
--build-thread
option.
(Bug#50182)
SHOW PROFILE
CPU
has been ported to Windows. Thanks to Alex
Budovski for the patch.
(Bug#50057)
mysql-test-run.pl has a new
--gprof
option that runs the server through the
gprof profiler, much the same way the
currently supported --gcov
option runs it
through gcov.
(Bug#49345)
mysqltest has a new
lowercase_result
command that converts the
output of the next statement to lowercase. This is useful for
test cases where the lettercase may vary between platforms.
(Bug#48863)
mysqltest has a new
remove_files_wildcard
command that removes
files matching a pattern from a directory.
(Bug#39774)
MySQL support for adding collations using LDML specifications
did not support the <i>
identity rule
that indicates one character sorts identically to another. The
<i>
rule now is supported.
(Bug#37129)
For boolean options, the option-processing library now prints
additional information in the --help
message:
If the option is enabled by default, the message says so and
indicates that the --skip
form of the option
disables the option. This affects all compiled MySQL programs
that use the library.
(Bug#35224)
The use of the SQL_CACHE
and
SQL_NO_CACHE
options in
SELECT
statements now is checked
more restrictively: 1) Previously, both options could be given
in the same statement. This is no longer true; only one can be
given. 2) Previously, these options could be given in
SELECT
statements that were not
at the top-level. This is no longer true; the options are
disallowed in subqueries (including subqueries in the
FROM
clause, and
SELECT
statements in unions other
than the first SELECT
.
(Bug#35020)
Added the --auto-vertical-output
option to mysql which causes result sets to
be displayed vertically if they are too wide for the current
window, and using normal tabular format otherwise. (This applies
to statements terminated by ;
or
\G
.)
(Bug#26780)
TRUNCATE TABLE
now is allowed for
a table for which a WRITE
lock has been
acquired with LOCK TABLES
.
(Bug#20667)
See also Bug#46452.
FLUSH LOGS
now
takes an optional log_type
value so
that FLUSH
can be used
to flush only a specified log type. These
log_type
LOGSlog_type
options are allowed:
BINARY
closes and reopens the binary log
files.
ENGINE
closes and reopens any flushable
logs for installed storage engines.
ERROR
closes and reopens the error log
file.
GENERAL
closes and reopens the general
query log file.
RELAY
closes and reopens the relay log
files.
SLOW
closes and reopens the slow query
log file.
Thanks to Eric Bergen for the patch to implement this feature. (Bug#14104)
Previously, prepared CALL
statements could be used via the C API only for stored
procedures that produce at most one result set, and applications
could not use placeholders for OUT
or
INOUT
parameters. For prepared
CALL
statements used via
PREPARE
and
EXECUTE
, placeholders could not
be used for OUT
or INOUT
parameters.
For the C API, prepared CALL
support now is expanded in the following ways:
A stored procedure can produce any number of result sets. The number of columns and the data types of the columns need not be the same for all result sets.
The final values of OUT
and
INOUT
parameters are available to the
calling application after the procedure returns. These
parameters are returned as an extra single-row result set
following any result sets produced by the procedure itself.
The row contains the values of the OUT
and INOUT
parameters in the order in
which they are declared in the procedure parameter list.
A new C API function,
mysql_stmt_next_result()
, is
available for processing stored procedure results. See
Section 21.9.15, “C API Support for Prepared CALL
Statements”.
The CLIENT_MULTI_RESULTS
flag now is
enabled by default. It no longer needs to be enabled when
you call
mysql_real_connect()
. (This
flag is necessary for executing stored procedures because
they can produce multiple result sets.)
For PREPARE
and
EXECUTE
, placeholder support for
OUT
and INOUT
parameters
is now available. See Section 12.2.1, “CALL
Syntax”.
(Bug#11638, Bug#17898)
Three options were added to mysqldump make it easier to generate a dump from a slave server:
--dump-slave
is similar to
--master-data
, but the
CHANGE MASTER TO
statement
contains binary log coordinates for the slave's master host,
not the slave itself.
--apply-slave-statements
causes STOP SLAVE
and
START SLAVE
statements to be
added before the CHANGE MASTER
TO
statement and at the end of the output,
respectively.
--include-master-host-port
causes the CHANGE MASTER TO
statement to include MASTER_PORT
and
MASTER_HOST
options for the slave's
master.
(Bug#8368)
mysqladmin now allows the password value to
be omitted following the password
command. In
this case, mysqladmin prompts for the
password value, which enables you to avoid specifying the
password on the command line. Omitting the password value should
be done only if password
is the final command
on the mysqladmin command line. Otherwise,
the next argument is taken as the password.
(Bug#5724)
The server now provides a pluggable audit interface that enables information about server operations to be reported to interested parties. Audit plugins may register with the audit interface to receive notification about server operations. When an auditable event occurs within the server, the server determines whether notification is needed. For each registered audit plugin, the server checks the event against those event classes in which the plugin is interested and passes the event to the plugin if there is a match. For more information, see Section 22.2.3.3, “Audit Plugins”.
Some conversions between Japanese character sets are more efficient.
When the server detects MyISAM
table
corruption, it now writes additional information to the error
log, such as the name and line number of the source file, and
the list of threads accessing the table. Example: Got
an error from thread_id=1, mi_dynrec.c:368
. This is
useful information to include in bug reports.
The TABLESPACES
table has been
added to INFORMATION_SCHEMA
for tracking
tablespace details.
Added the PARAMETERS
table to
INFORMATION_SCHEMA
. The
PARAMETERS
table provides
information about stored function and procedure parameters, and
about return values for stored functions.
The maximum length of table comments was extended from 60 to 2048 characters. The maximum length of column comments was extended from 255 to 1024 characters. Index definitions now can include a comment of up to 1024 characters.
Bugs fixed:
Performance: Replication:
When writing events to the binary log, transactional events
(that is, events that operate on transactional tables) are
written to a thread-specific transaction cache, which is then
written to the binary log on commit. In order to handle
nontransactional events, there was a lock taken on the binary
log (when entering the function
MYSQL_BIN_LOG::write()
), even when the event
was written to the transaction cache instead of the binary log,
causing a major bottleneck in replication performance.
(Bug#42757)
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 Enhancement:
When the DATA DIRECTORY
or INDEX
DIRECTORY
clause of a CREATE
TABLE
statement referred to a subdirectory of the data
directory via a symlinked component of the data directory path,
it was accepted, when for security reasons it should be
rejected.
(Bug#39277)
Incompatible Change: Replication:
The --binlog_format
system variable can no
longer be set inside a transaction. In other words, the binary
logging format can no longer be changed while a transaction is
in progress.
(Bug#47863)
Incompatible Change:
For debug builds, wttempts to execute
RESET
statements within a
transaction that had acquired metadata locks led to an assertion
failure.
As a result of this bug fix,
RESET
statements now cause an
implicit commit.
(Bug#51336)
Incompatible Change:
A deadlock occurred for this sequence of events: Session 1
locked a table using LOCK TABLES
;
Session 2 dropped the database containing the table; Session 1
created any database.
A consequence of this bug fix is that
CREATE DATABASE
is disallowed
within a session that has an active LOCK
TABLES
statement.
(Bug#49988)
Incompatible Change:
For application compatibility reasons, when
sql_auto_is_null
is 1, MySQL
converts
to
auto_inc_col
IS
NULL
. However, this was being done
regardless of whether the predicate was alone or at the top
level. Now it occurs only when it is a single top-level
predicate.
auto_inc_col
=
LAST_INSERT_ID()
In conjunction with this bug fix, the default value of the
sql_auto_is_null
system
variable has been changed from 1 to 0, which may cause
incompatibilities with existing applications.
(Bug#41371)
Incompatible Change:
The parser accepted illegal syntax in a FOREIGN
KEY
clause:
Multiple MATCH
clauses.
Multiple ON DELETE
clauses.
Multiple ON UPDATE
clauses.
MATCH
clauses specified after ON
UPDATE
or ON DELETE
. In case of
multiple redundant clauses, this leads to confusion, and
implementation-dependent results.
These illegal syntaxes are now properly rejected. Existing applications that used them will require adjustment. (Bug#34455)
Incompatible Change:
The Locked
thread state was equivalent to the
Table lock
state and has been removed. It no
longer appears in SHOW
PROCESSLIST
output.
(Bug#28870)
Incompatible Change:
Several changes were made to the processing of multiple-table
DELETE
statements:
Statements could not perform cross-database deletes unless the tables were referred to without using aliases. This limitation has been lifted and table aliases now are allowed.
Previously, alias declarations could be given for tables
elsewhere than in the
table_references
part of the
syntax. This could lead to ambiguous statements that have
unexpected results such as deleting rows from the wrong
table. Example:
DELETE FROM t1 AS a2 USING t1 AS a1 INNER JOIN t2 AS a2;
Now alias declarations can be declared only in the
table_references
part. Elsewhere
in the statement, alias references are allowed but not alias
declarations.
Alias resolution was improved so that it is no longer possible to have inconsistent or ambiguous aliases for tables.
Statements containing alias constructs that are no longer allowed must be rewritten. (Bug#27525)
See also Bug#30234.
Incompatible Change:
DROP TABLE
now is allowed only if
you have acquired a WRITE
lock with
LOCK TABLES
, or if you hold no
locks, or if the table is a TEMPORARY
table.
Previously, if other tables were locked, you could drop a table with a read lock or no lock, which could lead to deadlocks between clients. The new stricter behavior means that some usage scenarios will fail when previously they did not. (Bug#25858)
Incompatible Change:
If a data definition language (DDL) statement occurred for a
table that was being used by another session in an active
transaction, statements could be written to the binary log in
the wrong order. For example, this could happen if DROP
TABLE
occurred for a table being used in a
transaction. This is now prevented by deferring release of
metadata locks on tables used within a transaction until the
transaction ends.
This bug fix results in some incompatibilities with previous versions:
A table that is being used by a transaction within one session cannot be used in DDL statements by other sessions until the transaction ends.
FLUSH
TABLES
is disallowed when there is an active
LOCK TABLES ...
READ
. Use
FLUSH TABLES
instead. This causes a problem with
mysqlhotcopy, fixed in Bug#42465.
tbl_list
WITH READ LOCK
Important Change: Replication: For an engine that supported only row-based replication, replication stopped with an error when executing row events.
For information about changes in how the binary logging format is determined in relation to statement type and storage engine logging capabilities, see Section 5.2.4.3, “Mixed Binary Logging Format”.
As part of the fix for this issue, the
EXAMPLE
storage engine is now
changed so that it supports statement-based logging only.
Previously, it supported row-based logging only.
(Bug#39934)
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:
The first time that a query against the
INFORMATION_SCHEMA.TABLES
table for
partitioned tables using the
ARCHIVE
engine was run, it returned
invalid data. If the server had been restarted since such a
table had been created, or if the table had never actually been
opened, its DATA_LENGTH
was reported as 0
bytes. (The second and subsequent attempts to issue the same
query returned the expected result.)
(Bug#44622)
Partitioning:
ALTER TABLE
on a partitioned
table caused unnecessary deadlocks.
(Bug#43867)
See also Bug#46654.
Partitioning:
Attempting to drop a partitioned table from one connection while
waiting for the completion of an ALTER
TABLE
that had been issued from a different
connection, and that changed the storage engine used by the
table, could cause the server to crash.
(Bug#42438)
Partitioning: After attempting to create a duplicate index on a partitioned table (and having the attempt fail as expected), a subsequent attempt to create a new index on the table caused the server to hang. (Bug#40181)
Partitioning:
When used on a partitioned table, ALTER
TABLE
produced the wrong error message when the name
of a nonexistent storage engine was used in the
ENGINE
clause.
(Bug#35765)
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: Portions of the partitioning code were refactored in response to potential regression issues uncovered while working on the fix for Bug#31210. (Bug#32115)
See also Bug#40281.
Replication:
When using the row-based or mixed replication format with a
debug build of the MySQL server, inserts into columns using the
UTF32
character set on the master caused the
slave to crash.
(Bug#51787)
See also Bug#51716.
Replication:
When using the row-based or mixed replication format, column
values using the UTF16
character set on the
master were padded incorrectly on the slave.
(Bug#51716)
See also Bug#51787.
Replication:
An issue internal to the code, first seen in Bug#49132 but not
completely resolved in the fix for that bug, was removed. This
should prevent similar issues to those in the previous bug with
binlog_format
changes following
DDL statements.
For developers working with the MySQL Server
code: the public class variable
THD::current_stmt_binlog_row_based
was
supposed to have been removed as part of the fix for Bug#39934,
but was still present in the code. If a developer later tried to
use this variable, it could cause the previous issues to
re-occur, and possibly new ones to arise. The variable has now
been removed; the previously added class functions
THD::is_current_stmt_binlog_format_row()
,
THD::set_current_stmt_binlog_format_row()
,
and
THD::clear_current_stmt_binlog_format_row()
should be used instead.
(Bug#51021)
Replication: Adding an index to a table on the master caused the slave to stop logging slow queries to the slow query log. (Bug#50620)
Replication:
On a replication slave, a race condition between the I/O thread
and FLUSH LOGS
could crash the server.
(Bug#50364)
Replication:
If a CHANGE MASTER TO
statement
set MASTER_HEARTBEAT_PERIOD
to 30 or higher,
Slave_received_heartbeats
did
not increase on the slave. This caused the slave to reconnect
before the time indicated by
slave_net_timeout
had elapsed.
This issue affected big-endian 64-bit platforms such as Solaris/SPARC. (Bug#50296)
Replication:
The error message given when trying to replicate (using
statement-based mode) insertions into an
AUTO_INCREMENT
column by a stored function or
a trigger was improved.
(Bug#50192)
Replication:
The server could deadlock when
FLUSH LOGS
was
executed concurrently with DML statements. To fix this problem,
nontransactional changes are now always flushed before
transactional changes.
(Bug#50038)
Replication:
Metadata for GEOMETRY
fields was not properly
stored by the slave in its definitions of tables.
(Bug#49836)
See also Bug#48776.
Replication:
Column length information generated by
InnoDB
did not match that generated
by MyISAM
, which caused invalid
metadata to be written to the binary log when trying to
replicate BIT
columns.
(Bug#49618)
Replication: Statement-based replication of user variables having numeric data types did not always work correctly. (Bug#49562)
Replication: When using the semi-synchronous replication plugin on Windows, the wait time calculated when the master was waiting for reply from the slave was incorrect. In addition, when the wait time was less than the current time, the master did not wait for a reply at all.
This issue was caused by the fact that a different internal function was used to get current time by the plugin on Windows as opposed to other platforms, and this function was not correctly implemented. Now the Windows version of the plugin uses the same function as other platforms for this purpose. (Bug#49557)
Replication: Due to a change in the format of the information used by the slave to connect to the master, which could cause to reject connection attempts to older masters by newer slaves. (Bug#49259)
This regression was introduced by Bug#13963.
Replication:
When using row-based logging, a failing
INSERT...SELECT
statement on a nontransactional table was not flagged correctly,
such that, if a rollback was requested and no other
nontransactional table had been updated, nothing was written to
the binary log.
(Bug#47175)
See also Bug#40278.
Replication:
When using row-based replication, the incomplete logging of a
group of events involving both transaction and nontransactional
tables could cause STOP SLAVE
to
hang.
(Bug#45940)
Replication: There were two related issues concerning handling of unsafe statements and setting of the binary logging format when there were open temporary tables on the master, and the existing replication format was row-based or mixed:
When using
binlog_format=ROW
, and an
unsafe statement was executed while there were open
temporary tables on the master, the statement
SET
@@session.binlog_format = MIXED
failed with the
error Cannot switch out of the row-based binary
log format when the session has open temporary
tables.
When using
binlog_format=MIXED
, and an
unsafe statement was executed while there were open
temporary tables on the master, the statement
SET
@@session.binlog_format = STATEMENT
caused any
subsequent DML statements to be written to the binary log
using the row-based format instead of the statement-based
format.
Replication:
Statements that updated AUTO_INCREMENT
columns in multiple tables were logged using the row-based
format when --binlog_format
was set to
MIXED
, but did not cause an Unsafe
statement warning to be generated when
--binlog_format
was set to
STATEMENT
.
(Bug#45827)
See also Bug#39934.
Replication:
Even though INSERT DELAYED
statements are unsafe for statement-based replication, they
caused the statement only to be logged in row format when the
binary logging format was MIXED
, but did not
cause a warning to be generated when the binary logging format
was STATEMENT
.
(Bug#45825)
Replication:
When using MIXED
binary logging format,
statements containing a LIMIT
clause and
occurring in stored routines were not written to the log as row
events.
(Bug#45785)
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.
This was not an issue when using row-based replication.
Replication:
STOP SLAVE
did not flush the
relay log or the master.info
or
relay-log.info
files, which could lead to
corruption if the server crashed.
(Bug#44188)
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 nontransactional 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.
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.
See also Bug#37148.
Replication:
On Windows, RESET MASTER
failed
in the event of a missing binlog file rather than issuing a
warning and completing the rest of the statement.
(Bug#42150, Bug#42218)
Replication:
Executing the sequence of statements RESET
SLAVE
, RESET MASTER
,
and FLUSH LOGS
,
when binary log or relay log files listed in the index file
could not be found, could cause the server to crash. This could
happen, for example, when these files had been moved or deleted
manually.
(Bug#41902)
Replication:
MySQL creates binary logs in a numbered sequence, with a maximum
possible 4294967295 concurrent log files, 4294967295 being the
maximum value for an unsigned long integer. However, binary log
file extensions were turned into negative numbers once the
variable used to hold the value reached the maximum value for a
signed long integer (2147483647). Consequently, when the
sequence value was incremented to the next (negative) number,
this caused MySQL to try to create the file using a
.000000
extension, causing the server to
fail since this file already existed.
Negative file extensions are now disallowed, and an error is
returned when the limit is reached. In addition,
FLUSH LOGS
now
also reports warnings to the user, if the extension number has
reached the limit, and warnings are printed to the error log
when the limit is approaching.
(Bug#40611)
Replication:
Issuing concurrent STOP SLAVE
,
START SLAVE
, and
RESET SLAVE
statements using
different connections caused the replication slave to crash.
(Bug#38716)
Replication:
A slave compiled using
--with-libevent
and run with
--thread-handling=pool-of-threads
could sometimes crash.
(Bug#36929)
Replication:
mysqlbinlog sometimes failed when trying to
create temporary files; this was because it ignored the
specified temp file directory and tried to use the system
/tmp
directory instead.
(Bug#35546)
See also Bug#35543.
Replication:
A CHANGE MASTER TO
statement with
no MASTER_HEARTBEAT_PERIOD
option failed to
reset the heartbeat period to its default value.
(Bug#34686)
Replication:
Formerly, only slaves that had been started with the
--report-hosts
option were visible in the
output of SHOW SLAVE HOSTS
. Now,
all slaves that are registered with the master appear in
SHOW SLAVE HOSTS
output.
As part of the fix for this issue, the
Rpl_recovery_rank
column, which
had appeared in the output of SHOW SLAVE
HOSTS
in some MySQL releases, was removed because the
corresponding variable (also removed by this fix) was never
actually used.
(Bug#13963)
mysqld_multi failed due to a syntax error in the script. (Bug#51468)
ALTER TABLE
on a
MERGE
table that has been locked
using LOCK TABLES
... WRITE
incorrectly produced an
ER_TABLE_NOT_LOCKED_FOR_WRITE
error.
(Bug#51240)
On some Unix/Linux platforms, an error during build from source
could be produced, referring to a missing
LT_INIT
program. This is due to versions of
libtool 2.1 and earlier.
(Bug#51009)
Referring to a subquery result in a HAVING
clause could produce incorrect results.
(Bug#50995)
Use of filesort
plus the join cache normally
is preferred to a full index scan. But it was used even if the
index is clustered, in which case, the clustered index scan can
be faster.
(Bug#50843)
For debug builds, SHOW BINARY
LOGS
caused an assertion to be raised if binary
logging was not enabled.
(Bug#50780)
The server did not recognize that the stored procedure cache became invalid if a view was created or modified within a procedure, resulting in a crash. (Bug#50624)
Incorrect handling of BIT
columns
in temporary tables could lead to spurious duplicate-key errors.
(Bug#50591)
The second or subsequent invocation of a stored procedure
containing DROP TRIGGER
could
cause a server crash.
(Bug#50423)
The return value for calls to put information into the stored routine cache were not consistently checked, causing an assertion to be raised. (Bug#50412)
Full-text queries that used the truncation operator
(*
) could enter an infinite loop.
(Bug#50351)
For debug builds, an assertion was incorrectly raised in the
optimizer when matching ORDER BY
expressions.
(Bug#50335)
Queries optimized with GROUP_MIN_MAX did not clean up KEYREAD optimizations properly, causing subsequent queries to return incomplete rows. (Bug#49902)
mysql --show-warnings crashed if the server connection was lost. (Bug#49646)
For string-valued system variables containing multibyte characters, the byte length was used in contexts where the character length was more appropriate. (Bug#49645)
SHOW VARIABLES
did not correctly
display string-valued system variables that contained
\0
characters.
(Bug#49644)
MySQL program option-processing code incorrectly displayed some options when printing ambiguous-option errors. (Bug#49640)
For dynamic format MyISAM
tables
containing LONGTEXT
columns, a
bulk INSERT ... ON
DUPLICATE KEY UPDATE
or bulk
REPLACE
could cause corruption.
(Bug#49628)
Setting binlog_format
to
DEFAULT
assigned a value different from the
default.
(Bug#49540)
For debug builds, with
sql_safe_updates
enabled, a
multiple-table UPDATE
with the
IGNORE
modifier could raise an assertion.
(Bug#49534)
EXPLAIN
EXTENDED
crashed trying to print column names for a
subquery in the FROM
clause when the table
had gone out of scope.
(Bug#49487)
mysqltest no longer lets you execute an SQL
statement on a connection after doing a send
command, unless you do a reap
first. This was
previously accepted but could produce unpredictable results.
(Bug#49269)
Valgrind warnings for several logging messages were corrected. (Bug#49130)
For debug builds on Windows, warnings about incorrect use of debugging directives were written to the error log. The directives were rewritten to eliminate these messages. (Bug#49025)
On POSIX systems, calls to select()
with a
file descriptor set larger than FD_SETSIZE
resulted in unpredictable I/O errors; for example, when a large
number of tables required repair.
(Bug#48929)
A dependent subquery containing
COUNT(DISTINCT
could be
evaluated incorrectly.
(Bug#48920)col_name
))
Building MySQL on Fedora Core 12 64-bit failed, due to errors in comp_err. (Bug#48864)
If a stored function contained a
RETURN
statement with an
ENUM
value in the ucs2
character set, SHOW CREATE
FUNCTION
and SELECT DTD_IDENTIFIER FROM
INFORMATION_SCHEMA.ROUTINES
returned incorrect values.
(Bug#48766)
An ARZ file missing from the database directory caused the server to crash. (Bug#48757)
Running SHOW CREATE TABLE
on a
view v1
that contained a function which
accessed another view v2
could trigger a
infinite loop if the view (v2
) referenced
within the function caused a warning to be raised while being
opened.
(Bug#48449)
Invalid memory reads could occur following a query that
referenced a MyISAM
tale multiple
times with a write lock.
(Bug#48438)
For debug builds, creating a view containing a row constructor caused an assertion to be raised. (Bug#48294)
An aliasing violation in the C API could lead to a crash. (Bug#48284)
Slow CALL
statements were not always logged
to the slow query log because execution time for
multiple-statement stored procedures was assessed incorrectly.
(Bug#47905)
For debug builds, killing a
SELECT
retrieving from a view
that was processing a function caused an assertion to be raised.
(Bug#47736)
Failure to open a view with a nonexistent
DEFINER
was improperly handled and the server
would crash later attempting to lock the view.
(Bug#47734)
If a prepared statement used both a MERGE
table and a stored function or trigger, execution sometimes
failed with a No such table error.
(Bug#47648)
CREATE VIEW
raised an assertion
if a temporary table existed with the same name as the view.
(Bug#47635)
If a temporary table was created with the same name as a view referenced in a stored routine, routine execution could raise an assertion. (Bug#47313)
Selecting from the process list in the embedded server caused a crash. (Bug#47304)
See also Bug#43733.
Programs did not exit if the option file specfied by
--defaults-file
was not found.
(Bug#47216)
Attempts to print octal numbers with
my_vsnprintf()
could cause a crash.
(Bug#47212)
Corrected a potential problem of unintended overwriting of files
when the MY_DONT_OVERWRITE_FILE
flag was
used.
(Bug#47126)
Deadlock occurred if one session was running a multiple-statement transaction that involved a single partitioned table and another session attempted to alter the table. (Bug#46654)
Valgrind warnings about memory allocation overruns for handling
CREATE FUNCTION
statements for
UDFs were corrected.
(Bug#46570)
The server could crash attempting to flush privileges after
receipt of a SIGHUP
signal.
(Bug#46495)
If INSERT INTO
invoked a stored
function that modified tbl_name
tbl_name
, the
server crashed.
(Bug#46374)
For queries that used GROUP_CONCAT(DISTINCT
...)
, the value of
max_heap_table_size
was used
for memory allocation, which could be excessive. Now the minimum
of max_heap_table_size
and
tmp_table_size
is used.
(Bug#46018)
Improperly closing tables when INSERT
DELAYED
needed to reopen tables could cause an
assertion failure.
(Bug#45949)
See also Bug#18484.
Grouping by a subquery in a query with a
DISTINCT
aggregate function led to incorrect
and unordered grouping values.
(Bug#45640)
For an IPv6-enabled MySQL server, privileges specified using standard IPv4 addresses for hosts were not matched (only IPv4-mapped addresses were handled correctly).
As part of the fix for this bug, a new build option
--disable-ipv6
has been introduced. Compiling
MySQL with this option causes all IPv6-specific code in the
server to be ignored.
If the server has been compiled using
--disable-ipv6
, it is not able to resolve
hostnames correctly when run in an IPv6 environment.
The hostname cache failed to work correctly. (Bug#45584)
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)
Propagation of a large unsigned numeric constant in
WHERE
expressions could lead to incorrect
results. This also affected
EXPLAIN
EXTENDED
, which printed incorrect numeric constants in
such transformed WHERE expressions.
(Bug#45360)
There was no timeout for attempts to acquire metadata locks (for
example, a DROP TABLE
attempt for
a table that was open in another transaction would not time
out).
To handle such situations, there is now a
lock_wait_timeout
system
variable that specifies the timeout in seconds for attempts to
acquire metadata locks. The allowed values range from 1 to
3153600 (1 year). The default is 3153600.
This timeout applies to all statements that use metadata locks.
These include DML and DDL operations on tables, views, stored
procedures, and stored functions, as well as
LOCK TABLES
,
FLUSH TABLES WITH READ
LOCK
, and HANDLER
statements.
The timeout value applies separately for each metadata lock
attempt. A given statement can require more than one lock, so it
is possible for the statement to block for longer than the
lock_wait_timeout
value before
reporting a timeout error. When lock timeout occurs,
ER_LOCK_WAIT_TIMEOUT
is
reported.
lock_wait_timeout
does not
apply to delayed inserts, which always execute with a timeout of
1 year. This is done to avoid unnecessary timeouts because a
session that issues a delayed insert receives no notification of
delayed insert timeouts.
In addition, the unused
table_lock_wait_timeout
system
variable was removed.
(Bug#45225)
Valgrind warnings about uninitialized variables in optimizer code were corrected. (Bug#45195)
Killing a delayed-insert thread could cause a server crash. (Bug#45067)
Execution of FLUSH
TABLES
or FLUSH
TABLES WITH READ LOCK
concurrently with
LOCK TABLES
resulted in deadlock.
(Bug#45066)
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.
Some plugins configured as mandatory could be disabled at server startup. (Bug#44691)
InnoDB
took a shared row lock when
executing SELECT
statements
inside a stored function as a part of a transaction using
REPEATABLE READ
. This
prevented other transactions from updating the row.
(Bug#44613)
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)
A natural join of INFORMATION_SCHEMA
tables
could cause an assertion failure.
(Bug#43834)
When used in conjunction with LOCK
TABLES
, FLUSH
TABLE
waited for
all tables with old versions to clear from the table definition
list, rather than only the named tables.
(Bug#43685)tbl_list
HANDLER
statements are now
disallowed if a table lock has been acquired with
LOCK TABLES
.
(Bug#43272)
In the embedded server, stack overflow checks for recursive stored procedure calls did not work and stack overflow could occur. (Bug#43201)
The IPv6 loopback address ::1
was interpeted
as a hostname rather than a numeric IP address.
In addition, the IPv6-enabled server on Windows interpeted the
hostname localhost
as ::1
only, which failed to match the default
root@127.0.0.1
entry in the
mysql.user
privilege table.
(Bug#43006)
The server could crash if an attempt to open a
MERGE
table child MyISAM
table failed.
(Bug#42862)
Comparison of TIME
values could
lose the sign of operands.
(Bug#42664)
MAKETIME()
could lose the sign of
negative arguments.
(Bug#42662)
SEC_TO_TIME()
could lose the sign
of negative arguments.
(Bug#42661)
Due to work done for Bug#989,
FLUSH TABLES
is
disallowed when there is an active
LOCK TABLES ...
READ
. This caused a problem with
mysqlhotcopy, which used that sequence of
statements. mysqlhotcopy now uses
FLUSH TABLES
to
flush and lock tables. If mysqlhotcopy is
used with a server older than MySQL 5.5.3 that does not support
this statement, it has a new option
tbl_list
WITH READ LOCK--old_server
that causes it
to use the previous statement sequence.
(Bug#42465)
Setting key_buffer_size
to a
negative value could lead to very large allocations. Now an
error occurs.
(Bug#42103)
An assertion failure could occur if
OPTIMIZE TABLE
was started on an
InnoDB
table and the table was altered to a
different storage engine during the optimization operation.
(Bug#42074)
The state of a thread for the embedded server was always
displayed as Writing to net
, which is
incorrect because there is no network connection for the
embedded server.
(Bug#41971)
The patch for Bug#10374 broke named-pipe and shared-memory connections on Windows. (Bug#41860)
Purging the stored routine cache could take a long time and render the server unresponsive. (Bug#41804)
The CSV engine did not parse '\X' characters when they occurred in unquoted fields. (Bug#40814)
When archive tables were joined on their primary keys, a query returned no result if the optimizer chose to use this index. (Bug#40677)
mysqld_safe did not treat dashes and underscores as equivalent in option names. Thanks to Erik Ljungstrom for the patch to fix this bug. (Bug#40368)
SHOW CREATE VIEW
returned invalid
SQL if the definition contained a
SELECT
'
statement
where the string
'string
was longer than the
maximum length of a column name, due to the fact that this text
was also used as an alias (in the AS
clause).
Because not all names retrieved from arbitrary
SELECT
statements can be used as
view column names due to length and format restrictions, the
server now checks the conformity of automatically generated
column names and rewrites according to a predefined format any
names that are not acceptable as view column names before
storing the final view definition on disk.
In such cases, the name is now rewritten as
Name_exp_
,
where pos
pos
is the position of the
column. To avoid this conversion scheme, define explicit, valid
names for view columns using the
column_list
clause of the
CREATE VIEW
statement.
As part of this fix, aliases are now generated only for top-level statements. (Bug#40277)
Threads were set to the Table lock
state in
such a way that use of this state by other threads to check for
a lock wait was subject to a race condition.
(Bug#39897)
Plugin shutdown could lead to an assertion failure caused by using an already destroyed mutex in the metadata locking subsystem. (Bug#39674)
Dropping a locked Maria
table leads to an
assertion failure.
(Bug#39395)
Host name lookup failure could lead to a server crash. (Bug#39153)
flush_cache_records()
did not correctly check
for errors that should cause statement execution to stop,
leading to a server crash.
(Bug#39022)
Valgrind warnings that occurred for SHOW
TABLE STATUS
with InnoDB
tables
were silenced.
(Bug#38479)
An IPv6-enabled MySQL server did not resolve the IP addresses of incoming connections correctly, with the result that a connection that attempted to match any privilege table entries using fully-qualified domain names for hostnames or hostnames using wildcards were dropped. (Bug#38247)
Concurrent execution of ALTER
TABLE
for InnoDB
table
and a transaction that tried to read and then update the table
could result in a deadlock between table-level locks and
InnoDB
row locks, which was
detected only after the
innodb_lock_wait_timeout
timeout occurred.
(Bug#37346)
Previously, statements inside a stored program did not clear the
warning list. For example, warnings or errors generated by
statements within a trigger or stored function would be
accumulated and added to the message list for the statement that
activated the trigger or invoked the function,
“polluting” the output of SHOW
WARNINGS
or SHOW ERRORS
for the outer statement. Normally, messages for a statement that
can generate messages replace messages from the previous such
statement. The effect was that a statement could have a
different effect on the message list depending on whether it
executed inside or outside of a stored program.
Now within a stored program, successive statements that can generate messages update the message list and replace messages from the previous such statement. Only messages from the last of these statements is copied to the message list for the outer statement. (Bug#36649)
myisampack --join did not create the
destination table .frm
file.
(Bug#36573)
The parser incorrectly allowed MySQL error code 0 to be specified for a condition handler. (This is incorrect because the condition must be a failure condition and 0 indicates success.) (Bug#36510)
When parsing or formatting interval values of
DAY_MICROSECOND
type, fractional seconds were
not handled correctly when more-significant fields were implied
or omitted.
(Bug#36466)
mysql_install_db failed if run as
root
and the root directory
(/
) was not writable.
(Bug#36462)
mysql_stmt_prepare()
did not
reset the list of messages (those messages available via
SHOW WARNINGS
).
(Bug#36004)
mysqlbinlog left temporary files on the disk after shutdown, leading to the pollution of the temporary directory, which eventually caused mysqlbinlog to fail. This caused problems in testing and other situations where mysqlbinlog might be invoked many times in a relatively short period of time. (Bug#35543)
When building MySQL when using a different target directory (for
example using the VPATH
environment
variable), the build of the embedded readline
component would fail.
(Bug#35250)
String-valued system variables could be assigned literal values, but could not be assigned values using expressions. Now expressions are legal. (Bug#34883, Bug#46314)
The sql_mode
system variable
could be assigned the illegal value of '?'
.
(Bug#34834)
Some system variables could not be assigned the value
DEFAULT
to assign their default value.
(Bug#34829, Bug#34878)
Compiling MySQL on FreeBSD would fail due to missing definitions for certain network constants. (Bug#34292)
Creation of a temporary BLOB
or
TEXT
column could create a column
with the wrong maximum length.
(Bug#33969)
INSERT INTO ...
VALUES(DEFAULT)
failed to insert the correct value for
ENUM
columns. For
MyISAM
tables, an empty value was
inserted. For CSV
tables, the table
became corrupt.
(Bug#33717)
When read_only
was enabled, the
server incorrectly prevented data modifications to
TEMPORARY
tables belonging to transactional
storage engines such as InnoDB
.
(Bug#33669)
Constant expressions in WHERE
,
HAVING
, or ON
clauses were
not cached, but were evaluated for each row. This caused a
slowdown of query execution, especially if constant user-defined
functions or stored functions were used.
(Bug#33546)
The parser accepted an INTO
clause in nested
SELECT
statements, which is
invalid because such statements must return their results to the
outer context.
(Bug#33204)
Killing a statement that invoked a stored function could return an incorrect error message indicating table corruption rather than that the statement had been interrupted. (Bug#32140)
Occurrence of an error within a stored routine did not always cause immediate statement termination. (Bug#31881)
For DROP FUNCTION
(that is, when the function name is qualified with the database
name), the statement should apply only to a stored function
named db_name
.func_name
func_name
in the given database.
However, if a UDF with the same name existed, the statement
dropped the UDF instead.
(Bug#31767)
Concurrent statements using a stored function and
DROP FUNCTION
for that function
could break statement-based replication.
(Bug#30977)
mysqld sometimes miscalculated the number of
digits required when storing a floating-point number in a
CHAR
column. This caused the
value to be truncated, or (when using a debug build) caused the
server to crash.
(Bug#26788)
See also Bug#12860.
ALTER TABLE
could not be used to
add columns to a table if the table had an index on a
utf8
column with a
TEXT
data type.
(Bug#26180)
If an operation had an InnoDB
table, and two
triggers, AFTER UPDATE
and AFTER
INSERT
, competing for different resources (such as two
distinct MyISAM
tables), the triggers were
unable to execute concurrently. In addition,
INSERT
and
UPDATE
statements for the
InnoDB
table were unable to run concurrently.
(Bug#26141)
Some system variables displayed by SHOW
VARIABLES
could not be selected using SELECT
@@{GLOBAL,SESSION}.
.
(Bug#25430)var_name
Statements to create, alter, or drop a view were not waiting for completion of statements that were using the view, which led to incorrect sequences of statements in the binary log when statement-based logging was enabled. (Bug#25144)
Previously, the server handled character data types for a stored
routine parameter, local routine variable created with
DECLARE
, or stored function
return value as follows: If the CHARACTER SET
attribute was present, the COLLATE
attribute
was not supported, so the character set's default collation was
used. (This includes use of BINARY
, which in
this context specifies the binary collation of the character
set.) If there was no CHARACTER SET
attribute, the database character set and its default collation
were used.
Now for character data types, if there is a CHARACTER
SET
attribute in the declaration, the specified
character set and its default collation is used. If the
COLLATE
is also present, that collation is
used rather than the default collation. If there is no
CHARACTER SET
attribute, the database
character set and collation in effect at routine creation time
are used. (The database character set and collation are given by
the value of the
character_set_database
and
collation_database
system
variables.)
(Bug#24690)
Data truncated for column
warnings were
generated for some (constant) values that did not have too high
precision.
(Bug#24541)col_num
at row
row_num
A statement that caused a circular wait among statements did not
return a deadlock error. Now the server detects deadlock and
returns ER_LOCK_DEADLOCK
.
(Bug#22876)
Several data-modification statements were not being counted
toward the MAX_UPDATES_PER_HOUR
user resource
limit.
(Bug#21793)
When inserting an extraordinarly large value into a
DOUBLE
column, the value could be
truncated in such a way that the new value cannot be reloaded
manually or from the output of mysqldump.
(Bug#21497)
The value of
sql_slave_skip_counter
was
empty when displayed by SHOW
VARIABLES
or
INFORMATION_SCHEMA.GLOBAL_VARIABLES
.
(Bug#20413, Bug#37187)
For INSERT DELAYED
statements
issued for a table while an ALTER
TABLE
operation on the table was in progress, the
server could return a spurious Server shutdown in
progress
error.
(Bug#18484)
See also Bug#45949.
Delayed-insert threads were counted as connected but not as
created, incorrectly leading to a
Threads_connected
value
greater than the
Threads_created
value.
(Bug#17954)
The character set was not being properly initialized for
CAST()
with a type such as
CHAR(2) BINARY
, which resulted in
incorrect results or a server crash.
(Bug#17903)
Stored procedure exception handlers were catching fatal errors (such as out of memory errors), which could cause execution not to stop to due a continue handler. Now fatal errors are not caught by exception handlers and a fatal error is returned to the client. (Bug#15192)
Zero-padding of exponent values was not the same across platforms. (Bug#12860)
For CREATE TABLE
, the parser did
not enforce that parentheses were present in a CHECK
(
clause; now it does.
The parser did not enforce that expr
)CONSTRAINT
[
without a
following symbol
]CHECK
clause was illegal; now it
does.
(Bug#11714, Bug#35578, Bug#38696)
If a connection was waiting for a
GET_LOCK()
lock or a
SLEEP()
call, and the connection
aborted, the server did not detect this and thus did not close
the connection. This caused a waste of system resources
allocated to dead connections. Now the server checks such a
connection every five seconds to see whether it has been
aborted. If so, the connection is killed (and any lock request
is aborted).
(Bug#10374)
perror did not work for errors described in
the sql/share/errmsg.txt
file.
(Bug#10143)
The grammar for GROUP BY
, when used with
WITH CUBE
or WITH ROLLUP
,
caused a conflict with the grammar for view definitions that
included WITH CHECK OPTION
.
(Bug#9801)
For the DIV
operator, incorrect
results could occur for noninteger operands that exceed
BIGINT
range. Now, if either
operand has a noninteger type, the operands are converted to
DECIMAL
and divided using
DECIMAL
arithmetic before
converting the result to BIGINT
.
If the result exceeds BIGINT
range, an error
occurs.
(Bug#8457)
Labels in stored routines did not work if the character set was
not latin1
.
(Bug#7088)
Previously, for some Asian CJK character sets, the
UPPER()
and
LOWER()
functions worked only for
basic Latin letters (A-Z
,
a-z
). The affected character sets are
ujis
, sjis
,
gb2312
, cp932
,
eucjpms
, big5
,
euckr
, and gbk
.
Now UPPER()
and
LOWER()
perform case conversion
correctly for all characters in these character sets, with the
exception that if a character set contains a character in only
one lettercase, conversion to the other lettercase cannot be
done.
User Comments
Add your own comment.