Previously, MySQL development proceeded by including a large set of features and moving them over many versions within a release series through several stages of maturity (Alpha, Beta, and so forth). This development model had a disadvantage in that problems with only part of the code could hinder timely release of the whole. As you might have found when testing MySQL Server 6.0, alpha quality code could jeopardize the stability of the entire release. (One consequence of this was that MySQL Server 6.0 has been withdrawn for now.)
MySQL development now uses a milestone model. The move to this model provides for more frequent milestone releases, with each milestone proceeding through a small number of releases having a focus on a specific subset of thoroughly tested features. Following the releases for one milestone, development proceeds with the next milestone; that is, another small number of releases that focuses on the next small set of features, also thoroughly tested.
MySQL 5.5.0-m2 is the first release for Milestone 2. The new features of this milestone may be considered to be initially of beta quality. For subsequent Milestone 2 releases, we plan to use increasing version numbers (5.5.1 and higher) while continuing to employ the “-m2” suffix. For Milestone 3, we plan to change the suffix to “-m3”. Version designators with “-alpha” or “-beta” suffixes are no used.
You may notice that the MySQL 5.5.0 release is designated as Milestone 2 rather than Milestone 1. This is because MySQL 5.4 was actually designated as Milestone 1, although we had not yet begun referring to milestone numbers as part of version numbers at the time.
InnoDB Plugin Notes:
        The InnoDB Plugin is included in MySQL
        5.5 releases as the built-in version of
        InnoDB. The version of the InnoDB
        Plugin in this release is 1.0.5 and is considered of
        Release Candidate (RC) quality.
      
        The InnoDB Plugin offers new features,
        improved performance and scalability, enhanced reliability and
        new capabilities for flexibility and ease of use. Among the
        features of the InnoDB Plugin are “Fast
        index creation,” table and index compression, file format
        management, new INFORMATION_SCHEMA tables,
        capacity tuning, multiple background I/O threads, and group
        commit.
      
        For information about these features, see the InnoDB
        Plugin Manual at
        http://www.innodb.com/products/innodb_plugin/plugin-documentation.
        For general information about using InnoDB in
        MySQL, see Section 13.6, “The InnoDB Storage Engine”.
      
        In InnoDB Plugin, the
        innodb_file_io_threads system
        variable has been removed and replaced with
        innodb_read_io_threads and
        innodb_write_io_threads. If you
        upgrade from MySQL 5.1 to MySQL 5.5 and previously explicitly
        set innodb_file_io_threads at
        server startup, you must change your configuration. Either
        remove any reference to
        innodb_file_io_threads or
        replace it with references to
        innodb_read_io_threads and
        innodb_write_io_threads.
      
