End of Product Lifecycle. Active development and support for MySQL Database Server versions 3.23, 4.0, and 4.1 has ended. For details, see http://www.mysql.com/about/legal/lifecycle/#calendar. Please consider upgrading to a recent version. Further updates to the content of this manual will be minimal. All formats of this manual will continue to be available until 31 Dec 2010.
Functionality added or changed:
default_week_format system variable. The value is used as the default mode for the
mysqld now reads an additional option file group having a name corresponding to the server's release series:
[mysqld-4.0] for 4.0.x servers,
[mysqld-4.1] for 4.1.x servers, and so forth. This enables options to be specified on a series-specific basis.
CONCAT_WS() function no longer skips empty strings. (Bug #586).
InnoDB now supports indexing a prefix of a column. This means, in particular, that
TEXT columns can be indexed in
InnoDB tables, which was not possible before.
A documentation change: Function
INTERVAL(NULL, ...) returns
SELECT when the table into which the records are inserted is also a table listed in the
CREATE TABLE and
INSERT from any
SQL_CALC_FOUND_ROWS option now always returns the total number of rows for any
--table option from mysqlbinlog to avoid repeating mysqldump functionality.
Comment lines in option files can now start from the middle of a line, too (like
basedir=c:\mysql # installation directory).
Changed optimizer slightly to prefer index lookups over full table scans in some boundary cases.
max_seeks_for_key variable that can be used to force the optimizer to use keys instead of table scans even if the cardinality of the index is low.
Added optimization that converts
LEFT JOIN to normal join in some cases.
A documentation change: added a paragraph about failover in replication (how to use a surviving slave as the new master, how to resume to the original setup). See Section 14.10, “Replication FAQ”.
A documentation change: added warning notes about safe use of the
CHANGE MASTER TO statement. See Section 126.96.36.199, “CHANGE MASTER TO Syntax”.
MySQL now issues a warning (not an error, as in 4.0.13) when it opens a table that was created with MySQL 4.1.
--nice option to mysqld_safe to allow setting the niceness of the mysqld process. (Thanks to Christian Hammers for providing the initial patch.) (Bug #627)
--read-only option to cause mysqld to allow no updates except from slave threads or from users with the
SUPER privilege. (Original patch from Markus Benning).
SHOW BINLOG EVENTS FROM x where
x is less than 4 now silently converts
x to 4 instead of printing an error. The same change was done for
CHANGE MASTER TO MASTER_LOG_POS=x and
CHANGE MASTER TO RELAY_LOG_POS=x.
mysqld now only adds an interrupt handler for the
SIGINT signal if you start it with the new
--gdb option. This is done because some MySQL users encountered strange problems when they accidentally sent
SIGINT to mysqld threads.
RESET SLAVE now clears the
Last_Error fields in the output of
SHOW SLAVE STATUS.
max_relay_log_size variable; the relay log is rotated automatically when its size exceeds
max_relay_log_size. But if
max_relay_log_size is 0 (the default),
max_binlog_size is used (as in older versions).
max_binlog_size still applies to binary logs in any case.
FLUSH LOGS now rotates relay logs in addition to the other types of logs it rotates.
latin1_de character set was rewritten. The old algorithm could not handle cases like
"sä" > "ßa". See Section 9.2, “Using the German Character Set”. In rare cases it resulted in table corruption.
Fixed a problem with the password prompt on Windows. (Bug #683)
ALTER TABLE ... UNION=(...) for
MERGE table is now permitted even if some underlying
MyISAM tables are read only. (Bug #702)
Fixed a problem with
CREATE TABLE t1 SELECT x'41'. (Bug #801)
Removed some incorrect lock warnings from the error log.
Fixed memory overrun when doing
REPAIR TABLE on a table with a multiple-part auto_increment key where one part was a packed
Fixed a probable race condition in the replication code that could potentially lead to
INSERT statements not being replicated in the event of a
FLUSH LOGS command or when the binary log exceeds
max_binlog_size. (Bug #791)
Fixed a crashing bug in
GROUP BY or
DISTINCT. (Bug #807)
Fixed bug in mysqlhotcopy so it actually aborts for unsuccessful table copying operations. Fixed another bug so that it succeeds when there are thousands of tables to copy. (Bug #812)
Fixed problem with mysqlhotcopy failing to read options from option files. (Bug #808)
Fixed bugs in optimizer that sometimes prevented MySQL from using
FULLTEXT indexes even though it was possible (for example, in
SELECT * FROM t1 WHERE MATCH a,b AGAINST("index") > 0).
Fixed a bug with “table is full” in
Fixed a security problem that enabled users with no privileges to obtain information on the list of existing databases by using
SHOW TABLES and similar commands.
Fixed a stack problem on UnixWare/OpenUnix.
Fixed a configuration problem on UnixWare/OpenUNIX and OpenServer.
Fixed a problem with
HANDLER without an index now works properly when a table has deleted rows. (Bug #787)
Fixed a bug with
LOAD DATA in mysqlbinlog. (Bug #670)
SET CHARACTER SET DEFAULT works. (Bug #462)
MERGE table behavior in
ORDER BY ... DESC queries. (Bug #515)
Fixed server crash on
PURGE MASTER LOGS or
SHOW MASTER LOGS when the binary log is off. (Bug #733)
Fixed password-checking problem on Windows. (Bug #464)
Fixed the bug in comparison of a
DATETIME column and an integer constant. (Bug #504)
Fixed remote mode of mysqlbinlog. (Bug #672)
ERROR 1105: Unknown error that occurred for some
SELECT queries, where a column that was declared as
NOT NULL was compared with an expression that took
Changed timeout in
mysql_real_connect() to use
poll() instead of
select() to work around problem with many open files in the client.
Fixed incorrect results from
MATCH ... AGAINST used with a
LEFT JOIN query.
The maximum value for system variables was limited to 4294967295 when specified on the command line.
Fixed a bug that sometimes caused spurious “Access denied” errors in
HANDLER ... READ statements, when a table is referenced through an alias.
Fixed a portability problem with
safe_malloc, which caused MySQL to produce “Freeing wrong aligned pointer” errors on SCO 3.2.
ALTER TABLE ... ENABLE/DISABLE KEYS could cause a core dump when done after an
INSERT DELAYED statement on the same table.
Fixed problem with conversion of localtime to GMT where some times resulted in different (but correct) timestamps. Now MySQL should use the smallest possible timestamp value in this case. (Bug #316)
Very small query cache sizes could crash mysqld. (Bug #549)
Fixed a bug (accidentally introduced by us but present only in version 4.0.13) that made
INSERT ... SELECT into an
AUTO_INCREMENT column not replicate well. This bug is in the master, not in the slave. (Bug #490)
Fixed a bug: When an
INSERT ... SELECT statement inserted rows into a nontransactional table, but failed at some point (for example, due to a “Duplicate key” error), the query was not written to the binary log. Now it is written to the binary log, with its error code, as all other queries are. About the
slave-skip-errors option for how to handle partially completed queries in the slave, see Section 14.8, “Replication and Binary Logging Options and Variables”. (Bug #491)
SET foreign_key_checks = 0 was not replicated properly. The fix probably will not be backported to 3.23.
On a slave,
LOAD DATA INFILE which had no
REPLACE clause on the master, was replicated with
IGNORE. Although this is not a problem if the master and slave data are identical (a
LOAD that produces no duplicate conflicts on the master produces none on the slave anyway), which is true in normal operation, it is better for debugging not to silently add the
IGNORE. That way, you can get an error message on the slave and discover that for some reason, the data on master and slave are different and investigate why. (Bug #571)
On a slave,
LOAD DATA INFILE printed an incomplete “Duplicate entry '%-.64s' for key %d'” message (the key name and value were not mentioned) in case of duplicate conflict (which does not happen in normal operation). (Bug #573)
When using a slave compiled with
CHANGE MASTER TO RELAY_LOG_POS could cause a debug assertion failure. (Bug #576)
When doing a
LOCK TABLES WRITE on an
InnoDB table, commit could not happen, if the query was not written to the binary log (for example, if
--log-bin was not used, or
binlog-ignore-db was used). (Bug #578)
If a 3.23 master had open temporary tables that had been replicated to a 4.0 slave, and the binary log got rotated, these temporary tables were immediately dropped by the slave (which caused problems if the master used them subsequently). This bug had been fixed in 4.0.13, but in a manner which caused an unlikely inconvenience: If the 3.23 master died brutally (power failure), without having enough time to automatically write
DROP TABLE statements to its binary log, then the 4.0.13 slave would not notice the temporary tables have to be dropped, until the slave mysqld server is restarted. This minor inconvenience is fixed in 3.23.57 and 4.0.14 (meaning the master must be upgraded to 3.23.57 and the slave to 4.0.14 to remove the inconvenience). (Bug #254)
MASTER_POS_WAIT() was waiting, and the slave was idle, and the slave SQL thread terminated,
MASTER_POS_WAIT() would wait forever. Now when the slave SQL thread terminates,
MASTER_POS_WAIT() immediately returns
NULL (“slave stopped”). (Bug #651)
RESET SLAVE; START SLAVE;, the
Relay_Log_Space value displayed by
SHOW SLAVE STATUS was too big by four bytes. (Bug #763)
If a query was ignored on the slave (because of
--replicate-ignore-table and other similar rules), the slave still checked if the query got the same error code (0, no error) as on the master. So if the master had an error on the query (for example, “Duplicate entry” in a multiple-row insert), then the slave stopped and warned that the error codes didn't match. (Bug #797)