MySQL Community Server 8.0.2-dmr has been released (part 1/2)
Posted by: Lars Tangvald
Date: July 18, 2017 01:06AM
Date: July 18, 2017 01:06AM
[Due to post size limitations, the announcement is split in 2 parts. This is part 1.] MySQL Server 8.0.2-dmr (Milestone Release) is a new version of the world's most popular open source database. This is the first public milestone release of MySQL 8.0. http://dev.mysql.com/doc/mysql-development-cycle/en/development-milestone-releases.html As with any other pre-production release, caution should be taken when installing on production level systems or systems with critical data. Note that 8.0.2-dmr includes all features in MySQL 5.7. For information on installing MySQL 8.0.2-dmr on new servers, please see the MySQL installation documentation at http://dev.mysql.com/doc/refman/8.0/en/installing.html MySQL Server 8.0.2-dmr 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/ MySQL Server 8.0.2-dmr is also available from our repository for Linux platforms, go here for details: http://dev.mysql.com/downloads/repo/ Windows packages are available via the Installer for Windows: http://dev.mysql.com/downloads/installer/ along with .ZIP (no-install) packages for more advanced needs. 8.0.2-dmr 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 link lists the changes in the MySQL 8.0.2-dmr since the release of MySQL 8.0.1. https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-2.html Enjoy! Changes in MySQL 8.0.2 (2017-07-17, Development Milestone) 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. Account Management Notes * During data directory initialization or upgrade, MySQL now creates a 'mysql.session'@'localhost' reserved account. This account is used internally by plugins to access the server. It is locked so that it cannot be used for client conections. (Bug #25642343) * These system variables now are available to permit automatic assignment of roles and to permit granted roles to be automatically activated at client connection time: + mandatory_roles takes a value listing roles that the server should treat as automatically granted to all users. + activate_all_roles_on_login, if enabled, causes all roles granted to users to be made active at client connection time. Character Set Support * For Unicode data that uses NO PAD collations, sorting of multibyte and variable-length values has been improved: + NO PAD collations are those based on UCA 9.0.0 and higher, such as utf8mb4_0900_ai_ci or utf8mb4_ja_0900_as_cs. + The performance improvement is greatest for sparse key values; that is, strings that do not fill their entire permitted length. For a VARCHAR(10) column that uses the utf8mb4_0900_ai_ci collation, values may take up to 40 bytes. The string 'a' is more sparse than 'abcdefghij'. But even 'abcdefghij' uses only 10 bytes of a possible 40 and is more sparse than a string of 10 emojis. The emoji string is dense because each character uses 4 bytes for a resulting string that requires the entire 40 bytes available. (Bug #25750527, Bug #85546) * MySQL now supports a new collation, utf8mb4_0900_as_ci, for the utf8mb4 Unicode character set. This collation is accent sensitive and case insensitive. It is similar to the default utf8mb4 collation (utf8mb4_0900_ai_ci) except that the default collation is accent insensitive. MySQL also now supports a new Japanese collation, utf8mb4_ja_0900_as_cs_ks, for the utf8mb4 Unicode character set. This collation is like utf8mb4_ja_0900_as_cs in that it is accent sensitive and case sensitive, but utf8mb4_ja_0900_as_cs_ks is also kana sensitive and distinguishes Katakana characters from Hiragana characters. utf8mb4_ja_0900_as_cs treats Katakana and Hiragana characters as equal for sorting. Applications that require a Japanese collation but not kana sensitivity may use utf8mb4_ja_0900_as_cs for better sort performance. utf8mb4_ja_0900_as_cs uses three weight levels for sorting; utf8mb4_ja_0900_as_cs_ks uses four. utf8mb4_ja_0900_as_cs_ks is the first collation to use the _ks collation suffix. Japanese collations without this suffix are not kana sensitive. For more information, see Unicode Character Sets (http://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html). * These character set changes were made to MySQL client support: + These clients use a default character set of utf8mb4 rather than latin1: mysql, mysql_upgrade, mysqladmin, mysqlcheck, mysqldump, mysqlimport, mysqlpump, mysqlslap, mysqlshow, and mysqltest. (This change does not affect character set autodetection performed by mysql, mysqladmin, mysqlcheck, mysqlimport, and mysqlshow, as described at Connection Character Sets and Collations (http://dev.mysql.com/doc/refman/8.0/en/charset-connection.html)). + Client connections created using the libmysqlclient library use a default character set of utf8mb4 rather than latin1. + The mysqltest program supports a --default-character-set option for specifying the character set explicitly. Compilation Notes * Performance: The strict aliasing optimization for GCC is no longer disabled, which results in a minor improvement for MySQL single-threaded performance. * Linux: MySQL now compiles on Alpine Linux. (Bug #25945568, Bug #80322) * Solaris: On Solaris, server builds now use std::atomic, so they must be linked against libstatomic. (Bug #25957991) * MySQL now compiles using Visual Studio 2017. (Bug #25788406) * The required version of the Boost library for server builds has been raised to 1.64.0. (Bug #25772329, Bug #85593) * These changes were made with respect to client program development: + Client programs should only need to #include the <mysql.h> header file. In particular, <my_config.h> should not be needed, and is no longer installed. + The my_init() function is no longer included in the list of symbols exported from libmysqlclient. It need not be called explicitly by client programs because it is called implicitly by other C API initialization functions. (Bug #25732787) * For the Xcode IDE, header files are added to MySQL project sources so they can be searched. (Bug #25636986) * Work was done to clean up the source code base, including: Removing unneeded CMake checks; removing unused macros from source files; reorganizing header files to reduce the number of dependencies and make them more modular, removing function declarations without definitions, replacing locally written functions with equivalent functions from industry-standard libraries. Component Notes * Two new services are available to enable server components and plugins to register and unregister user-defined-functions (UDFs): mysql_service_udf_registration and mysql_service_udf_registration_aggregate provide registration services for scalar and aggregate UDFs, respectively. These services enable components and plugins to manage UDFs for themselves, without the need for CREATE FUNCTION and DROP FUNCTION statements. UDFs registered using either these services or CREATE FUNCTION now are listed in the new Performance Schema user_defined_functions table. See The user_defined_functions Table (http://dev.mysql.com/doc/refman/8.0/en/user-defined-functions-table.html). * The mysql_string string-manipulation service has been converted from a plugin service to a component service: a set of string service APIs for use by server components. The password validation component has been updated to use the revised service implementation. For information about services, see MySQL Services for Components and Plugins (http://dev.mysql.com/doc/refman/8.0/en/component-plugin-services.html). Configuration Notes * Previously, LOCAL capability for LOAD DATA operations was enabled by default in some contexts: The client library in MySQL binary distributions was compiled with client-side LOCAL capability enabled, and the local_infile system variable was enabled on the server side. LOCAL capability is now disabled by default in all contexts. Client programs must be configured explicitly to enable LOCAL, and the server must be run with local_infile enabled. See Security Issues with LOAD DATA LOCAL (http://dev.mysql.com/doc/refman/8.0/en/load-data-local.html). (Bug #24511108) * mysqld startup behavior has been modified as follows. In general, these changes enable more consistent or easier server startup when not using mysqld_safe. + The server executable determines its own full path name at startup and uses the parent of the directory in which it is located as the default basedir value. This in turn enables the server to use that basedir when searching for server-related information such as the share directory containing error messages. + If error log output cannot be redirected to the --log-error option value, error output could be lost. This is now less likely. + If the server is started using the --daemonize option and is not connected to a tty device, a default error logging option of --log-error="" is used in the absence of an explicit logging option, to direct error output to the default log file. Previously, an error could occur under these circumstances. + The -D and -I options now are synonyms for --daemonize and --initialize, respectively. (Bug #20398088, Bug #75343) * MySQL now supports a SET PERSIST_ONLY variant of SET statement syntax, for making configuration changes at runtime that also persist across server restarts. Like SET PERSIST, SET PERSIST_ONLY writes the variable setting to an option file named mysqld-auto.cnf in the data directory. However, unlike PERSIST, PERSIST_ONLY does not modify the runtime global system variable value. This makes PERSIST_ONLY suitable for configuring read-only system variables that only be set can at server startup. For more information, see Using Option Files (http://dev.mysql.com/doc/refman/8.0/en/option-files.html), and SET Syntax for Variable Assignment (http://dev.mysql.com/doc/refman/8.0/en/set-variable.html). Use of SET PERSIST_ONLY requires the new PERSIST_RO_VARIABLES_ADMIN privilege. * The explicit_defaults_for_timestamp system variable is now enabled by default (previously disabled by default), and a warning occurs if you disable it. This means that the nonstandard (and deprecated) behaviors for default values and NULL-value handling in TIMESTAMP columns are now disabled by default. * Symbolic link support as described at Using Symbolic Links for MyISAM Tables on Unix (http://dev.mysql.com/doc/refman/8.0/en/symbolic-links-to-tables.html), along with the --symbolic-links option that controls it, is now deprecated and will be removed in a future version of MySQL. In addition, the option is now disabled by default. The related have_symlink system variable also is deprecated and will be removed in a future version of MySQL. Data Dictionary Notes * The column_stats system table has been removed and replaced by the column_statistics data dictionary table. * The version data dictionary table was renamed to dd_properties. Metadata for INFORMATION_SCHEMA tables created by dynamic plugins now is recorded in the data dictionary and visible through the INFORMATION_SCHEMA TABLES table. These tables are no longer visible in INFORMATION_SCHEMA: SHOW_STATISTICS, SHOW_STATISTICS_DYNAMIC, STATISTICS_BASE, STATISTICS_DYNAMIC, TABLES_DYNAMIC. User impact is minimal because these tables are for internal use by server components. * The InnoDB storage engine now uses the global MySQL data dictionary rather than its own storage engine-specific data dictionary. For information about the data dictionary, see MySQL Data Dictionary (http://dev.mysql.com/doc/refman/8.0/en/data-dictionary.html). The following list briefly describes the main implications of this change: + Upgrade and downgrade implications: o To upgrade from MySQL 5.7 to MySQL 8.0, you must perform the upgrade procedure described at Upgrading MySQL (http://dev.mysql.com/doc/refman/8.0/en/upgrading.html). o Downgrading from MySQL 8.0 to MySQL 5.7 is only supported using the logical downgrade method (a mysqldump downgrade). In-place downgrades are not supported. + Metadata updates associated with exporting and importing tablespaces using the transportable tablespace feature are now performed on global data dictionary tables instead of InnoDB data dictionary tables. + InnoDB in-memory metadata is now instantiated from global data dictionary objects. This metadata was previously read from InnoDB system tables. + Table options that signify tablespace encryption and transparent page compression are now retrieved from the global data dictionary. + Data dictionary support was added for InnoDB FULLTEXT indexes. Auxiliary index table names were changed to lowercase. + InnoDB metadata created or modified during DDL operations is now written to the global data dictionary. * mysql system tables and data dictionary tables are now created in a single InnoDB tablespace file named mysql.ibd in the MySQL data directory. Previously, these tables were created in individual InnoDB tablespace files in the mysql database directory. Associated changes include: + The InnoDB data dictionary buffer table, which stores fast changing InnoDB metadata, was renamed to innodb_dynamic_metadata and moved from the InnoDB system tablespace to the data dictionary tablespace. + Undo tablespace metadata now resides in the data dictionary tablespace, which allows InnoDB to locate undo tablespaces at startup. + Temporary tablespace metadata now resides in the data dictionary tablespace. + Undo tablespace and temporary tablespace metadata is found the mysql.tablespaces data dictionary table, which makes the data visible to other data dictionary tables. + Table definitions for tables created in the mysql tablespace, the InnoDB system tablespace (innodb_system), or general tablespaces now include a TABLESPACE attribute. This change has the following implications: o You cannot use CREATE TEMPORY TABLE ... LIKE to create an empty table based on the definition of a table that resides in any of the aforementioned tablespaces, as these tablespaces do not support temporary tables. o CREATE TABLE ... LIKE preserves the TABLESPACE attribute of the original table and creates a new table in the defined tablespace regardless of the innodb_file_per_table setting. This is a temporary regression. For more information and workarounds, see CREATE TABLE ... LIKE Syntax (http://dev.mysql.com/doc/refman/8.0/en/create-table-like.html), and CREATE TEMPORARY TABLE Syntax (http://dev.mysql.com/doc/refman/8.0/en/create-temporary-table.html). Optimizer Notes * MySQL now enables management of histogram statistics for table column values: + The ANALYZE TABLE statement supports UPDATE HISTOGRAM and DROP HISTOGRAM clauses for generating and removing column histogram statistics. + The server stores histogram information in the column_statistics data dictionary table. Histograms are viewable using the INFORMATION_SCHEMA.COLUMN_STATISTICS table. + The histogram_generation_max_mem_size system variable controls the amount of memory available for histogram generation. + The Performance Schema has a memory/sql/histograms instrument for monitoring memory allocations performed for histogram generation. + mysqldump and mysqlpump have a --column-statistics option to add ANALYZE TABLE statements to the output to generate histogram statistics for dumped tables when the dump file is reloaded. For more information, see ANALYZE TABLE Syntax (http://dev.mysql.com/doc/refman/8.0/en/analyze-table.html), Optimizer Statistics (http://dev.mysql.com/doc/refman/8.0/en/optimizer-statistics.html), and The INFORMATION_SCHEMA COLUMN_STATISTICS Table (http://dev.mysql.com/doc/refman/8.0/en/column-statistics-table.html). * MySQL now supports window functions that, for each row from a query, perform a calculation using rows related to that row. These include functions such as RANK(), LAG(), and NTILE(). In addition, several existing aggregate functions now can be used as window functions; for example, SUM() and AVG(). For more information, see Window Functions (http://dev.mysql.com/doc/refman/8.0/en/window-functions.html). Note Each of the following words now is a reserved word and cannot be used as an identifier without identifier quoting: CUME_DIST, DENSE_RANK, FIRST_VALUE, GROUPS, LAG, LAST_VALUE, LEAD, NTH_VALUE, NTILE, OVER, PERCENT_RANK, RANK, ROW_NUMBER, WINDOW. Packaging Notes * mysqladmin was added to Docker/Minimal packages because it is needed by InnoDB Cluster. (Bug #25998285) * Debian/Ubuntu packages now support multiple MySQL instances with systemd. See Managing MySQL Server with systemd (http://dev.mysql.com/doc/refman/8.0/en/using-systemd.html). (Bug #24559588, Bug #82785) Parser Notes * The parser rules for ALTER TABLE were refactored to be context independent and improve maintainability and extensibility. A resulting effect is that some previously accepted undocumented syntax variants are no longer accepted. For example, CREATE TABLE statements were permitted with column names qualified by the table name, or by the current database and table name. Such statements now produce an error. * Support for these deprecated syntax constructs for table and column references has been removed and their use now results in an error. Instances of these constructs should be changed to remove the leading period. + .col_name + .tbl_name + .tbl_name.col_name Performance Schema Notes * The Performance Schema now supports versioning, and maintains the current definitions for its tables internally. At startup, the server compares its supported Performance Schema version with the Performance Schema version stored in the data dictionary. If the versions differ, the server drops any old Performance Schema tables and recreates them using the current definitions. In consequence of this change: + For MySQL upgrades, it is no longer necessary to run mysql_upgrade to incorporate changes to Performance Schema tables because they are recreated automatically as necessary at server startup. + The mysql_system_tables.sql support script no longer includes SQL statements for Performance Schema table creation because these table definitions are maintained internally. To support dynamic Performance Schema table manipulation, a new component service named pfs_table_service is now available. * The Performance Schema default instrumentation settings have changed: + The transaction instrument and the events_transactions_current and events_transactions_history consumers are now enabled by default. See Performance Schema Transaction Tables (http://dev.mysql.com/doc/refman/8.0/en/performance-schema-transaction-tables.html). + All memory/% memory instruments are now enabled by default. See Memory Summary Tables (http://dev.mysql.com/doc/refman/8.0/en/memory-summary-tables.html). + The wait/lock/metadata/sql/mdl metadata lock instrument is now enabled by default. See The metadata_locks Table (http://dev.mysql.com/doc/refman/8.0/en/metadata-locks-table.html). Security Notes * Security Fix: The linked OpenSSL library for the MySQL Commercial Server has been updated to version 1.0.2l. Issues fixed in the new OpenSSL version are described at http://www.openssl.org/news/vulnerabilities.html. This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #26160962) * Previously, any user could execute the XA RECOVER statement to discover the XID values for outstanding prepared XA transactions, possibly leading to commit or rollback of an XA transaction by a user other than the one who started it. Now XA RECOVER is permitted only to users who have the new XA_RECOVER_ADMIN privilege, which is expected to be granted only to administrative users who have need for it. This might be the case, for example, for administrators of an XA application if it has crashed and it is necessary to find outstanding transactions started by the application so they can be rolled back. This privilege requirement does not affect normal commit or rollback of an XA transaction because the user who started it knows its XID. For MySQL uprades, mysql_upgrade grants XA_RECOVER_ADMIN to users who have the SUPER privilege, unless some account is found that already has XA_RECOVER_ADMIN. (Bug #17188129) Spatial Data Support * Argument suitability checking was improved for these spatial functions: ST_Contains(), ST_Crosses(), ST_Disjoint(), ST_Equals(), ST_Intersects(), ST_Overlaps(), ST_Touches(), ST_Within(), MBRContains(), MBRCoveredBy(), MBRCovers(), MBRDisjoint(), MBREquals(), MBRIntersects(), MBROverlaps(), MBRTouches(), MBRWithin(). For more information, see Spatial Relation Functions That Use Object Shapes (http://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html), and MySQL-Specific Spatial Relation Functions That Use Minimum Bounding Rectangles (MBRs) (http://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mysql-specific.html). Test Suite Notes * The --do-test-list option for mysql-test-run.pl accepts an argument for a file containing tests one per line. Lines in the file are now accepted in any of the following formats: test_name test_name.test suite_name.test_name suite_name.test_name.test path/to/test/file (Bug #25700362) * mysql-test-run.pl and mysqltest are now more restrictive about permitted test case and result file names. Names must consist only of alphanumeric characters (A-Z, a-z, 0-9), dash (-), or underscore (_), and cannot start with dash or underscore. An error occurs for nonconforming file names. (Bug #25487471) * These changes were made to the --xml-report option for mysql-test-run.pl: + A <failure> tag identifies any test failing on a retry attempt. + Separate statistics and fields are included for skipped and disabled tests. + The XML report is created in the build directory if no absolute path is given for out-of-source builds. + For combination runs, a field named variation is included in the <testcase> tag. + Results for all tests belonging to a suite are aggregated within a single <testsuite> tag. + Information regarding failures is reported with a brief reason in an attribute named message, along with other details within the tag. (Bug #25349924) * mysql-test-run.pl now supports a --report-unstable-tests option that has these effects: + Reports any test that has passed using at least one retry attempt in a separate category called "Unstable tests" in the summary. + If all failures are due to unstable tests, mysql-test-run.pl produces a warning but exits successfully. + Adds a new XML tag to report unstable tests, if the --xml-report option is also specified. (Bug #24473420, Bug #25984429) * mysqltest now supports a replace_numeric_round command that takes an argument value from 0 to 16 indicating the number of decimals to round numeric values to. This can be used to help prevent result content mismatch errors for tests in which slightly different results are obtained across platforms due to precision differences. Thanks to Daniel Black for the patch. (Bug #23280117, Bug #81399) * mysql-test-run.pl now looks for a testname-client.opt file, which is analogous to the testname-master.opt file but for specifying test-specific client options. (Bug #17084918) Platform-Specific Notes * Linux: The generic Linux build for MySQL 8.0 now supports Non-Uniform Memory Access (NUMA) on its host system. Systems that use the build need to have libnuma installed on them. See Installing MySQL on Unix/Linux Using Generic Binaries (http://dev.mysql.com/doc/refman/8.0/en/binary-installation.html) for more details. (Bug #26005558) Functionality Added or Changed * Incompatible Change; InnoDB: ADD PARTITION, DROP PARTITION, COALESCE PARTITION, REORGANIZE PARTITION, and REBUILD PARTITION ALTER TABLE options are now supported by native partitioning in-place APIs and may be used with ALGORITHM={COPY|INPLACE} and LOCK clauses. EXCHANGE PARTITION, which previously supported ALGORITHM and LOCK clauses, is performed by a new server layer API for compatibility with the MySQL data dictionary. Partition and table exchange is performed internally by the native partition handler. DROP PARTITION with ALGORITHM=INPLACE deletes data stored in the partition and drops the partition. However, DROP PARTITION with ALGORITHM=COPY or old_alter_table=ON rebuilds the partitioned table and attempts to move data from the dropped partition to another partition with a compatible PARTITION ... VALUES definition. Data that cannot be moved to another partition is deleted. * InnoDB: InnoDB now uses tablespace map files during recovery to identify tablespaces that require redo log application. This is a change from redo log tablespace discovery that was used previously. If tablespace map files are lost or corrupted, the innodb_scan_directories startup option may be used to specify tablespace directories when starting MySQL after a server outage. For more information, see Tablespace Discovery During Crash Recovery (http://dev.mysql.com/doc/refman/8.0/en/innodb-recovery.html#innodb-recovery-tablespace-discovery). (Bug #24793413) * Replication: In previous versions issuing STOP GROUP_REPLICATION stopped the plugin but there was a period during this process when the server still accepted transactions. This meant the transactions were not transmitted to the group, and if the plugin failed to stop correctly further transactions were accepted. To make STOP GROUP_REPLICATION safer, now super_read_only is set to ON immediately upon issuing STOP GROUP_REPLICATION, which ensures no transactions are accepted. (Bug #25495067, Bug #84795) * Replication: When there was a network partition and a member was in a minority all queries to that member blocked. To improve this situation, the group_replication_unreachable_majority_timeout variable has been added which enables you to configure how long members in a minority wait to regain contact with a member in the majority before leaving the group. (Bug #25473794) * Replication: The group_replication_transaction_size_limit variable was added to enable you to protect a group against large transactions causing a failure. (Bug #84785, Bug #25510757) * Replication: Support for binary log files created by versions earlier than MySQL 5.0 has been removed, and binary log Version 1 and Version 3 formats are no longer supported by slaves or mysqlbinlog. * Replication: The replication_group_members and replication_group_member_stats Performance Schema tables have been extended to provide more monitoring information for Group Replication. The replication_group_members table now includes information about member's roles, and the versions of MySQL running on a member. The replication_group_member_stats table now includes information about all members in the group, the applier and local queues, and rolled back transactions. * Replication: The receiver thread has been improved to no longer block other thread's activities when waiting for disk space. This improves the monitoring of replication ensuring that it reports correctly when the receiver thread is waiting for disk space. If you are not able to free disk space to allow the receiver thread to continue its activity, it can be forcefully stopped without side effects in most cases. * Replication: A new transaction length field has been added to the Gtid_log_event which stores the transaction length in bytes. * Replication: The following variables have had their defaults changed to ensure replication is as robust and efficient as possible by default: + master_info_repository=TABLE and relay_log_info_repository=TABLE ensure that binary log information is stored in InnoDB tables, making replication resilient to unexpected halts. + transaction_write_set_extraction=XXHASH64 enables the optimal method for generating write set hashes. + slave_rows_search_algorithms='INDEX_SCAN,HASH_SCAN' enables the use of a hash table to avoid repeated table scans when no Primary Key or Primary Key Equivalent (non-null unique secondary index) exists for a table + expire_logs_days=30 causes unused binary logs that are older than 30 days to be purged, ensuring storage space is used efficiently. * Replication: The Group Replication plugin now notifies other components in the server that some relevant events have happened. Upon view changes, recovery state updates, network partitioning and primary election, the plugin informs listeners registered in the service registry and notifies them that an event has occurred. These listeners, which could even be other plugins, can then react to these events. * Replication: The group_replication_member_weight variable has been added which enables you to control the election of new primaries in single-primary mode. In previous versions primary election was based on the member's UUID, with the lowest UUID elected as the new primary in the event of fail over. Use this variable to assign numeric weights to members to ensure that specific members are elected, for example during scheduled maintenance of the primary or to ensure certain hardware is prioritised. * Replication: The following new system variables have been added to configure Group Replication: + group_replication_flow_control_hold_percent + group_replication_flow_control_max_commit_quota + group_replication_flow_control_member_quota_percent + group_replication_flow_control_min_quota + group_replication_flow_control_min_recovery_quota + group_replication_flow_control_period + group_replication_flow_control_release_percent These variables enable you to fine tune flow control of individual group members, adjusting the quota depending on the task the member performs in the group. * JSON: Added support for ranges in the XPath expressions used with many MySQL JSON functions, including JSON_EXTRACT() and JSON_REMOVE(). Such a range is specified using the syntax start to end, where start and end are, respectively, the first and last indexes of a range of elements from a JSON array (always numbered starting with 0). For example, $[1 to 3] includes the second, third, and fourth elements, as shown here: mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]'); +----------------------------------------------+ | JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]') | +----------------------------------------------+ | [2, 3, 4] | +----------------------------------------------+ 1 row in set (0.00 sec) This work also provides support in such expressions for the last keyword, which you can use to represent the index of the last (rightmost) element in the current array, like this: mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last]'); +--------------------------------------------+ | JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last]') | +--------------------------------------------+ | 5 | +--------------------------------------------+ 1 row in set (0.00 sec) Indexes relative to the end of the array are also supported, as shown here: mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-4 to last-2]'); +--------------------------------------------------------+ | JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-4 to last-2]') | +--------------------------------------------------------+ | [1, 2, 3] | +--------------------------------------------------------+ 1 row in set (0.00 sec) For further information and examples, see Searching and Modifying JSON Values (http://dev.mysql.com/doc/refman/8.0/en/json.html#json-paths). (Bug #79052, Bug #22285926) * JSON: The optimizer now supports partial (in-place) updates of JSON documents when using JSON_SET(), JSON_REPLACE(), or JSON_REMOVE(). (Previously, all updates of JSON column values were done by completely removing the previous document and writing the new one in its place.) In general, this optimization can be performed when the replacement value is less than or equal in size to the column's original value, and no new elements are added to the original value. It cannot be performed for a simple replacement of the column value of the form UPDATE tbl SET json_col = json_val. The JSON Data Type (http://dev.mysql.com/doc/refman/8.0/en/json.html) provides more information about the requirements for an update to be optimized in this way. This work includes the addition of two JSON utility functions, JSON_STORAGE_SIZE() and JSON_STORAGE_FREE(), in the MySQL Server. JSON_STORAGE_SIZE() returns the number of bytes used to store the binary representation of a JSON document, whether the document is presented as a column value in a table, as the value of a user variable, or as a JSON literal. In the case of a JSON column, this is the space used to store the JSON document as it was inserted into the column, prior to any partial updates that may have been performed on it since then. JSON_STORAGE_FREE() shows the number of bytes in the binary representation of a JSON column value that were freed by the most recent partial update of the column. For a user variable storing a JSON document, JSON_STORAGE_FREE() always returns 0; it also returns 0 if the argument is a JSON literal. Each of these functions, like many other MySQL functions that act on JSON values, also accepts a string that can be successfully parsed as a JSON document. For more information and examples, see JSON Utility Functions (http://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html). * RPM .spec files now include support for running unit tests. (Bug #25814143, Bug #85743) * For Windows, MSI installer packages now include a check for the required Visual Studio redistributable package, and produce a message asking the user to install it if it is missing. (Bug #25658832) * The mysql client now supports a --binary-as-hex option that causes display of binary data using hexadecimal notation (0xvalue). Thanks to Daniƫl van Eeden for the patch. (Bug #25340722, Bug #84391) * The SHOW TABLES statement now supports an optional EXTENDED keyword that causes statement output to list hidden tables created by failed ALTER TABLE statements. (These temporary tables have names beginning with #sql.) For more information, see SHOW TABLES Syntax (http://dev.mysql.com/doc/refman/8.0/en/show-tables.html). (Bug #24786075, Bug #83241) * The mysql client by default strips comments in statements sent to the server, and this behavior is controlled using --skip-comments (strip comments), and --comments (preserve comments). Comment stripping is now deprecated. This feature and the options to control it will be removed in a future MySQL release. * The TempTable storage engine replaces the MEMORY storage engine as the default engine for in-memory internal temporary tables. The TempTable storage engine provides efficient storage for VARCHAR and VARBINARY columns. The internal_tmp_mem_storage_engine session variable defines the storage engine for in-memory internal temporary tables. Permitted values are TempTable (the default) and MEMORY. The temptable_max_ram configuration option defines the maximum amount of memory that the TempTable storage engine can use before data is stored to disk. The memory/temptable/physical_ram and memory/temptable/physical_disk Performance Schema instruments may be used to monitor TempTable memory allocation and disk storage. * The MySQL 8.0.2 release introduces a number of undo related changes: + The number of undo tablespaces may be modified at runtime or when the server is restarted using the existing innodb_undo_tablespaces configuration option. Previously, the number of undo tablespaces could only be configured when initializing the MySQL instance and could not be changed afterward. This change permits the addition of undo tablespaces and rollback segments as a database installation grows. + innodb_undo_log_truncate is enabled by default. When enabled, any undo tablespace that exceeds the threshold value defined by innodb_max_undo_log_size is marked for truncation. See Truncating Undo Logs That Reside in Undo Tablespaces (http://dev.mysql.com/doc/refman/8.0/en/truncate-undo-tablespace.html). + The innodb_undo_tablespaces default value was changed from 0 to 2, which means that rollback segments are created in two separate undo tablespaces instead of the InnoDB system tablespace by default. A minimum of two undo tablespaces is required to permit truncation of undo logs. Setting innodb_undo_tablespaces to 0 is deprecated and will not be supported in a future release. + The naming convention used for undo tablespace files is changed from undoNNN to undo_NNN, where NNN is the undo space number. + The innodb_rollback_segments configuration option defines the number of rollback segments per undo tablespace. Previously, innodb_rollback_segments was a global setting that specified the total number of rollback segments for the MySQL instance. This change increases the number of rollback segments available for concurrent transactions, and more rollback segments increases the likelihood that concurrent transactions use separate rollback segments for undo logs resulting in less resource contention. + The innodb_undo_logs configuration option is removed. The innodb_rollback_segments configuration option performs the same function and should be used instead. + The Innodb_available_undo_logs status variable is removed. The number of available rollback segments per tablespace may be retrieved using SHOW VARIABLES LIKE 'innodb_rollback_segments'; * The SHOW COLUMNS and SHOW INDEX statements now support an optional EXTENDED keyword that causes statement output to include information about hidden columns and indexes that MySQL uses internally and are not accessible by users. For more information, see SHOW COLUMNS Syntax (http://dev.mysql.com/doc/refman/8.0/en/show-columns.html), and SHOW INDEX Syntax (http://dev.mysql.com/doc/refman/8.0/en/show-index.html). [ To be continued...]
Subject
Views
Written By
Posted
MySQL Community Server 8.0.2-dmr has been released (part 1/2)
2435
July 18, 2017 01:06AM
Sorry, you can't reply to this topic. It has been closed.
Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.