The world's most popular open source database
Functionality added or changed:
Incompatible Change: The obsolete constructs in the following table have been removed. Use the equivalents shown in the table's second column instead. Existing applications that depend on the obsolete constructs should be converted to make use of the current equivalents as soon as possible.
| Obsolete: | Current: |
@@table_type
|
@@storage_engine
|
@@log_bin_trust_routine_creators
|
@@log_bin_trust_function_creators
|
TIMESTAMP(
|
See Section 11.6, “Date and Time Functions”. |
TYPE=
|
ENGINE=
|
BACKUP TABLE
|
mysqldump or mysqlhotcopy |
RESTORE TABLE, LOAD TABLE FROM
MASTER
|
mysqldump or mysql |
SHOW TABLE TYPES
|
SHOW [STORAGE] ENGINES
|
SHOW INNODB STATUS
|
SHOW ENGINE INNODB STATUS
|
SHOW MUTEX STATUS
|
SHOW ENGINE INNODB MUTEX
|
--master-
options to set replication parameters:
--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
|
CHANGE MASTER TO
|
Cluster Replication: Replication: A replication heartbeat mechanism has been added to facilitate monitoring. This provides an alternative to checking log files, making it possible to detect in real time when a slave has failed.
Configuration of heartbeats is done via a new
MASTER_HEARTBEAT_PERIOD =
clause for the
intervalCHANGE MASTER TO statement (see
Section 12.6.2.1, “CHANGE MASTER TO Syntax”); monitoring can be done by
checking the values of the status variables
Slave_heartbeat_period and
Slave_received_heartbeats (see
Section 5.1.7, “Server Status Variables”).
The addition of replication heartbeats addresses a number of issues:
Relay logs were rotated every
slave_net_timeout seconds
even if no statements were being replicated.
SHOW SLAVE STATUS displayed
an incorrect value for
Seconds_Behind_Master following a
FLUSH
LOGS statement.
Replication master-slave connections used
slave_net_timeout for
connection timeouts.
Replication:
The global server variable
sync_relay_log is introduced
for use on replication slaves. Setting this variable to a
nonzero integer value N causes the
slave to synchonize the relay log to disk after every
N events. Setting its value to 0
allows the operation system to handle syncronization of the
file. The action of this variable, when enabled, is analogous to
how the sync_binlog variable
works with regard to binary logs on a replication master.
The global server variables
sync_master_info and
sync_relay_log_info are
introduced for use on replication slaves to control
synchronization of, respectively, the
master.info and
relay.info files.
In each case, setting the variable to a nonzero integer value
N causes the slave to synchonize the
corresponding file to disk after every
N events. Setting its value to 0
allows the operation system to handle syncronization of the file
instead.
The actions of these variables, when enabled, are analogous to
how the sync_binlog variable
works with regard to binary logs on a replication master.
An additional system variable
relay_log_recovery is also now
available. When enabled, this variable causes a replication
slave to discard relay log files obtained from the replication
master following a crash.
These variables can also be set in my.cnf,
or by using the --sync-relay-log,
--sync-master-info,
--sync-relay-log-info, and
--relay-log-recovery server
options.
For more information, see Section 16.1.3.3, “Replication Slave Options and Variables”. (Bug#31665, Bug#35542, Bug#40337)
Replication:
Because SHOW BINLOG EVENTS cannot
be used to read events from relay log files, a new
SHOW RELAYLOG EVENTS statement
has been added for this purpose.
(Bug#28777)
Replication: In circular replication, it was sometimes possible for an event to propagate such that it would be reapplied on all servers. This could occur when the originating server was removed from the replication circle and so could no longer act as the terminator of its own events, as normally happens in circular replication.
In order to prevent this from occurring, a new
IGNORE_SERVER_IDS option is introduced for
the CHANGE MASTER TO statement. This option
takes a list of replication server IDs; events having a server
ID which appears in this list are ignored and not applied. For
more information, see Section 12.6.2.1, “CHANGE MASTER TO Syntax”.
(Bug#25998)
See also Bug#27808.
The Multi-Range Read access method does not work reliably for
InnoDB and has been disabled for
InnoDB tables.
(Bug#45029)
The deprecated mysql_fix_privilege_tables script has been removed. (Bug#42589)
If the value of the --log-warnings option is
greater than 1, the server now writes access-denied errors for
new connection attempts to the error log (for example, if a
client user name or password is incorrect).
(Bug#25822)
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.
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)
mysql_upgrade now has an
--upgrade-system-tables
option that causes only the system tables to be upgraded. With
this option, data upgrades are not performed.
Most statements that previously caused an implicit commit before
executing now also cause an implicit commit after executing.
Also, the FLUSH statement and
mysql_refresh() C API function
now cause an implicit commit. See
Section 12.4.3, “Statements That Cause an Implicit Commit”.
The CREATE TABLESPACE privilege
has been introduced. This privilege exists at the global
(superuser) level and enables you to create, alter, and drop
tablespaces and logfile groups.
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.
Parser performance was improved for identifier scanning and conversion of ASCII string literals.
Bugs fixed:
Performance:
The InnoDB adaptive hash latch is released
(if held) for serveral 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)
Incompatible Change:
CHECK TABLE ... FOR
UPGRADE did not check for collation changes made in
MySQL 6.0.1 and 6.0.5 to latin2_czech_cs
(Bug#25420) or collation changes made in MySQL 6.0.6 to
big5_chinese_ci,
cp866_general_ci,
gb2312_chinese_ci, and
gbk_chinese_ci. This also affects
mysqlcheck and
mysql_upgrade, which cause that statement to
be executed. See Section 2.12.3, “Checking Whether Table Indexes Must Be Rebuilt”.
(Bug#40054)
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 WITH
READ LOCK blocks for active transactions that hold
metadata locks until those transactions end. The same is
true for attempts to set the global value of the
read_only system variable.
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)
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:
Truncating a partitioned MyISAM table did not
reset the AUTO_INCREMENT value.
(Bug#35111)
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 row-based replication, the incomplete logging of a
group of events involving both transaction and non-transactional
tables could cause STOP SLAVE to
hang.
(Bug#45940)
Replication: Failures while flushing the relay log were not always reported. (Bug#45820)
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:
START SLAVE succeeded even if the
I/O thread did not connect to the master.
(Bug#44830)
Replication:
The server failed to start when using the
--log-slave-updates option
without also using the --log-bin
option. Now in such cases, only a warning message is generated.
(Bug#44663)
Replication: An extraneous debug message was written repeatedly to the slave error log, which could eventually lead to premature exhaustion of disk space. (Bug#43647)
Replication:
When the logging format was set without binary logging being
enabled, the server failed to start. Now in such cases, the
server starts successfully,
binlog_format is set, and a
warning is logged instead of an error.
(Bug#42928)
Replication:
An error message relating to permissions required for
SHOW SLAVE STATUS was confusing.
(Bug#34227)
A CREATE TABLE attempt for a
table that had been opened with
HANDLER caused an assertion
failure because CREATE TABLE did
not close any open handlers for the table.
(Bug#47107)
The test suite was missing from RPM packages. (Bug#46834)
For debug builds, an assertion failure could result from concurrent execution of statements involving stored functions or triggers that were using several tables and DDL statements that affected those tables. (Bug#46748)
The server crashed for attempts to drop a trigger for which the subject table was shadowed by a temporary table with the same name. (Bug#46747)
Deadlock could occur when executing transactions containing
data-modifying statements at the same time as
FLUSH TABLES WITH READ
LOCK or
SET
read_only=1 statements.
(Bug#46673)
Selecting from a MERGE table with a corrupted
child MyISAM table could cause a server crash
when the server attempted to automatically repair the child
table.
(Bug#46610)
The server could crash attempting to flush privileges after
receipt of a SIGHUP signal.
(Bug#46495)
When running the test suite with Valgrind the
archive_aio_posix test case took
approximately 60 minutes to complete, causing the test suite to
fail due to timeout.
(Bug#46461)
HANDLER OPEN
followed by TRUNCATE
TABLE could cause a server crash.
(Bug#46452)
See also Bug#20667.
The server crashed if a shutdown occurred while a connection was
idle. This happened because of a NULL pointer
dereference while logging to the error log.
(Bug#46267)
After an error such as a table-full condition,
INSERT IGNORE
could cause an assertion failure for debug builds.
(Bug#46075)
Deadlock could occur for INFORMATION_SCHEMA
queries when execution attempted to open a table or its
.frm file.
(Bug#46044)
Improperly closing tables when INSERT
DELAYED needed to reopen tables could cause an
assertion failure.
(Bug#45949)
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)
NULL values were not grouped properly for
some joins containing GROUP BY.
(Bug#45267)
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)
ALTER TABLE ... ADD
COLUMN for a table with multiple foreign keys caused a
server crash.
(Bug#45052)
If a session had a table locked with LOCK
TABLES for both READ and
WRITE, ALTER
TABLE could fail.
(Bug#45035)
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/6 addresses that a domain name maps to.
(Bug#45017)
mysqld_safe could fail to find the logger program. (Bug#44736)
Some Perl scripts in AIX packages contained an incorrect path to the perl executable. (Bug#44643)
For debug builds, executing a stored procedure as a prepared statement could sometimes cause an assertion failure. (Bug#44521)
A natural join of INFORMATION_SCHEMA tables
could cause an assertion failure.
(Bug#43834)
Queries executed using index condition pushdown could return incorrect results because the condition could evaluate to an unexpected result. (Bug#43600)
The server crashed if invoked with the
--verbose and
--help options.
(Bug#43533)
HANDLER statements are now
disallowed if a table lock has been acquired with
LOCK TABLES.
(Bug#43272)
Redefining a trigger could cause an assertion failure. (Bug#43054)
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)
The named_pipe system variable
was not properly defined in Windows. For example,
SHOW VARIABLES did not display
the variable.
(Bug#42173)
The patch for Bug#10374 broke named-pipe and shared-memory connections on Windows. (Bug#41860)
Premature metadata lock downgrade for
CREATE TABLE ...
SELECT could result in an inconsistent binary log or
failure with an ER_CANT_LOCK
error.
(Bug#41425)
Plugin shutdown could lead to an assertion failure caused by using an already destroyed mutex in the metadata locking subsystem. (Bug#39674)
Concurrent connections executing
FLUSH TABLES
and at least two statements using the same table could cause all
three connections to stall with 100% CPU utilization.
(Bug#38661)
Valgrind warnings that occurred for SHOW
TABLE STATUS with InnoDB tables
were silenced.
(Bug#38479)
mysqlbinlog had a memory leak in its option-processing code. (Bug#38468)
Use of GET_LOCK() within an Event
Manager event could cause a server crash.
(Bug#37774)
Valgrind warnings that occurred when reading spatial indexes were silenced. (Bug#37066)
For its warning count, the
mysql_info() C API function
could print the number of truncated data items rather than the
number of warnings.
(Bug#34898)
The LAST_DAY() and
MAKEDATE() functions could return
NULL, but the result metadata indicated
NOT NULL. Thanks to Hiromichi Watari for the
patch to fix this bug.
(Bug#33629)
Instance Manager (mysqlmanager) has been removed, but a reference to it still appeared in the mysql.server script. (Bug#33472)
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)
Renaming a column that appeared in a foreign key definition did not update the foreign key definition with the new column name. (Bug#21704)
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)
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)
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)


User Comments
Add your own comment.