Functionality added or changed:
InnoDB
now supports indexing a prefix of
a column. This means, in particular, that
BLOB
and TEXT
columns
can be indexed in InnoDB
tables, which
was not possible before.
A documentation change: Function INTERVAL(NULL,
...)
returns -1
.
Enabled INSERT
from
SELECT
when the table into which the
records are inserted is also a table listed in the
SELECT
.
Allow CREATE TABLE
and
INSERT
from any UNION
.
The SQL_CALC_FOUND_ROWS
option now always
returns the total number of rows for any
UNION
.
Removed --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.
Added thread-specific 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 項4.11.9. 「レプリケーション FAQ」.
A documentation change: added warning notes about safe use
of the CHANGE MASTER
command. See
項4.11.8.1. 「CHANGE MASTER TO
」.
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.
Added --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)
Added --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 because
some MySQL users encountered strange problems when they
accidentally sent SIGINT
to
mysqld
threads.
RESET SLAVE
now clears the
Last_Errno
and
Last_Error
fields in the output of
SHOW SLAVE STATUS
.
Added max_relay_log_size
variable; the
relay log will be rotated automatically when its size
exceeds max_relay_log_size
. But if
max_relay_log_size
is 0 (the default),
max_binlog_size
will be 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 already rotated.
Bugs fixed:
Comparison/sorting for latin1_de
character set was rewritten. The old algorithm could not
handle cases like "sä" > "ßa"
. See
項4.7.1.1. 「ドイツ語キャラクタセット」. 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 allowed 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
on
a table with a multi-part auto_increment key where one part
was a packed CHAR
.
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 INTERVAL
and
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
UNION
operations.
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 stack overflow problem in password verification.
Fixed a problem with
max_user_connections
.
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)
Fixed that SET CHARACTER SET DEFAULT
works. (Bug#462)
Fixed 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)
Fixed 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
NULL
value.
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.
Fixed a bug that limited the maximum value for
mysqld
variables to 4294967295 when they
are specified on the command line.
Fixed a bug that sometimes caused spurious ``Access denied''
errors in HANDLER ... READ
statements,
when a table is referenced via an alias.
Fixed portability problem with
safe_malloc
, which caused MySQL to give
"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 non-transactional table, but
failed at some point (for example, due to a ``Duplicate
key'' error), the query was not written to the binlog. Now
it is written to the binlog, 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
項4.11.6. 「レプリケーションスタートアップオプション」. (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
IGNORE
or REPLACE
clause on the master, was replicated with
IGNORE
. While this is not a problem if
the master and slave data are identical (a
LOAD
that produces no duplicate conflicts
on the master will produce 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 --debug
,
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 binlog 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 binlog, 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)
If 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)
After 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)
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.