Dear MySQL users, MySQL Server 5.7.2 (Milestone Release) is a new version of the world's most popular open source database. This is the second public milestone release of MySQL 5.7.
http://dev.mysql.com/doc/mysql-development-cycle/en/development-milestone-releases.html [ Due to a size limit of 50K and the large number of changes in the 5 months since the first milestone, this announcement has to be split into 4 parts. This is part 1. ] As with any other pre-production release, caution should be taken when installing on production level systems or systems with critical data. Note that 5.7.2 includes all features in MySQL 5.6. For information on installing MySQL 5.7.2 on new servers, please see the MySQL installation documentation at http://dev.mysql.com/doc/refman/5.7/en/installing.html MySQL Server 5.7.2 is available in source and binary form for a number of platforms from the "Development Releases" selection of our download pages at http://dev.mysql.com/downloads/mysql/ The platforms and package formats available for MySQL 5.7.2 are the same as for 5.6. Windows packages are now available via the new Installer for Windows Installer or .ZIP (no-install) packages for more advanced needs. It should be noted that the previous MSI packaging is no longer available and the point and click configuration wizards and all MySQL products are now available in the unified Installer for Windows: http://dev.mysql.com/downloads/installer/ Like the newly released MySQL 5.6.14, 5.7.2 also comes with a web installer as an alternative to the full installer. The web installer doesn't come bundled with any actual products and instead relies on download-on-demand to fetch only the products you choose to install. This makes the initial download much smaller but increases install time as the individual products will need to be downloaded. We welcome and appreciate your feedback, bug reports, bug fixes, patches, etc.: http://bugs.mysql.com/report.php The following section lists the changes in MySQL 5.7.2 since the first milestone. Many of these bug fixes have previously been released with MySQL 5.6.12 or 5.6.13 but are included here to give a complete list of changes since 5.7.1. The list may also be viewed online at http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-2.html Enjoy! On behalf of the MySQL Build Team at Oracle, - Bjorn Munch =================================================================== Changes in MySQL 5.7.2 (Sep 21, 2013, Milestone 12) Note This is a milestone release, for use at your own risk. Significant development changes take place in milestone releases and you may encounter compatibility issues, such as data format changes that require attention in addition to the usual procedure of running mysql_upgrade. For example, you may find it necessary to dump your data with mysqldump before the upgrade and reload it afterward. Authentication Notes * Incompatible Change: Previously, account rows in the mysql.user table could have an empty plugin column value. In this case, the server authenticated such an account using either the mysql_native_password or mysql_old_password plugin, depending on whether the password hash value in the Password column used native hashing or the older pre-4.1 hashing method. With the deprecation of old-format password hashes in MySQL 5.6.5, this heuristic for deciding which authentication plugin to use is unnecessary and it is desirable that user table rows always specify explicitly which authentication plugin applies. To that end, the plugin column is now defined to be non-NULL with a default value of 'mysql_native_password', and associated server operations require the column to be nonempty. In conjunction with this plugin column definition modification, several other changes have been made: + The --default-authentication-plugin command-line option is reimplemented as the default_authentication_plugin system variable. Its use at server startup is unchanged, but now the default plugin value can be examined at runtime using SHOW VARIABLES or SELECT @@default_authentication_plugin. The variable is read only and cannot be changed at runtime. + When mysql_install_db is run, it invokes the server to initialize the mysql database. The server now assigns every user table row a nonempty plugin column value. The value is 'mysql_native_password' unless the default_authentication_plugin system variable is set otherwise at server startup. + mysql_upgrade checks user table rows and, for any row with an empty plugin column, sets that column to 'mysql_native_password' or 'mysql_old_password' depending on the hash format of the Password column value. + At startup, and at runtime when FLUSH PRIVILEGES is executed, the server checks user table rows. For any row with an empty plugin column, the server writes a warning to the error log of this form: [Warning] User entry 'user_name'@'host_name' has an empty plugin value. The user will be ignored and no one can login with this user anymore. To address this issue, execute mysql_upgrade. If you upgrade to this release of MySQL from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate the plugin column change into the mysql database and assign the appropriate nonempty plugin value to any empty plugin column values. However, because the server now checks for and disables accounts with empty plugin column values, it is necessary to upgrade as follows. For an upgrade in which you plan to use the data directory from your existing MySQL installation: 1. Stop the server 2. Upgrade MySQL in place 3. Restart the server with the --skip-grant-tables option to disable privilege checking 4. Run mysql_upgrade 5. Restart the server normally (without --skip-grant-tables) For an upgrade in which you plan to reload a dump file generated from your existing MySQL installation: 1. To generate the dump file, run mysqldump without the --flush-privileges option 2. Stop the server 3. Upgrade MySQL in place 4. Restart the server with the --skip-grant-tables option to disable privilege checking 5. Reload the dump file (mysql < dump_file) 6. Execute mysql_upgrade 7. Restart the server normally (without --skip-grant-tables) Diagnostics Notes * Incompatible Change: Per the SQL standard, nondiagnostic statements should clear the diagnostics area when they begin executing. Previously, MySQL differed from this in that some nondiagnostic statements did not do this. MySQL now follows the SQL standard, which affects the content of the diagnostics area for some statements. Consequently, the result from statements such as SHOW WARNINGS that display the diagnostics area now differs somewhat: + The previous behavior: SHOW WARNINGS displays information about the conditions (errors, warnings, and notes) resulting from the most recent statement in the current session that generated messages. It shows nothing if the most recent statement used a table and generated no messages. (That is, statements that use a table but generate no messages clear the message list.) Statements that do not use tables and do not generate messages have no effect on the message list. + The new behavior: SHOW WARNINGS displays information about the conditions resulting from execution of the most recent nondiagnostic statement in the current session. The result from other diagnostic statements is affected similarly (SHOW ERRORS, GET DIAGNOSTICS). The following example demonstrates the difference in behavior. Previously: mysql> DROP TABLE test.no_such_table; ERROR 1051 (42S02): Unknown table 'test.no_such_table' mysql> SELECT @@warning_count; Query OK, 0 rows affected (0.00 sec) mysql> SHOW WARNINGS; +-------+------+------------------------------------+ | Level | Code | Message | +-------+------+------------------------------------+ | Error | 1051 | Unknown table 'test.no_such_table' | +-------+------+------------------------------------+ 1 row in set (0.00 sec) Here, the SELECT statement does not use tables and does not generate messages, so it does not change the diagnostics area. Consequently, SHOW WARNINGS output pertains to the DROP TABLE statement. Now: mysql> DROP TABLE test.no_such_table; ERROR 1051 (42S02): Unknown table 'test.no_such_table' mysql> SELECT @@warning_count; Query OK, 0 rows affected (0.00 sec) mysql> SHOW WARNINGS; Empty set (0.00 sec) Here, the SELECT statement clears the diagnostics area because it is a nondiagnostic statement. Consequently, SHOW WARNINGS output pertains to the SELECT statement (and is empty because the SELECT produces no messages). An implication of this change in diagnostics area handling is that if you expect to display the warning count as well as the list of messages, you should list the messages first because selecting the warning_count value clears the message list. Alternatively, use SHOW COUNT(*) WARNINGS to display the count; this is recognized as a diagnostic statement and does not clear the diagnostics area. Similar considerations apply to use of error_count. For compliance with the SQL standard, which states that diagnostics statements are not preparable, MySQL no longer supports the following as prepared statements: + SHOW WARNINGS, SHOW COUNT(*) WARNINGS + SHOW ERRORS, SHOW COUNT(*) ERRORS + Statements containing any reference to the warning_count or error_count system variable. In other words, those statements are now treated, in terms of preparability, the same as GET DIAGNOSTICS, which was already not preparable. Logging Notes * Incompatible Change: Several changes have been made to provide more logging control and more informative log messages: + The log_error_verbosity system variable now controls verbosity of the server in writing error, warning, and note messages to the error log. Permitted values are 1 (errors only), 2 (errors and warnings), 3 (errors, warnings, and notes), with a default of 3. log_error_verbosity is preferred over, and should be used instead of, the older log_warnings system variable. See the description of log_warnings for information about how that variable relates to log_error_verbosity (Server System Variables (http://dev.mysql.com/doc/refman/5.7/en/server-system-var iables.html)). Note The effective default verbosity is different now. The previous default (log_warnings=1) corresponds to log_error_verbosity=2, but the default log_error_verbosity is 3. To achieve a logging level similar to the previous default, set log_error_verbosity=2. + Default server verbosity is less when invoked with the --bootstrap option (such as is done by mysql_install_db): Only errors are written during the installation process so that they are less likely to be overlooked by the installer. + The log_timestamps system variable has been introduced for control of the timestamp time zone of messages written to the error log, and of general query log and slow query log messages written to files. (It does not affect the time zone of general query log and slow query log messages written to log tables, but rows retrieved from those tables can be converted from the local system time zone to any desired time zone with CONVERT_TZ() or by setting the session time_zone system variable.) Note The default timestamp time zone is different now (UTC rather than the local system time zone). To restore the previous default, set log_timestamps=SYSTEM. + The format of timestamps has changed for messages written to the error log, and for general query log and slow query log messages written to files. Timestamps are written using ISO 8601 / RFC 3339 format: YYYY-MM-DDThh:mm:ss.uuuuuu plus a tail value of Z signifying Zulu time (UTC) or ±hh:mm (an offset from UTC). In addition, for the general query log file, timestamps are included in every message, not just when the second changes. The format of timestamps has also changed for messages written to the general query log and slow query log tables (mysql.general_log, mysql.slow_log), which now include fractional seconds. (The column type for timestamps has changed from TIMESTAMP to TIMESTAMP(6).) + Previously, the ID included in error log messages was the mysqld process ID. Now the ID is that of the thread within mysqld responsible for writing the message. This is more informative with respect to which part of the server produced the message. It is also more consistent with general query log and slow query log messages, which include the connection thread ID. For information about log output destinations, see Selecting General Query and Slow Query Log Output Destinations (http://dev.mysql.com/doc/refman/5.7/en/log-destinations.html) . For information about specific logs, see The Error Log (http://dev.mysql.com/doc/refman/5.7/en/error-log.html), The General Query Log (http://dev.mysql.com/doc/refman/5.7/en/query-log.html), and The Slow Query Log (http://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html). Performance Schema Notes * The Performance Schema now instruments memory usage and aggregates memory usage statistics, detailed by these factors: + Type of memory used (various caches, internal buffers, and so forth) + Thread, account, user, host indirectly performing the memory operation The Performance Schema instruments the following aspects of memory use + Memory sizes used + Operation counts + Low and high water marks Memory sizes help to understand or tune the memory consumption of a server. Operation counts help to understand or tune the overall pressure the server is putting on the memory allocator, which has an impact on performance. Allocating a single byte one million times is not the same as allocating one million bytes a single time; tracking both sizes and counts can expose the difference. Low and high water marks are critical to detect workload spikes, overall workload stability, and possible memory leaks. These specific changes were implemented: + The setup_instruments table now has memory instruments. These have names of the form memory/component/instrument_name. Memory instrumentation is disabled by default. + The performance_schema_max_memory_classes system variable configures the maximum number of memory instruments. + The Performance_schema_memory_classes_lost status variable indicates the number of times a memory instrument could not be loaded. + Several summary tables aggregate memory-related events. For more information, see Memory Summary Tables (http://dev.mysql.com/doc/refman/5.7/en/memory-summary-tables. html). If you upgrade to this release of MySQL from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate these changes into the performance_schema database. * The Performance Schema now instruments stored program execution and aggregates statistics for them. This includes stored procedures, stored functions, triggers, and Event Scheduler events. These specific changes were implemented: + The setup_instruments table has new instruments. The statement/scheduler/event instrument tracks all events executed by the Event Scheduler. Instruments with names of the form statement/sp/program_instruction track internal instructions executed by stored programs. + The setup_objects table OBJECT_TYPE column now permits values of 'EVENT', 'FUNCTION', 'PROCEDURE', 'TABLE', or 'TRIGGER', not just 'TABLE'. + Statement event tables (events_statements_current, events_statements_history, and events_statements_history_long) now have a NESTING_LEVEL column that indicates the event nesting level. + The performance_schema_max_program_instances and performance_schema_max_statement_stack system variables configure the maximum number of stored programs and the maximum depth of nested stored program calls for which the Performance Schema maintains statistics. + The Performance_schema_program_lost and Performance_schema_nested_statement_lost status variables indicate the number of stored programs for which statistics were lost, and the number of stored program statements for which statistics were lost. + The events_statements_summary_by_program summary table aggregates statement events per stored program. For more information, see Event Pre-Filtering (http://dev.mysql.com/doc/refman/5.7/en/performance-schema-fil tering.html#performance-schema-pre-filtering), and Statement Summary Tables (http://dev.mysql.com/doc/refman/5.7/en/statement-summary-tabl es.html). If you upgrade to this release of MySQL from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate these changes into the performance_schema database. * The Performance Schema now provides tables that expose replication information. This is similar to the information available from the SHOW SLAVE STATUS statement, but representation in table form is more accessible and has usability benefits: + SHOW SLAVE STATUS output is useful for visual inspection, but not so much for programmatic use. By contrast, using the Performance Schema tables, information about slave status can be searched using general SELECT queries, including complex WHERE conditions, joins, and so forth. + Query results can be saved in tables for further analysis, or assigned to variables and thus used in stored procedures. + The replication tables provide better diagnostic information. For multi-threaded slave operation, SHOW SLAVE STATUS reports all coordinator and worker thread errors using the Last_SQL_Errno and Last_SQL_Error fields, so only the most recent of those errors is visible and information can be lost. The replication tables store errors on a per-thread basis without loss of information. + The last seen transaction is visible in the replication tables on a per-worker basis. This is information not avilable from SHOW SLAVE STATUS. + Developers familiar with the Performance Schema interface can extend the replication tables to provide additional information by adding rows to the tables. These tables provide replication information: + replication_connection_configuration and replication_connection_status indicate the configuration parameters used by the slave for connecting to the master and the status of the connection. + replication_execute_configuration and replication_execute_status indicate, for aspects of transaction execution on the slave not specific to any given thread, the configuration parameters and the current execution status. + replication_execute_status_by_coordinator and replication_execute_status_by_worker contain thread-specific transaction execution information, either about the SQL thread (for a single-threaded slave), or about the coordinator and worker threads (for a multi-threaded slave). If the slave is multi-threaded, the SQL thread is the coordinator for worker threads. In this case, the Last_SQL_Error field of SHOW SLAVE STATUS output now shows exactly what the Last_Error_Message column in the Performance Schema replication_execute_status_by_coordinator table shows. The field value is modified to suggest that there may be more failures in the other worker threads which can be seen in the replication_execute_status_by_worker table that shows each worker thread's status. For more information, see Performance Schema Replication Tables (http://dev.mysql.com/doc/refman/5.7/en/performance-schema-rep lication-tables.html). If you upgrade to this release of MySQL from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate these changes into the performance_schema database. RPM Notes * It was not possible to upgrade a community RPM to a commercial RPM using rpm -uvh or yum localupdate. To deal with this, the RPM spec file has been updated in MySQL 5.7.2, which has the following consequences: + For a non-upgrade installation (no existing MySQL version installed), it possible to install MySQL using yum. + For upgrades, it is necessary to clean up any earlier MySQL installations. In effect, the update is performed by removing the old installations and installing the new one. Additional details follow. For a non-upgrade installation of MySQL 5.7.2, it is possible to install using yum: shell> yum install MySQL-server-NEWVERSION.glibc23.i386.rpm For upgrades to MySQL 5.7.2, the upgrade is performed by removing the old installation and installing the new one. To do this, use the following procedure: 1. Remove the existing 5.7.X installation. OLDVERSION is the version to remove. shell> rpm -e MySQL-server-OLDVERSION.glibc23.i386.rpm Repeat this step for all installed MySQL RPMs. 2. Install the new version. NEWVERSION is the version to install. shell> rpm -ivh MySQL-server-NEWVERSION.glibc23.i386.rpm Alternatively, the removal and installation can be done using yum: shell> yum remove MySQL-server-OLDVERSION.glibc23.i386.rpm shell> yum install MySQL-server-NEWVERSION.glibc23.i386.rpm (Bug #16445097, Bug #16445125, Bug #16587285) Security Notes * Platform availability, usability, and security of mysql_secure_installation has been improved. Previously, this program was a shell script available for Unix and Unix-like systems. It has been converted to a binary executable program (written in C++) that is available on all platforms. Implementation as a C++ program permits mysql_secure_installation to connect directly to the MySQL server using the client/server protocol, rather than by invoking mysql to do so and communicating with mysql using temporary files. This reimplementation of mysql_secure_installation is feature-compatible with previous versions, but the following usability improvements have been made: + The validate_password plugin can be used for password strength checking. + Standard MySQL options such as --host and --port are supported on the command line and in option files. For more information, see mysql_secure_installation --- Improve MySQL Installation Security (http://dev.mysql.com/doc/refman/5.7/en/mysql-secure-installat ion.html). For more information about validate_password, see The Password Validation Plugin (http://dev.mysql.com/doc/refman/5.7/en/validate-password-plug in.html). Semisynchronous Replication Notes * Replication: Semisynchronous replication master servers now use a different wait point by default in communicating wih slaves. This is the point at which the master waits for acknowledgement of transaction receipt by a slave before returning a status to the client that committed the transaction. The wait point is controlled by the new rpl_semi_sync_master_wait_point system variable. These values are permitted: + AFTER_SYNC (the default): The master writes each transaction to its binary log and the slave, and syncs the binary log to disk. The master waits for slave acknowledgment of transaction receipt after the sync. Upon receiving acknowledgment, the master commits the transaction to the storage engine and returns a result to the client, which then can proceed. + AFTER_COMMIT: The master writes each transaction to its binary log and the slave, syncs the binary log, and commits the transaction to the storage engine. The master waits for slave acknowledgment of transaction receipt after the commit. Upon receiving acknowledgment, the master returns a result to the client, which then can proceed. For older versions of MySQL, semisynchronous master behavior is equivalent to a setting of AFTER_COMMIT. The replication characteristics of these settings differ as follows: + With AFTER_SYNC, all clients see the committed transaction at the same time: After it has been acknowledged by the slave and committed to the storage engine on the master. Thus, all clients see the same data on the master. In the event of master failure, all transactions committed on the master have been replicated to the slave (saved to its relay log). A crash of the master and failover to the slave is lossless because the slave is up to date. + With AFTER_COMMIT, the client issuing the transaction gets a return status only after the server commits to the storage engine and receives slave acknowledgement. After the commit and before slave acknowledgment, other clients can see the committed transaction before the committing client. If something goes wrong such that the slave does not process the transaction, then in the event of a master crash and failover to the slave, it is possible that such clients will see a loss of data relative to what they saw on the master. The new wait point is a behavior change, but requires no reconfiguration. The change does introduce a version compatibility constraint because it increments the semisynchronous interface version: Servers for MySQL 5.7.2 and up do not work with semisynchronous replication plugins from older versions, nor do servers from older versions work with semisynchronous replication plugins for MySQL 5.7.2 and up. Trigger Notes * Previously, a table could have at most one trigger for each combination of trigger event (INSERT, UPDATE, DELETE) and action time (BEFORE, AFTER). This limitation has been lifted and multiple triggers are permitted. Along with that change, several additional modifications were made: + By default, triggers for each combination of trigger event and action time execute in the order they were created. To make it possible to specify trigger activation order, CREATE TRIGGER now supports FOLLOWS and PRECEDES clauses. Each clause takes the name of an existing trigger that has the same trigger event and action time. + The ACTION_ORDER column in the INFORMATION_SCHEMA.TRIGGERS table is no longer 0 but an integer greater than zero that indicates the order in which triggers activate. + Creation time for triggers is now maintained, as a TIMESTAMP(2) value (with a fractional part in hundredths of seconds): o The CREATED column in the TRIGGERS table is no longer NULL, for triggers created as of MySQL 5.7.2. o The same is true for the Created column of SHOW TRIGGERS output, and for the (new) Created column of SHOW CREATE TRIGGER output. o The tbl_name.TRG file that stores trigger information for table tbl_name now contains a created line with trigger creation times. For additional information, see Using Triggers (http://dev.mysql.com/doc/refman/5.7/en/triggers.html), CREATE TRIGGER Syntax (http://dev.mysql.com/doc/refman/5.7/en/create-trigger.ht ml), SHOW CREATE TRIGGER Syntax (http://dev.mysql.com/doc/refman/5.7/en/show-create-trigg er.html), SHOW TRIGGERS Syntax (http://dev.mysql.com/doc/refman/5.7/en/show-triggers.htm l), The INFORMATION_SCHEMA TRIGGERS Table (http://dev.mysql.com/doc/refman/5.7/en/triggers-table.ht ml), and Table Trigger Storage (http://dev.mysql.com/doc/internals/en/sp-storage.html#sp -storage-trigger). + If run against a table that has triggers, mysql_upgrade and CHECK TABLE ... FOR UPGRADE display this warning for each trigger created before MySQL 5.7.2: Trigger db_name.tbl_name.trigger_name does not have CREATED attribute . The warning is informational only. No change is made to the trigger. These changes have implications for backups, upgrades, and downgrades, as described following. For brevity, "multiple triggers" here is shorthand for "multiple triggers that have the same trigger event and action time." Backup and restore. mysqldump dumps triggers in activation order so that when the dump file is reloaded, triggers are re-created in the same activation order. However, if a mysqldump dump file contains multiple triggers for a table that have the same trigger event and action time, an error occurs for attempts to load the dump file into an older server that does not support multiple triggers. (See the downgrading notes for a workaround; you can convert triggers to be compatible with older servers.) Upgrades. Suppose that you upgrade an old server that does not support multiple triggers to MySQL 5.7.2 or newer. If the new server is a replication master and has old slaves that do not support multiple triggers, an error occurs on those slaves if a trigger is created on the master for a table that already has a trigger with the same trigger event and action time. To avoid this problem, upgrade the slaves first, then upgrade the master. Downgrades. If you downgrade a server that supports multiple triggers to an older version that does not, the downgrade has these effects: + For each table that has triggers, all trigger definitions remain in the .TRG file for the table. However, if there are multiple triggers with the same trigger event and action time, the server executes only one of them when the trigger event occurs. For information about .TRG files, see Table Trigger Storage (http://dev.mysql.com/doc/internals/en/sp-storage.html#sp -storage-trigger). + If triggers for the table are added or dropped subsequent to the downgrade, the server rewrites the table's .TRG file. The rewritten file retains only one trigger per combination of trigger event and action time; the others are lost. To avoid these problems, modify your triggers before downgrading. For each table that has multiple triggers per combination of trigger event and action time, convert each such set of triggers to a single trigger as follows: 1. For each trigger, create a stored routine that contains all the code in the trigger. Values accessed using NEW and OLD can be passed to the routine using parameters. If the trigger needs a single result value from the code, you can put the code in a stored function and have the function return the value. If the trigger needs multiple result values from the code, you can put the code in a stored procedure and return the values using OUT parameters. 2. Drop all triggers for the table. 3. Create one new trigger for the table that invokes the stored routines just created. The effect for this trigger is thus the same as the multiple triggers it replaces. -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/mysql