Released on 27 Jul 2004
MySQL 5.0.1 Changelog

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 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

  • Bugs Fixed

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 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: 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 Replication Features and Issues.

  • Replication: Added the --replicate-same-server-id server option.

  • 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)

  • 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).

  • Procedure names may be qualified, for example, db.p()

  • When executed from another database, an implicit USE db_name is in effect.

  • 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.

  • 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 mysql_fix_privilege_tables — Upgrade MySQL System Tables.

  • 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).

  • 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.

  • Added the --to-last-log option to mysqlbinlog, for use in conjunction with --read-from-remote-server.

  • Added the sql_updatable_view_key system variable.

  • 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.

  • 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 db_name is in effect.

    • Explicit USE db_name statements no longer are permitted in a stored procedure.

    See Using Stored Routines (Procedures and Functions).

  • 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 KILL Syntax.

  • sync_frm is now a settable global variable (not only a startup option).

  • 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.

  • Explicit USE db_name statements no longer are permitted in a stored procedure.

  • Added Last_query_cost status variable that reports optimizer cost for last compiled query.

  • 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.

  • When a database is dropped, all routines belonging to that database are also dropped.

  • Added --innodb-safe-binlog server option, which adds consistency guarantees between the content of InnoDB tables and the binary log. See The Binary Log.

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 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=password_val option correctly. (Bug #4240, Bug #4543)

  • 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=val_1 AND y>=val_2 ORDER BY pk; (Bug #3155)

  • 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 statements 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.