Functionality added or changed:
Incompatible Change: 
        MySQL Server now includes a plugin services interface that
        complements the plugin API. The services interface enables
        server functionality to be exposed as a “service”
        that plugins can access through a function-call interface. The
        libmysqlservices library provides access to
        the available services and dynamic plugins now must be linked
        against this library (use the -lmysqlservices
        flag). For an example showing what
        Makefile.am should look like, see
        Section 22.2.6, “MySQL Services for Plugins”.
       (Bug#48461)
Incompatible Change: Several changes have been made regarding the language and character set of error messages:
            The --language option for
            specifying the directory for the error message file is now
            deprecated. The new
            --lc-messages-dir and
            --lc-messages options should
            be used instead, and
            --language is handled as an
            alias for --lc-messages-dir.
          
            The language system
            variable has been removed and replaced with the new
            lc_messages_dir and
            lc_messages system
            variables. lc_messages_dir
            has only a global value and is read only.
            lc_messages has global and
            session values and can be modified at runtime, so the error
            message language can be changed while the server is running,
            and individual clients each can have a different error
            message language by changing their session
            lc_messages value to a
            different locale name.
          
            Error messages previously were constructed in a mix of
            character sets. This issue is resolved by constructing error
            messages internally within the server using UTF-8 and
            returning them to the client in the character set specified
            by the
            character_set_results
            system variable. The content of error messages therefore may
            in some cases differ from the messags returned previously.
          
For more information, see Section 9.2, “Setting the Error Message Language”, and Section 9.1.6, “Character Set for Error Messages”.
Partitioning: 
        New PARTITION BY RANGE
        COLUMNS( and
        column_list)PARTITION BY LIST
        COLUMNS(
        options are added for the column_list)CREATE
        TABLE and ALTER TABLE
        statements.
      
        A major benefit of RANGE COLUMNS and
        LIST COLUMNS partitioning is that they make
        it possible to define ranges or lists based on column values
        that use string, date, or datetime values.
      
        These new extensions also broaden the scope of partition pruning
        to provide better coverage for queries using comparisons on
        multiple columns in the WHERE clause, some
        examples being WHERE a = 1 AND b < 10 and
        WHERE a = 1 AND b = 10 AND c < 10.
      
        For more information, see Section 17.2.1, “RANGE Partitioning”,
        Section 17.2.2, “LIST Partitioning”, and
        Section 17.4, “Partition Pruning”.
      
Partitioning: 
        A new ALTER TABLE option,
        TRUNCATE PARTITION, makes it possible to
        delete rows from one or more selected partitions only. Unlike
        the case with ALTER TABLE ... DROP PARTITION,
        ALTER TABLE ... TRUNCATE PARTITION merely
        deletes all rows from the specified partition or partitions, and
        does not change the definition of the table.
      
Partitioning: 
        It is now possible to assign indexes on partitioned
        MyISAM tables to key caches using
        the CACHE INDEX and to preload such
        indexes into the cache using
        LOAD INDEX INTO
        CACHE statements. Cache assignment and preloading of
        indexes for such tables can be performed for one, several, or
        all partitions of the table.
      
        This functionality is supported for only those partitioned
        tables that employ the MyISAM
        storage engine.
      
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.5.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 synchronize the relay log to disk after every
        N events. Setting its value to 0
        allows the operating system to handle synchronization 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 synchronize the
        corresponding file to disk after every
        N events. Setting its value to 0
        allows the operating system to handle synchronization 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.5.2.1, “CHANGE MASTER TO Syntax”.
      
        In conjunction with the introduction of
        IGNORE_SERVER_IDS, SHOW
        SLAVE STATUS has a new field
        Replicate_Ignore_Server_Ids that displays
        information about ignored servers.
       (Bug#25998)
See also Bug#27808.
Replication: MySQL now supports an interface for semisynchronous replication: A commit performed on the master side blocks before returning to the session that performed the transaction until at least one slave acknowledges that it has received and logged the events for the transaction. Semisynchronous replication is implemented through an optional plugin component. See Section 16.3.8, “Semisynchronous Replication”.
        On Linux (and perhaps other systems), the performance of MySQL
        Server can be improved by using a different
        malloc() implementation, developed by Google
        and called tcmalloc. The gain is noticeable
        with a higher number of simultaneous users. To support use of
        this library, the following changes have been made:
      
            The server is linked against the default
            malloc() provided by the respective
            platform.
          
            Binary distributions for Linux include
            libtcmalloc_minimal.so (a shared
            library that can be linked against at runtime) in
            pkglibdir (that is, the same directory
            within the package where server plugins and similar object
            files are located). The version of
            tcmalloc included with MySQL comes from
            google-perftools 1.4.
          
            If you want to try tcmalloc but are using
            a binary distribution for a non-Linux platform or a source
            distribution, you can install Google's
            tcmalloc. Some distributions provide it
            in a google-perftools package or with a
            similar name, or you can download it from Google at
            http://code.google.com/p/google-perftools/
            and compile it yourself.
          
            mysqld_safe now supports a
            --malloc-lib option that
            enables administrators to specify that
            mysqld should use
            tcmalloc.
          
        The --malloc-lib option
        works by modifying the LD_PRELOAD environment
        value to affect dynamic linking to enable the loader to find the
        memory-allocation library when mysqld runs:
      
            If the option is not given, or is given without a value
            (--malloc-lib=),
            LD_PRELOAD is not modified and no attempt
            is made to use tcmalloc.
          
            If the option is given as
            --malloc-lib=tcmalloc,
            mysqld_safe looks for a
            tcmalloc library in
            /usr/lib and then in the MySQL
            pkglibdir location (for example,
            /usr/local/mysql/lib or whatever is
            appropriate). If tmalloc is found, its
            path name is added to the beginning of the
            LD_PRELOAD value for
            mysqld. If tcmalloc is
            not found, mysqld_safe aborts with an
            error.
          
            If the option is given as
            --malloc-lib=,
            that full path is added to the beginning of the
            /path/to/some/libraryLD_PRELOAD value. If the full path points
            to a nonexistent or unreadable file,
            mysqld_safe aborts with an error.
          
            For cases where mysqld_safe adds a path
            name to LD_PRELOAD, it adds the path to
            the beginning of any existing value the variable already
            has.
          
        As a result of the preceding changes, Linux users can use the
        libtcmalloc_minimal.so now included in
        binary packages by adding these lines to the
        my.cnf file:
      
[mysqld_safe] malloc-lib=tcmalloc
        Those lines also suffice for users on any platform who have
        installed a tcmalloc package in
        /usr/lib. To use a specific
        tcmalloc library, specify its full path name.
        Example:
      
[mysqld_safe] malloc-lib=/opt/lib/libtcmalloc_minimal.so
        The InnoDB  buffer pool is divided
        into two sublists: A new sublist containing blocks that are
        heavily used by queries, and an old sublist containing less-used
        blocks and from which candidates for eviction are taken. In the
        default operation of the buffer pool, a block when read in is
        loaded at the midpoint and then moved immediately to the head of
        the new sublist as soon as an access occurs. In the case of a
        table scan (such as performed for a mysqldump
        operation), each block read by the scan ends up moving to the
        head of the new sublist because multiple rows are accessed from
        each block. This occurs even for a one-time scan, where the
        blocks are not otherwise used by other queries. Blocks may also
        be loaded by the read-ahead background thread and then moved to
        the head of the new sublist by a single access. These effects
        can be disadvantageous because they push blocks that are in
        heavy use by other queries out of the new sublist to the old
        sublist where they become subject to eviction.
      
        InnoDB Plugin now provides two system
        variables that enable LRU algorithm tuning:
      
Specifies the approximate percentage of the buffer pool used for the old block sublist. The range of values is 5 to 95. The default value is 37 (that is, 3/8 of the pool).
            Specifies how long in milliseconds (ms) a block inserted
            into the old sublist must stay there after its first access
            before it can be moved to the new sublist. The default value
            is 0: A block inserted into the old sublist moves
            immediately to the new sublist the first time it is
            accessed, no matter how soon after insertion the access
            occurs. If the value is greater than 0, blocks remain in the
            old sublist until an access occurs at least that many ms
            after the first access. For example, a value of 1000 causes
            blocks to stay in the old sublist for 1 second after the
            first access before they become eligible to move to the new
            sublist. See Section 7.4.6, “The InnoDB Buffer Pool”
          
        For additional information, see
        Section 7.4.6, “The InnoDB Buffer Pool”.
       (Bug#45015)
        Two status variables have been added to
        SHOW STATUS output.
        Innodb_buffer_pool_read_ahead
        and
        Innodb_buffer_pool_read_ahead_evicted
        indicate the number of pages read in by the
        InnoDB read-ahead background
        thread, and the number of such pages evicted without ever being
        accessed, respectively. Also, the status variables
        Innodb_buffer_pool_read_ahead_rnd
        and
        Innodb_buffer_pool_read_ahead_seq
        status variables have been removed.
       (Bug#42885)
        Columns that provide a catalog value in
        INFORMATION_SCHEMA tables (for example,
        TABLES.TABLE_CATALOG) now have a value of
        def rather than NULL.
       (Bug#35427)
        The deprecated --default-table-type server
        option has been removed.
       (Bug#34818)
        Previously, mysqldump would not dump the
        INFORMATION_SCHEMA database and ignored it if
        it was named on the command line. Now,
        mysqldump will dump
        INFORMATION_SCHEMA if it is named on the
        command line. Currently, this requires that the
        --skip-lock-tables
        (or --skip-opt) option be
        given.
       (Bug#33762)
        Several undocumented C API functions were removed:
        mysql_manager_close(),
        mysql_manager_command(),
        mysql_manager_connect(),
        mysql_manager_fetch_line(),
        mysql_manager_init(),
        mysql_disable_reads_from_master(),
        mysql_disable_rpl_parse(),
        mysql_enable_reads_from_master(),
        mysql_enable_rpl_parse(),
        mysql_master_query(),
        mysql_master_send_query(),
        mysql_reads_from_master_enabled(),
        mysql_rpl_parse_enabled(),
        mysql_rpl_probe(),
        mysql_rpl_query_type(),
        mysql_set_master(),
        mysql_slave_query(), and
        mysql_slave_send_query().
       (Bug#31952, Bug#31954)
        Sinhala collations utf8_sinhala_ci and
        ucs2_sinhala_ci were added for the
        utf8 and ucs2 character
        sets.
       (Bug#26474)
        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)
        On WIndows, use of POSIX I/O interfaces in
        mysys was replaced with Win32 API calls
        (CreateFile(),
        WriteFile(), and so forth) and the default
        maximum number of open files has been increased to 16384. The
        maximum can be increased further by using the
        --open-files-limit=
        option at server startup.
       (Bug#24509)N
        The TRADITIONAL SQL mode now
        includes
        NO_ENGINE_SUBSTITUTION.
       (Bug#21099)
        MySQL now implements the SQL standard
        SIGNAL and
        RESIGNAL statements. See
        Section 12.7.8, “SIGNAL and
      RESIGNAL”.
       (Bug#11661)
        The undocumented, deprecated, and not useful SHOW
        COLUMN TYPES statement has been removed.
       (Bug#5299)
        The FORMAT() function now
        supports an optional third parameter that enables a locale to be
        specified to be used for the result number's decimal point,
        thousands separator, and grouping between separators. Allowable
        locale values are the same as the legal values for the
        lc_time_names system variable
        (see Section 9.7, “MySQL Server Locale Support”). For example, the result
        from FORMAT(1234567.89,2,'de_DE')
        is 1.234.567,89. If no locale is specified,
        the default is 'en_US'.
      
        The Greek locale 'el_GR' is now an allowable
        value for the lc_time_names
        system variable.
      
        Previously, in the absence of other information, the MySQL
        client programs mysql,
        mysqladmin, mysqlcheck,
        mysqlimport, and mysqlshow
        used the compiled-in default character set, usually
        latin1.
      
        Now these clients can autodetect which character set to use
        based on the operating system setting, such as the value of the
        LANG or LC_ALL locale
        environment language on Unix system or the code page setting on
        Windows systems. For systems on which the locale is available
        from the OS, the client uses it to set the default character set
        rather than using the compiled-in default. Thus, users can
        configure the locale in their environment for use by MySQL
        clients. For example, setting LANG to
        ru_RU.KOI8-R causes the
        koi8r character set to be used. The OS
        character set is mapped to the closest MySQL character set if
        there is no exact match. If the client does not support the
        matching character set, it uses the compiled-in default. (For
        example, ucs2 is not supported as a
        connection character set.)
      
        Third-party applications that wish to use character set
        autodetection based on the OS setting can use the following
        mysql_options() call before
        connecting to the server:
      
mysql_options(mysql,
              MYSQL_SET_CHARSET_NAME,
              MYSQL_AUTODETECT_CHARSET_NAME);
See Section 9.1.4, “Connection Character Sets and Collations”.
        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.
      
        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.
      
        The server now supports a Debug Sync facility for thread
        synchronization during testing and debugging. To compile in this
        facility, configure MySQL with the
        --enable-debug-sync option.
        The debug_sync system variable
        provides the user interface Debug Sync.
        mysqld and
        mysql-test-run.pl support a
        --debug-sync-timeout option to
        enable the facility and set the default synchronization point
        timeout.
      
        Added the TO_SECONDS() function,
        which converts a date or datetime value to a number of seconds
        since the year 0.
      
Parser performance was improved for identifier scanning and conversion of ASCII string literals.
        The LOAD XML
        INFILE statement was added. This statement makes it
        possible to read data directly from XML files into database
        tables. For more information, see Section 12.2.7, “LOAD XML Syntax”.
      
Bugs fixed:
Performance: 
        The server unnecessarily acquired a query cache mutex even with
        the query cache disabled, resulting in a small performance
        decrement which could show up as threads often in state
        “invalidating query cache entries (table)”,
        particularly on a replication slave with row-based replication.
        Now if the server is started with
        query_cache_type set to 0, it does not
        acquire the query cache mutex. This has the implication that the
        query cache cannot be enabled at runtime.
       (Bug#38551)
Performance: 
        The InnoDB adaptive hash latch is released
        (if held) for several 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)
Important Change: Security Fix: 
        It was possible to circumvent privileges through the creation of
        MyISAM tables employing the DATA
        DIRECTORY and INDEX DIRECTORY
        options to overwrite existing table files in the MySQL data
        directory. Use of the MySQL data directory in DATA
        DIRECTORY and INDEX DIRECTORY is
        now disallowed. This is now also true of these options when used
        with partitioned tables and individual partitions of such
        tables.
       (Bug#32167, CVE-2008-2079)
See also Bug#39277.
Security Fix: MySQL clients linked against OpenSSL can be tricked not to check server certificates. (Bug#47320, CVE-2009-4028)
Security Fix: The server crashed if an account without the proper privileges attempted to create a stored procedure. (Bug#44658)
Incompatible Change: 
        For system variables that take values of ON
        or OFF, OF was accepted as
        a legal variable. Now system variables that take
        “enumeration” values must be assigned the full
        value. This affects some other variables that previously could
        be assigned using unambiguous prefixes of allowable values, such
        as tx_isolation.
       (Bug#34828)
Incompatible Change: 
        In binary installations of MySQL, the supplied
        binary-configure script would start and
        configure MySQL, even when command help was requested with the
        --help command-line option. The
        --help, if provided, will no longer start and
        install the server.
       (Bug#30954)
Incompatible Change: Access privileges for several statements are more accurately checked:
            CHECK TABLE requires some
            privilege for the table.
          
            CHECKSUM TABLE requires
            SELECT for the table.
          
            CREATE TABLE ... LIKE requires
            SELECT for the source table
            and CREATE for the
            destination table.
          
            SHOW COLUMNS displays
            information only for those columns you have some privilege
            for.
          
            SHOW CREATE TABLE requires
            some privilege for the table (previously required
            SELECT).
          
            SHOW CREATE VIEW requires
            SHOW VIEW and
            SELECT for the view.
          
            SHOW INDEX requires some
            privilege for any column.
          
            SHOW OPEN TABLES displays
            only tables for which you have some privilege on any table
            column.
          
Important Change: Replication: 
        MyISAM transactions replicated to a
        transactional slave left the slave in an unstable condition.
        This was due to the fact that, when replicating from a
        nontransactional storage engine to a transactional engine with
        autocommit turned off, no
        BEGIN and
        COMMIT statements were written to
        the binary log; thus, on the slave, a never-ending transaction
        was started.
      
        The fix for this issue includes enforcing
        autocommit mode on the slave by
        replicating all autocommit=1 statements from
        the master.
       (Bug#29288)
Important Change: Replication: 
        The CHANGE
        MASTER TO statement required the value for
        RELAY_LOG_FILE to be an absolute path, while
        the MASTER_LOG_FILE path could be relative.
      
        The inconsistent behavior is resolved by allowing relative paths
        for RELAY_LOG_FILE, and by using the same
        basename for RELAY_LOG_FILE as for
        MASTER_LOG_FILE. For more information, see
        Section 12.5.2.1, “CHANGE MASTER TO Syntax”.
       (Bug#12190)
Important Change: An option that requires a value, when specified in an option file without a value, was assigned the text of the next line in the file as the value. Now, if you fail to specify a required value in an option file, the server aborts with an error.
        This change does not effect how options are handled by the
        server when they are used on the command line. For example,
        starting the server using mysqld_safe
        --relay-log --relay-log-index &
        causes the server to create relay log files named
        --relay-log-index.000001,
        --relay-log-index.000002, and so on,
        because the --relay-log option
        expects an argument.
       (Bug#25192)
Partitioning: 
        An ALTER TABLE ...
        ADD PARTITION statement that caused
        open_files_limit to be exceeded
        led to a crash of the MySQL server.
       (Bug#46922)
See also Bug#47343.
Partitioning: 
        When performing an
        INSERT ...
        SELECT into a partitioned table,
        read_buffer_size bytes of
        memory were allocated for every partition in the target table,
        resulting in consumption of large amounts of memory when the
        table had many partitions (more than 100).
      
        This fix changes the method used to estimate the buffer size
        required for each partition and limits the total buffer size to
        a maximum of approximately 10 times
        read_buffer_size.
       (Bug#45840)
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: 
        Truncating a partitioned MyISAM table did not
        reset the AUTO_INCREMENT value.
       (Bug#35111)
Partitioning: For partitioned tables with more than ten partitions, a full table scan was used in some cases when only a subset of the partitions were needed. (Bug#33730)
Replication: 
        When using statement-based or mixed-format replication, the
        database name was not written to the binary log when executing a
        LOAD DATA statement. This caused
        problems when the table being loaded belonged to a database
        other than the current database; data could be loaded into the
        wrong table (if a table having the same name existed in the
        current database) or replication could fail (if no table having
        that name existed in the current database). Now a table
        referenced in a LOAD DATA
        statement is always logged using its fully qualified name when
        the database to which it belongs is not the current database.
       (Bug#48297)
Replication: When a session was closed on the master, temporary tables belonging to that session were logged with the wrong database names when either of the following conditions was true:
The length of the name of the database to which the temporary table belonged was greater than the length of the current database name.
The current database was not set.
Replication: When using row-based replication, changes to nontransactional tables that occurred early in a transaction were not immediately flushed upon committing a statement. This behavior could break consistency since changes made to nontransactional tables become immediately visible to other connections. (Bug#47678)
Replication: 
        When mysqlbinlog
        --verbose was used to read a
        binary log that had been recorded using the row-based format,
        the output for events that updated some but not all columns of
        tables was not correct.
       (Bug#47323)
Replication: 
        Performing ALTER
        TABLE ... DISABLE KEYS on a slave table caused
        row-based replication to fail.
       (Bug#47312)
Replication: 
        When using the row-based format to replicate a transaction
        involving both transactional and nontransactional engines, which
        contained a DML statement affecting multiple rows, the statement
        failed; if this transaction was followed by a
        COMMIT, the master and the slave
        could diverge, because the statement was correctly rolled back
        on the master, but was applied on the slave.
       (Bug#47287)
See also Bug#46864.
Replication: 
        BEGIN
        statements were not included in the output of
        mysqlbinlog.
       (Bug#46998)
Replication: 
        A problem with the BINLOG statement in the
        output of mysqlbinlog could break
        replication; statements could be logged with the server ID
        stored within events by the BINLOG statement
        rather than the ID of the running server. With this fix, the
        server ID of the server executing the statements can no longer
        be overridden by the server ID stored in the binary log's
        format description statement.
       (Bug#46640)
This regression was introduced by Bug#32407.
Replication: 
        When using row-based replication,
        DROP TEMPORARY TABLE
        IF EXISTS was written to the binary log if the table
        named in the statement did not exist, even though a
        DROP TEMPORARY
        TABLE statement should never be logged in row-based
        logging mode, whether the table exists or not.
       (Bug#46572)
Replication: 
        Concurrent transactions that inserted rows into a table with an
        AUTO_INCREMENT column could break
        statement-based or mixed-format replication error 1062
        Duplicate entry '...' for key 'PRIMARY'
        on the slave. This was especially likely to happen when one of
        the transactions activated a trigger that inserted rows into the
        table with the AUTO_INCREMENT column,
        although other conditions could also cause the issue to
        manifest.
       (Bug#45677)
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: 
        Replicating TEXT or
        VARCHAR columns declared as
        NULL on the master but NOT
        NULL on the slave caused the slave to crash.
       (Bug#43789)
See also Bug#38850, Bug#43783, Bug#43785, Bug#47741, Bug#48091.
Replication: By default, all statements executed by the mysql_upgrade program on the master are written to the binary log, then replicated to the slave. In some cases, this can result in problems; for example, it attempted to alter log tables on replicated databases (this failed due to logging being enabled).
        As part of this fix, a mysql_upgrade option,
        --write-binlog, is added. Its inverse,
        --skip-write-binlog, can be used to disable
        binary logging while the upgrade is in progress.
       (Bug#43579)
Replication: This fix handles 2 issues encountered on replication slaves during startup:
A failure while allocating the master info structure caused the slave to crash.
A failure during recovery caused the relay log file not to be properly initialized which led to a crash on the slave.
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: 
        On the master, if a binary log event is larger than
        max_allowed_packet, the error
        message
        ER_MASTER_FATAL_ERROR_READING_BINLOG is
        sent to a slave when it requests a dump from the master, thus
        leading the I/O thread to stop. On a slave, the I/O thread stops
        when receiving a packet larger than
        max_allowed_packet.
      
        In both cases, however, there was no
        Last_IO_Error
        reported, which made it difficult to determine why the slave had
        stopped in such cases. Now,
        Last_IO_Error
        is reported when
        max_allowed_packet is exceeded,
        and provides the reason for which the slave I/O thread stopped.
       (Bug#42914)
Replication: 
        When using statement-based replication and the transaction
        isolation level was set to READ
        COMMITTED or a less strict level,
        InnoDB returned an error even if
        the statement in question was filtered out according to the
        --binlog-do-db or
        --binlog-ignore-db rules in
        effect at the time.
       (Bug#42829)
Replication: 
        When using row-based format, replication failed with the error
        Could not execute Write_rows event on table ...;
        Field '...' doesn't have a default value when an
        INSERT was made on the master
        without specifying a value for a column having no default, even
        if strict server SQL mode was not in use and the statement would
        otherwise have succeeded on the master. Now the SQL mode is
        checked, and the statement is replicated unless strict mode is
        in effect. For more information, see
        Section 5.1.8, “Server SQL Modes”.
       (Bug#38173)
Replication: 
        When autocommit was set equal
        to 1 after starting a transaction, the binary
        log did not commit the outstanding transaction. The reason this
        happened was that the binary log commit function saw only the
        values of the new settings, and decided that there was nothing
        to commit.
      
        This issue was first observed when using the
        Falcon storage engine, but it is possible
        that it affected other storage engines as well.
       (Bug#37221)
Replication: 
        FLUSH LOGS did
        not actually close and reopen the binary log index file.
       (Bug#34582)
See also Bug#5.0.90.
Replication: 
        An error message relating to permissions required for
        SHOW SLAVE STATUS was confusing.
       (Bug#34227)
Replication: 
        The --base64-output option
        for mysqlbinlog was not honored for all types
        of events. This interfered in some cases with performing
        point-in-time recovery.
       (Bug#32407)
Replication: 
        The value of Slave_IO_running in the output
        of SHOW SLAVE STATUS did not
        distinguish between all 3 possible states of the slave I/O
        thread (not running; running but not connected; connected). Now
        the value Connecting (rather than
        No) is shown when the slave I/O thread is
        running but the slave is not connected to a replication master.
      
        The server system variable Slave_running also
        reflects this change, and is now consistent with what is shown
        for Slave_IO_running.
       (Bug#30703, Bug#41613, Bug#51089)
Replication: Queries which were written to the slow query log on the master were not written to the slow query log on the slave. (Bug#23300)
See also Bug#48632.
Replication: Valgrind revealed an issue with mysqld that as corrected: memory corruption in replication slaves when switching databases. (Bug#19022)
API: The fix for Bug#24507 could lead in some cases to client application failures due to a race condition. Now the server waits for the “dummy” thread to return before exiting, thus making sure that only one thread can initialize the POSIX threads library. (Bug#42850)
        Certain INTERVAL expressions could cause a
        crash on 64-bit systems.
       (Bug#48739)
        Following a literal, the COLLATE clause was
        mishandled such that different results can be produced depending
        whether an index is used.
       (Bug#48447)
        SUM() artificially increased the
        precision of a DECIMAL argument,
        which was truncated when a temporary table was created to hold
        the results.
       (Bug#48370)
See also Bug#45261.
        If an outer query was invalid, a subquery might not even be set
        up. EXPLAIN
        EXTENDED did not expect this and caused a crash by
        trying to dereference improperly set up information.
       (Bug#48295)
        A query containing a view using temporary tables and multiple
        tables in the FROM clause and
        PROCEDURE ANALYSE() caused a server crash.
      
        As a result of this bug fix, PROCEDURE
        ANALYSE() is legal only in a top-level
        SELECT.
       (Bug#48293)
See also Bug#46184.
        Error handling was missing for
        SELECT statements containing
        subqueries in the WHERE clause and that
        assigned a SELECT result to a
        user variable. The server could crash as a result.
       (Bug#48291)
        An assertion could fail if the optimizer used a
        SPATIAL index.
       (Bug#48258, Bug#47019)
        Memory-allocation failures were handled incorrectly in the
        InnoDB
        os_mem_alloc_large() function.
       (Bug#48237)
        WHERE clauses with
         were handled
        incorrectly if the outer value list contained multiple items at
        least one of which could be outer_value_list NOT IN
        subqueryNULL.
       (Bug#48177)
Searches using a non-default collation could return different results for a table when partitioning was and was not used. (Bug#48161)
        A combination of GROUP BY WITH ROLLUP,
        DISTINCT and the
        const join type in a query
        caused a server crash when the optimizer chose to employ a
        temporary table to resolve DISTINCT.
       (Bug#48131)
The subquery optimizer had a memory leak. (Bug#48060)
Server shutdown failed on Windows. (Bug#48047)
        In some cases, using a null microsecond part in a
        WHERE condition (for example, WHERE
        date_time_field <= 'YYYY-MM-DD HH:MM:SS.0000')
        could lead to incorrect results due to improper
        DATETIME comparison.
       (Bug#47963)
        A build configured using the
        --without-server option did
        not compile the yaSSL code, so if --with-ssl
        was also used, the build failed.
       (Bug#47957)
        When a query used a DATE or
        DATETIME value formatted using
        any separator characters other than hyphen
        ('-') and a >=
        condition matching only the greatest value in an indexed column,
        the result was empty if an index range scan was employed.
       (Bug#47925)
        mysys/mf_keycache.c requires threading, but
        no test was made for thread support.
       (Bug#47923)
        For debug builds, an assertion could fail during the next
        statement executed for a temporary table after a multiple-table
        UPDATE involving that table and
        modified an AUTO_INCREMENT column with a
        user-supplied value.
       (Bug#47919)
        The mysys/mf_strip.c file, which defines
        the strip_sp() function, has been removed
        from the MySQL source. The function was no longer used within
        the main build, and the supplied function was causing symbol
        errors on Windows builds.
       (Bug#47857)
        When building storage engines on Windows it was not possible to
        specify additional libraries within the CMake file required for
        the build. An ${engine}_LIBS macro has been
        added to the files to support these additional storage-engine
        specific libraries.
       (Bug#47797)
When building a pluggable storage engine on Windows, the engine name could be based on the directory name where the engine was located, rather than the configured storage engine name. (Bug#47795)
        During cleanup of a stored procedure's internal structures, the
        flag to ignore the errors for
        INSERT IGNORE
        or UPDATE
        IGNORE was not cleaned up, which could result in a
        server crash.
       (Bug#47788)
        If the first argument to
        GeomFromWKB() function was a
        geometry value, the function just returned its value. However,
        it failed to preserve the argument's
        null_value flag, which caused an unexpected
        NULL value to be returned to the caller,
        resulting in a server crash.
       (Bug#47780)
        InnoDB could crash when updating
        spatial values.
       (Bug#47777)
        The pthread_cond_wait() implementations for
        Windows could deadlock in some rare circumstances.
       (Bug#47768)
        The encoding of values for SET
         statements was
        incorrect, resulting in incorrect error messages.
       (Bug#47597)system_variable =
        identifier
        On WIndows, when an idle named pipe connection was forcibly
        closed with a KILL statement or
        because the server was being shut down, the thread that was
        closing the connection would hang infinitely.
       (Bug#47571, Bug#31621)
        On Mac OS X or Windows, sending a SIGHUP
        signal to the server or an asynchronous flush (triggered by
        flush_time) caused the server
        to crash.
       (Bug#47525)
Debug builds could not be compiled with the Sun Studio compiler. (Bug#47474)
        Queries of the form SELECT SUM(DISTINCT
         caused a server
        crash.
       (Bug#47421)varchar_key) FROM
        tbl_name
        A function call could end without throwing an error or setting
        the return value. For example, this could happen when an error
        occurred while calculating the return value. This is fixed by
        setting the value to NULL when an error
        occurs during evaluation of an expression.
       (Bug#47412)
mysqladmin debug could crash on 64-bit systems. (Bug#47382)
        A simple SELECT with implicit
        grouping could return many rows rather than a single row if the
        query was ordered by the aggregated column in the select list.
       (Bug#47280)
        An assertion could be raised for CREATE
        TABLE if there was a pending
        INSERT DELAYED
        or REPLACE
        DELAYED for the same table.
       (Bug#47274)
        InnoDB raised errors in some cases in a
        manner not compatible with SIGNAL and
        RESIGNAL.
       (Bug#47233)
        A multiple-table UPDATE involving
        a natural join and a mergeable view raised an assertion.
       (Bug#47150)
        On FreeBSD, memory mapping for
        MERGE tables could fail if
        underlying tables were empty.
       (Bug#47139)
        Solaris binary packages now are compiled with
        -g0 rather than -g.
       (Bug#47137)
        If an InnoDB table was created with
        the AUTO_INCREMENT table option to specify an
        initial auto-increment value, and an index was added in a
        separate operation later, the auto-increment value was lost
        (subsequent inserts began at 1 rather than the specified value).
       (Bug#47125)
        Incorrect handling of predicates involving
        NULL by the range optimizer could lead to an
        infinite loop during query execution.
       (Bug#47123)
        EXPLAIN caused a server crash for
        certain valid queries.
       (Bug#47106)
        Repair by sort or parallel repair of
        MyISAM tables could fail to fail
        over to repair with key cache.
       (Bug#47073)
        InnoDB Plugin did not compile on some Solaris
        systems.
       (Bug#47058)
        On WIndows, when a failed I/O operation occurred with return
        code of ERROR_WORKING_SET_QUOTA,
        InnoDB intentionally crashed the
        server. Now InnoDB sleeps for 100ms
        and retries the failed operation.
       (Bug#47055)
        The mysql_config script contained a reference
        to @innodb_system_libs@ that was not replaced
        with the corresponding library flags during the build process
        and ended up in the output of mysql_config
        --libs.
       (Bug#47007)
        The configure option
        --without-server did not work.
       (Bug#46980)
        InnoDB now ignores negative values
        supplied by a user for an AUTO_INCREMENT
        column when calculating the next value to store in the data
        dictionary. Setting AUTO_INCREMENT columns to
        negative values is undefined behavior and this change should
        bring the behavior of InnoDB closer
        to what users expect.
       (Bug#46965)
        Failed multiple-table DELETE
        statements could raise an assertion.
       (Bug#46958)
        When MySQL crashed (or a snapshot was taken that simulates a
        crash), it was possible that internal XA transactions (used to
        synchronize the binary log and
        InnoDB) could be left in a
        PREPARED state, whereas they should be rolled
        back. This occurred when the
        server_id value changed before
        the restart, because that value was used to construct XID
        values.
      
        Now the restriction is relaxed that the
        server_id value be consistent
        for XID values to be considered valid. The rollback phase should
        then be able to clean up all pending XA transactions.
       (Bug#46944)
        When creating a new instance on Windows using
        mysqld-nt and the
        --install parameter, the value of the service
        would be set incorrectly, resulting in a failure to start the
        configured service.
       (Bug#46917)
The test suite was missing from RPM packages. (Bug#46834)
        For InnoDB tables, an unnecessary table
        rebuild for ALTER TABLE could
        sometimes occur for metadata-only changes.
       (Bug#46760)
        The server could crash for queries with the following elements:
        1. An “impossible where” in the outermost
        SELECT; 2. An aggregate in the outermost
        SELECT; 3. A correlated subquery with a
        WHERE clause that includes an outer field
        reference as a top-level WHERE sargable
        predicate;
       (Bug#46749)
        InnoDB Plugin did not compile using
        gcc 4.1 on PPC systems.
       (Bug#46718)
        If InnoDB Plugin reached its limit on the
        number of concurrent transactions (1023), it wrote a descriptive
        message to the error log but returned a misleading error message
        to the client, or an assertion failure occurred.
       (Bug#46672)
See also Bug#18828.
        A Valgrind error during index creation by InnoDB
        Plugin was corrected.
       (Bug#46657)
        Concurrent INSERT INTO
        ... SELECT statements for an InnoDB
        table could cause an AUTO_INCREMENT assertion
        failure.
       (Bug#46650)
        The Serbian locale name 'sr_YU' is obsolete.
        It is still recognized for backward compatibility, but
        'sr_RS' now should be used instead.
       (Bug#46633)
        On Solaris and HP-UX systems with the environment set to the
        default C locale, MySQL client programs
        issued an Unknown OS character set error.
       (Bug#46619)
        SHOW CREATE TRIGGER for a
        MERGE table trigger caused an
        assertion failure.
       (Bug#46614)
        If a transaction was rolled back inside
        InnoDB due to a deadlock or lock
        wait timeout, and a statement in the transaction had an
        IGNORE clause, the server could crash at the
        end of the statement or on shutdown.
       (Bug#46539)
        TRUNCATE TABLE for a table that
        was opened with HANDLER did not
        close the handler and left it in an inconsistent state that
        could lead to a server crash. Now TRUNCATE
        TABLE for a table closes all open handlers for the
        table.
       (Bug#46456)
Trailing spaces were not ignored for user-defined collations that mapped spaces to a character other than 0x20. (Bug#46448)
See also Bug#29468.
        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)
        Dropping an InnoDB table that used an unknown
        collation (created on a different server, for example) caused a
        server crash.
       (Bug#46256)
The GPL and commercial license headers had different sizes, so that error log, backtrace, core dump, and cluster trace file line numbers could be off by one if they were not checked against the version of the source used for the build. (For example, checking a GPL build backtrace against commercial sources.) (Bug#46216)
        A query containing a subquery in the FROM
        clause and PROCEDURE ANALYSE() caused a
        server crash.
       (Bug#46184)
See also Bug#48293.
        After an error such as a table-full condition,
        INSERT IGNORE
        could cause an assertion failure for debug builds.
       (Bug#46075)
        InnoDB did not disallow creation of an index
        with the name GEN_CLUST_INDEX, which is used
        internally.
       (Bug#46000)
        CREATE TABLE ...
        SELECT could cause a server crash if no default
        database was selected.
       (Bug#45998)
        Configuring MySQL for DTrace support resulted in a build failure
        on Solaris if the directory for the dtrace
        executable was not in PATH.
       (Bug#45810)
An infinite hang and 100% CPU usage occurred after handler tried to open a merge table.
If the command mysqladmin shutdown was executed during the hang, the debug server generated the following assert:
mysqld: table.cc:407: void free_table_share(TABLE_SHARE*): Assertion `share->ref_count == 0' failed. 090610 14:54:04 - mysqld got signal 6 ;
During the build of the Red Hat IA64 MySQL server RPM, the system library link order was incorrect. This made the resulting Red Hat IA64 RPM depend on "libc.so.6.1(GLIBC_PRIVATE)(64bit)", thus preventing installation of the package. (Bug#45706)
        The caseinfo member of the
        CHARSET_INFO structure was not initialized
        for user-defined Unicode collations, leading to a server crash.
       (Bug#45645)
        Appending values to an ENUM or
        SET definition is a metadata
        change for which ALTER TABLE need
        not rebuild the table, but it was being rebuilt anyway.
       (Bug#45567)
        The socket system variable was
        unavailable on Windows.
       (Bug#45498)
        The combination of MIN() or
        MAX() in the select list with
        WHERE and GROUP BY clauses
        could lead to incorrect results.
       (Bug#45386)
        Truncation of DECIMAL values
        could lead to assertion failures; for example, when deducing the
        type of a table column from a literal
        DECIMAL value.
       (Bug#45261)
See also Bug#48370.
        Client flags were incorrectly initialized for the embedded
        server, causing several tests in the jp test
        suite to fail.
       (Bug#45159)
Concurrent execution of statements requiring a table-level lock and statements requiring a non-table-level write lock for a table could deadlock. (Bug#45143)
        For settings of
        lower_case_table_names greater
        than 0, some queries for INFORMATION_SCHEMA
        tables left entries with incorrect lettercase in the table
        definition cache.
       (Bug#44738)
mysqld_safe could fail to find the logger program. (Bug#44736)
        The have_community_features
        system variable was renamed to
        have_profiling.
      
        Previously, to enable profiling, it was necessary to run
        configure with the
        --enable-community-features
        and --enable-profiling
        options. Now only
        --enable-profiling is needed.
       (Bug#44651)
Some Perl scripts in AIX packages contained an incorrect path to the perl executable. (Bug#44643)
        With InnoDB Plugin, renaming a table column
        and then creating an index on the renamed column caused a server
        crash to the .frm file and the
        InnoDB data directory going out of sync. Now
        InnoDB Plugin 1.0.5 returns an error instead:
        ERROR 1034 (HY000): Incorrect key file for table
        '. To work around the problem, create another table
        with the same structure and copy the original table to it.
       (Bug#44571)tbl_name'; try to repair
        it
For debug builds, executing a stored procedure as a prepared statement could sometimes cause an assertion failure. (Bug#44521)
        Using mysql_stmt_execute() to
        call a stored procedure could cause a server crash.
       (Bug#44495)
        InnoDB did not always disallow creating
        tables containing columns with names that match the names of
        internal columns, such as DB_ROW_ID,
        DB_TRX_ID, DB_ROLL_PTR,
        and DB_MIX_ID.
       (Bug#44369)
        An InnoDB error message incorrectly
        referred to the nonexistent
        innodb_max_files_open variable rather than to
        innodb_open_files.
       (Bug#44338)
        SELECT ... WHERE ... IN
        (NULL, ...) was executed using a full table scan, even
        if the same query without the NULL used an
        efficient range scan.
       (Bug#44139)
See also Bug#18360.
        InnoDB use of SELECT
        MAX( could
        cause a crash when MySQL data dictionaries went out of sync.
       (Bug#44030)autoinc_column)
        LOAD DATA
        INFILE statements were written to the binary log in
        such a way that parsing problems could occur when re-executing
        the statement from the log.
       (Bug#43746)
Selecting from the process list in the embedded server caused a crash. (Bug#43733)
See also Bug#47304.
        Attempts to enable large_pages
        with a shared memory segment larger than 4GB caused a server
        crash.
       (Bug#43606)
        For ALTER TABLE, renaming a
        DATETIME or
        TIMESTAMP column unnecessarily
        caused a table copy operation.
       (Bug#43508)
        The weekday names for the Romanian
        lc_time_names locale
        'ro_RO' were incorrect. Thanks to Andrei
        Boros for the patch to fix this bug.
       (Bug#43207)
        XA START could
        cause an assertion failure or server crash when it is called
        after a unilateral rollback issued by the Resource Manager (both
        in a regular transaction and after an XA transaction).
       (Bug#43171)
Redefining a trigger could cause an assertion failure. (Bug#43054)
        The FORCE INDEX FOR ORDER BY index hint was
        ignored when join buffering was used.
       (Bug#43029)
        DROP DATABASE did not clear the
        message list.
       (Bug#43012, Bug#43138)
        The NUM_FLAG bit of the
        MYSQL_FIELD.flags member now is set for
        columns of type MYSQL_TYPE_NEWDECIMAL.
       (Bug#42980)
        Incorrect handling of range predicates combined with
        OR operators could yield incorrect
        results.
       (Bug#42846)
        Failure to treat BIT values as
        unsigned could lead to unpredictable results.
       (Bug#42803)
        For the embedded server on Windows,
        InnoDB crashed when
        innodb_file_per_table was
        enabled and a table name was in full path format.
       (Bug#42383)
        SHOW ERRORS returned an empty
        result set after an attempt to drop a nonexistent table.
       (Bug#42364)
If the server was started with an option that had a missing or invalid value, a subsequent error that would cause normally the server to shut down could cause it to crash instead. (Bug#42244)
Some queries with nested outer joins could lead to crashes or incorrect results because an internal data structure was handled improperly. (Bug#42116)
        The server used the wrong lock type (always
        TL_READ instead of
        TL_READ_NO_INSERT when appropriate) for
        tables used in subqueries of
        UPDATE statements. This led in
        some cases to replication failure because statements were
        written in the wrong order to the binary log.
       (Bug#42108)
        A Valgrind warning in open_tables() was
        corrected.
       (Bug#41759)
        In a replication scenario with
        innodb_locks_unsafe_for_binlog
        enabled on the slave, where rows were changed only on the slave
        (not through replication), in some rare cases, many messages of
        the following form were written to the slave error log:
        InnoDB: Error: unlock row could not find a 4 mode lock
        on the record.
       (Bug#41756)
After renaming a user, granting that user privileges could result in the user having additional privileges other than those granted. (Bug#41597)
        The mysql-stress-test.pl test script was
        missing from the noinstall packages on
        Windows.
       (Bug#41546)
        With a nonstandard InnoDB page
        size, some error messages became inaccurate.
      
          Changing the page size is not a supported operation and there
          is no guarantee that InnoDB will
          function normally with a page size other than 16KB. Problems
          compiling or running InnoDB may occur. In particular,
          ROW_FORMAT=COMPRESSED in the
          InnoDB Plugin assumes that the page size is
          at most 16KB and uses 14-bit pointers.
        
          A version of InnoDB built for one
          page size cannot use data files or log files from a version
          built for a different page size.
        
        In some cases, the server did not recognize lettercase
        differences between GRANT
        attributes such as table name or user name. For example, a user
        was able to perform operations on a table with privileges of
        another user with the same user name but in a different
        lettercase.
      
        In consequence of this bug fix, the collation for the
        Routine_name column of the
        mysql.proc table is changed from
        utf8_bin to
        utf8_general_ci.
       (Bug#41049)
See also Bug#48872.
When a storage engine plugin failed to initialize before allocating a slot number, it would acidentally unplug the engine in slot 0. (Bug#41013)
Optimized builds of mysqld crashed when built with Sun Studio on SPARC platforms. (Bug#40244)
        CREATE TABLE failed if a column
        name in a FOREIGN KEY clause was given in a
        lettercase different from the corresponding index definition.
       (Bug#39932)
        The mysql_stmt_close() C API
        function did not flush all pending data associated with the
        prepared statement.
       (Bug#39519)
        INFORMATION_SCHEMA access optimizations did
        not work properly in some cases.
       (Bug#39270)
        ALTER TABLE neglected to preserve
        ROW_FORMAT information from the original
        table, which could cause subsequent ALTER
        TABLE and OPTIMIZE
        TABLE statements to lose the row format for
        InnoDB tables.
       (Bug#39200)
        Simultaneous ANALYZE TABLE
        operations for an InnoDB tables
        could be subject to a race condition.
       (Bug#38996)
mysqlbinlog had a memory leak in its option-processing code. (Bug#38468)
        The ALTER ROUTINE privilege
        incorrectly allowed SHOW CREATE
        TABLE.
       (Bug#38347)
        Setting the general_log_file or
        slow_query_log_file system
        variable to a nonconstant expression caused the variable to
        become unset.
       (Bug#38124)
        For certain SELECT statements
        using ref access, MySQL
        estimated an incorrect number of rows, which could lead to
        inefficient query plans.
       (Bug#38049)
        A workload consisting of
        CREATE TABLE ...
        SELECT and DML operations could cause deadlock.
       (Bug#37433)
        The client library mishandled EINPROGRESS
        errors for connections in nonblocking mode.
       (Bug#37267)
        Previously, InnoDB performed REPLACE
        INTO T SELECT ... FROM S WHERE ... by setting shared
        next-key locks on rows from S. Now
        InnoDB selects rows from S
        with shared locks or as a consistent read, as for
        INSERT ...
        SELECT. This reduces lock contention between sessions.
       (Bug#37232)
Some warnings were being reported as errors. (Bug#36777)
        Privileges for SHOW CREATE VIEW
        were not being checked correctly.
       (Bug#35996)
        Different invocations of CHECKSUM
        TABLE could return different results for a table
        containing columns with spatial data types.
       (Bug#35570)
        Result set metadata for columns retrieved from
        INFORMATION_SCHEMA tables did not have the
        db or org_table members of
        the MYSQL_FIELD structure set.
       (Bug#35428)
        SHOW CREATE EVENT output did not
        include the DEFINER clause.
       (Bug#35297)
        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)
        Concurrent execution of
        FLUSH TABLES
        along with SHOW FUNCTION STATUS
        or SHOW PROCEDURE STATUS could
        cause a server crash.
       (Bug#34895)
        Executing SHOW
        MASTER LOGS as a prepared statement without binary
        logging enabled caused a crash for debug builds.
       (Bug#34741)
        There were spurious warnings about "Truncated incorrect
        DOUBLE value" in queries with MATCH ...
        AGAINST and > or
        < with a constant (which was reported as
        an incorrect DOUBLE value) in the
        WHERE condition.
       (Bug#34374)
        A COMMENT longer than 64 characters caused
        CREATE PROCEDURE to fail.
       (Bug#34197)
        mysql_real_connect() did not
        check whether the MYSQL connection handler
        was already connected and connected again even if so. Now an
        CR_ALREADY_CONNECTED error
        occurs.
       (Bug#33831)
        INSTALL PLUGIN and
        UNINSTALL PLUGIN did not handle
        plugin identifiers consistently with respect to lettercase.
       (Bug#33731)
        The default values for the general query log and slow query log
        file are documented to be based on the server host name and
        located in the data directory. However, they were in fact being
        based on the basename and location of the process ID (PID) file.
        The name and location defaults for the PID file are based on the
        server host name and data directory, so if it was not assigned a
        different name explicitly, its defaults were used and the
        general query log and slow query log file defaults were as
        documented. But if the PID file was assigned a value with the
        --pid-file option, the defaults
        for the general query log and slow query log file were
        incorrect. This has been rectified so that the defaults for all
        three files are based on the server host name and data
        directory.
      
        A remaining problem is that the binary log and relay log
        . and
        NNNNNN.index basename defaults are based on the
        PID file basename, contrary to the documentation. This issue is
        to be addressed as Bug#45359.
       (Bug#33693)
        The SHOW FUNCTION CODE and
        SHOW PROCEDURE CODE statements
        are not present in nondebug builds, but attempting to use them
        resulted in a “syntax error” message. Now the error
        message indicates that the statements are disabled and that you
        must use a debug build.
       (Bug#33637)
        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)
There was a race condition between the event scheduler and the server shutdown thread. (Bug#32771)
        When an InnoDB tablespace filled up, an error
        was logged to the client, but not to the error log. Also, the
        error message was misleading and did not indicate the real
        source of the problem.
       (Bug#31183)
        ALTER TABLE statements that added
        a column and added a nonpartial index on the column failed to
        add the index.
       (Bug#31031)
        For const tables that were optimized away
        EXPLAIN
        EXTENDED displayed them in the FROM
        clause. Now they are not displayed. If all tables are optimized
        away, FROM DUAL is displayed.
       (Bug#30302)
        There were cases where string-to-number conversions would
        produce warnings for CHAR values
        but not for VARCHAR values.
       (Bug#28299)
        In mysql, using Control-C to kill the current
        query resulted in a ERROR 1053 (08S01): Server shutdown
        in progress" message if the query was waiting for a
        lock.
       (Bug#28141)
        When building MySQL on Windows from source, the
        WITH_BERKELEY_STORAGE_ENGINE option would
        fail to configure BDB support correctly.
       (Bug#27693)
        The default database is no longer changed to
        NULL (“no database”) if
        DROP DATABASE for that database
        failed.
       (Bug#26704)
        DROP TABLE for
        INFORMATION_SCHEMA tables produced an
        Unknown table error rather than the more
        appropriate Access denied.
       (Bug#24062)
        SELECT COUNT(DISTINCT) was slow compared with
        SELECT DISTINCT. Now the server can use loose
        index scan for certain forms of aggregate functions that use
        DISTINCT. See
        Section 7.2.15.1, “Loose Index Scan”.
       (Bug#21849, Bug#38213)
Referring to a stored function qualified with the name of one database and tables in another database caused a “table doesn't exist” error. (Bug#18444)
A Table ... doesn't exist error could occur for statements that called a function defined in another database. (Bug#17199)

User Comments
Add your own comment.