This build passes our test suite and fixes a lot of reported bugs found in the previous 5.0.0 release. However, please be aware that this is not a “standard MySQL build” in the sense that there are still some open critical bugs in our bugs database at http://bugs.mysql.com/ that affect this release as well. We are actively fixing these and will make a new release where these are fixed as soon as possible. However, this binary should be a good candidate for testing new MySQL 5.0 features for future products.
Functionality added or changed:
Incompatible Change:
C API change: mysql_shutdown()
now requires a second argument. This is a source-level
incompatibility that affects how you compile client programs; it
does not affect the ability of compiled clients to communicate
with older servers. See Section 20.8.3.65, “mysql_shutdown()
”.
Replication:
For replication of MEMORY
(HEAP
) tables: Made the master automatically
write a DELETE FROM
statement to its binary
log when a MEMORY
table is opened for the
first time since the master's startup. This is for the case
where the slave has replicated a nonempty
MEMORY
table, and then the master is shut
down and restarted: the table is now empty on the master; the
DELETE FROM
empties it on the slave as well.
Even with this fix, between the master's restart and the first
use of the table on master, the slave still has out-of-date data
in the table. However, if you use the
--init-file
option to populate
the MEMORY
table on the master at startup, it
ensures that the failing time interval is zero.
(Bug#2477)
Replication:
Added the
--replicate-same-server-id
server
option.
Replication:
DROP DATABASE IF EXISTS
, DROP TABLE
IF EXISTS
, single-table
DELETE
, and single-table
UPDATE
now are written to the
binary log even if they changed nothing on the master (for
example, even if a DELETE
matched
no rows). The old behavior sometimes caused bad surprises in
replication setups.
Replication: Replication and mysqlbinlog now have better support for the case that the session character set and collation variables are changed within a given session. See Section 16.4.1, “Replication Features and Issues”.
The Type
column name and values in the output
from SHOW TABLES
are now shown
according to standard. The column name has changed from
Type
to
table_type
; permitted values
are BASE TABLE
, VIEW
, and
ERROR
.
(Bug#4603)
Added Last_query_cost
status
variable that reports optimizer cost for last compiled query.
Changed that when the MySQL server has binary logging disabled
(that is, no --log-bin
option was
used), then no transaction binary log cache is allocated for
connections. This should save
binlog_cache_size
bytes of
memory (32KB by default) for every connection.
Implemented a new “greedy search” optimizer that
can significantly reduce the time spent on query optimization
for some many-table joins. (You are affected if not only some
particular SELECT
is slow, but
even using EXPLAIN
for it takes a
noticeable amount of time.) Two new system variables,
optimizer_search_depth
and
optimizer_prune_level
, can be
used to fine-tune optimizer behavior.
OPTIMIZE TABLE
for
InnoDB
tables is now mapped to
ALTER TABLE
instead of
ANALYZE TABLE
. This rebuilds the
table, which updates index statistics and frees space in the
clustered index.
When a session having open temporary tables terminates, the
statement automatically written to the binary log is now
DROP TEMPORARY TABLE IF EXISTS
instead of
DROP TEMPORARY TABLE
, for more robustness.
Added support for read-only and updatable views based on a single table or other updatable views. View use requires that you upgrade your grant tables to add the view-related privileges. See Section 4.4.5, “mysql_fix_privilege_tables — Upgrade MySQL System Tables”.
Added the sql_updatable_view_key
system
variable.
The MySQL server now returns an error if SET
sql_log_bin
is issued by a user without the
SUPER
privilege (in previous
versions it just silently ignored the statement in this case).
When a database is dropped, all routines belonging to that database are also dropped.
Added the --to-last-log
option to
mysqlbinlog, for use in conjunction with
--read-from-remote-server
.
sync_frm
is now a settable
global variable (not only a startup option).
Added --innodb_safe_binlog
server
option, which adds consistency guarantees between the content of
InnoDB
tables and the binary log. See
Section 5.2.3, “The Binary Log”.
Explicit USE
statements no longer are allowed in a stored
procedure.
db_name
Added the sync_binlog=N
global variable and
startup option, which makes the MySQL server synchronize its
binary log to disk (fdatasync()
) after every
Nth write to the binary log.
Killing a CHECK TABLE
statement
does not result in the table being marked as
“corrupted” any more; the table remains as if
CHECK TABLE
had not even started.
See Section 12.4.6.3, “KILL
Syntax”.
Changed the slave SQL thread to print less useless error
messages (no more message duplication; no more messages when an
error is skipped because of
slave-skip-errors
).
When executed from another database, an implicit USE
is in effect.
db_name
When installing a MySQL server as a Windows service, the
installation command can include a
--local-service
option following the service
name to cause the server to run using the
LocalService
Windows account that has limited
privileges. This is in addition to the
--defaults-file
option that also
can be given following the service name.
Procedure names may be qualified, for example,
db.p()
A stored procedure is no longer “global.” That is, it now belongs to a specific database:
When a database is dropped, all routines belonging to that database are also dropped.
Procedure names may be qualified, for example,
db.p()
When executed from another database, an implicit
USE
is
in effect.
db_name
Explicit USE
statements no longer are allowed in a stored
procedure.
db_name
See Section 18.2, “Using Stored Routines (Procedures and Functions)”.
Bugs fixed:
Replication:
When a multiple-table DROP TABLE
failed to drop a table on the master server, the error was not
written to the binary log.
(Bug#4553)
Replication:
When the slave SQL thread was replicating a
LOAD DATA
INFILE
statement, it didn't show the statement in the
output of SHOW PROCESSLIST
.
(Bug#4326)
Replication:
Complex expressions using AND
,
OR
, or both could result in a crash if the
query containing the expression query was ignored, either by a
replication server due to --replicate-*-table
rules, or by any MySQL server due to a syntax error.
(Bug#3969, Bug#4494)
Replication:
The slave SQL thread refused to replicate
INSERT ...
SELECT
if it examined more than 4 billion rows.
(Bug#3871)
Replication:
If server-id
was not set using startup
options but with SET
GLOBAL
, the replication slave still complained that it
was not set.
(Bug#3829)
Replication:
A MySQL slave server built using
--with-debug
, and replicating
itself, crashed.
(Bug#3568)
Replication:
Multiple-table DELETE
statements
were always replicated by the slave if there were some
--replicate-*-ignore-table
options and no
--replicate-*-do-table
options.
(Bug#3461)
Replication:
Memory could be corrupted by replicating a
LOAD DATA
INFILE
from a MySQL 3.23 master. Some less critical
issues remain; see Section 16.4.1, “Replication Features and Issues”.
(Bug#3422)
Replication: In some replication error messages, a very long query caused the rest of the message to be invisible (truncated), by putting the query last in the message. (Bug#3357)
Replication:
Changed that when a thread handling INSERT
DELAYED
(also known as a
delayed_insert
thread) is killed, its
statements are recorded with an error code of value zero
(killing such a thread does not endanger replication, so we thus
avoid a superfluous error on the slave).
(Bug#3081)
Replication:
Corrected the master's binary log position that
InnoDB
reports when it is doing a crash
recovery on a slave server.
(Bug#3015)
Replication:
--replicate-wild-*-table
rules now apply to
ALTER DATABASE
when the table
pattern is %
, as is the case for
CREATE DATABASE
and
DROP DATABASE
.
(Bug#3000)
Replication:
Statements did not raise errors on the slave, if the slave was
excluded given the --replicate-*
options in use
at the time. The effect of this problem was: when a statement
was killed on the master, the slave stopped.
(Bug#2983)
Replication:
Multiple-table DELETE
statements
were never replicated by the slave if there were any
--replicate-*-table
options.
(Bug#2527)
Replication:
Replication: If a client connects to a slave server and issues
an administrative statement for a table (for example,
OPTIMIZE TABLE
or
REPAIR TABLE
), this could
sometimes stop the slave SQL thread. This does not lead to any
corruption, but you must use START
SLAVE
to get replication going again.
(Bug#1858)
If CREATE TEMPORARY TABLE t SELECT
failed
while loading the data, the temporary table was not dropped.
(Bug#4551)
mysql_fix_privilege_tables did not handle the
--password=
option correctly.
(Bug#4240, Bug#4543)password_val
Made DROP DATABASE
honor the
value of
lower_case_table_names
.
(Bug#4066)
During the installation process of the server RPM on Linux, if
mysqld was run as the root
system user and with --log-bin
pointing to a directory outside of
/var/lib/mysql
, it created binary log files
owned by root
in this directory, which
remained owned by root
after the
installation. Now mysqld is started as the
mysql
system user instead.
(Bug#4038)
A potential memory overrun could occur in
mysql_real_connect()
(which
required a compromised DNS server and certain operating
systems).
(Bug#4017)
mysqlbinlog didn't escape the string content of user variables, and did not deal well when these variables were in non-ASCII character sets; this is now fixed by always printing the string content of user variables in hexadecimal. The character set and collation of the string is now also printed. (Bug#3875)
mysqlbinlog failed to print a
USE
statement under those rare
circumstances where the binary log contained a
LOAD DATA
INFILE
statement.
(Bug#3415)
A rare error condition caused the slave SQL thread spuriously to print the message Binlog has bad magic number and stop when it was not necessary to do so. (Bug#3401)
mysqlbinlog --read-from-remote-server now
print the exact positions of events in lines beginning with
at #
in the log.
(Bug#3214)
mysqlbinlog --read-from-remote-server read
all binary logs following the one that was requested. It now
stops at the end of the requested file, the same as it does when
reading a local binary log. There is an option
--to-last-log
to get the old behavior.
(Bug#3204)
Strange results with index (x, y) ... WHERE
x=
(Bug#3155)val_1
AND
y>=val_2
ORDER BY
pk
;
Adding ORDER BY
to a query that uses a
subquery can cause incorrect results.
(Bug#3118)
Changed that when a DROP TEMPORARY TABLE
statement is automatically written to the binary log when a
session ends, the statement is recorded with an error code of
value zero (this ensures that killing a
SELECT
on the master does not
result in a superfluous error on the slave).
(Bug#3063)
When a Rotate
event was found by the slave
SQL thread in the middle of a transaction, the value of
Relay_Log_Pos
in SHOW
SLAVE STATUS
was incorrectly altered.
(Bug#3017)
Running LOAD DATA FROM MASTER
after
RESET SLAVE
caused a segmentation
fault.
(Bug#2922)
A deadlock ocurred when two START
SLAVE
commands were run at the same time.
(Bug#2921)
Changed the column Seconds_Behind_Master
in
SHOW SLAVE STATUS
to never show a
value of -1.
(Bug#2826)
Made clearer the error message that one gets when an update is
refused because of the
--read-only
option.
(Bug#2757)
The MySQL server did not report any error if a statement
(submitted through
mysql_real_query()
or
mysql_stmt_prepare()
) was
terminated by garbage characters. This can happen if you pass a
wrong length
parameter to these functions.
The result was that the garbage characters were written into the
binary log.
(Bug#2703)
SLAVE START
(which is a deprecated syntax,
START SLAVE
should be used
instead) could crash the slave.
(Bug#2516)
ALTER DATABASE
caused the client
to hang if the database did not exist.
(Bug#2333)
The --local-load
option of
mysqlbinlog now requires an argument.
User Comments
Add your own comment.