這是歷史版本頁面 — 看 MySQL (64-bit) 最新版本

想學資料庫先裝哪套?MySQL 能幫你做到什麼

MySQL (64-bit) 軟體圖示 MySQL (64-bit) 5.7.11 (64-bit) 資料更新 2016-02-06 閱讀約 6 分鐘

你正在架一個網站、寫一支會存資料的程式,或學校作業要用到資料庫。你上網查「資料庫 軟體」,跑出一堆名字,每個看起來都很專業,但你其實只想知道:裝哪一套可以趕快把資料存進去、把資料撈出來,不要卡在安裝和設定。你怕選錯,更怕裝了之後才發現不適合,又要重來。

很多人第一個念頭是用 Excel 或 Google 試算表硬撐,但資料一多、要同時讓好幾個人查詢、要寫條件篩選的時候,試算表就開始卡。另一條路是直接租雲端資料庫,但每個月要付錢,對還在學習或開發階段的人來說負擔太大。這類資料庫軟體的切入點是:給你一套在本機就能跑的關聯式資料庫,用 SQL 指令跟它溝通,先解決「有地方存資料」這個根本問題。

01MySQL 到底是做什麼用的?

它是一套關聯式資料庫管理系統,用來儲存、管理、查詢資料。你可以把它想成一個放在電腦裡的資料倉庫,透過 SQL 指令建立資料表、寫入資料、下條件查詢。它本身沒有圖形介面,安裝完之後是背景服務,要另外裝管理工具才能看到資料內容。

02我完全沒碰過資料庫,這套軟體適合入門嗎?

適合,但要有心理準備。它主要透過命令列操作,你至少要會基本的 SQL 語法,例如 CREATE TABLE、SELECT、INSERT 這些指令。官方文件寫得很完整,網路上教學資源也很多,只是學習曲線比圖形介面的工具陡一些。如果你完全不想碰指令,可以搭配 MySQL Workbench 這類圖形工具使用。

03它跟 Excel 有什麼差?什麼時候該換成資料庫?

Excel 適合幾千筆以內、單人編輯、不需要複雜關聯的資料。當資料量變大、多人同時讀寫、或你要做跨表格查詢的時候,Excel 會明顯變慢且容易出錯。MySQL 用 SQL 處理查詢,效能穩定,也支援多人同時連線,適合網站、應用程式這類需要頻繁讀寫資料的場景。

04安裝過程會不會很複雜?

安裝本身不複雜,執行安裝檔、按幾個下一步就裝好了。比較需要花時間的是安裝後的設定,包括資料庫帳號密碼、存取權限、連線埠這些。官方文件有提到,安裝時可以設定資料庫選項、定義存取權限、指定儲存方式。如果你只是想先跑起來,用預設值就可以了。

05它有沒有圖形介面可以用?

軟體本身只有命令列介面,但官方文件列出了幾個第三方圖形工具,包括 phpMyAdmin、MySQL Workbench、Navicat。這些工具可以讓你用滑鼠建立資料表、執行查詢、看效能狀態,不用背指令。其中 MySQL Workbench 是 Oracle 出的免費工具,跟 MySQL 搭配使用的人很多。

06我寫程式的語言跟它合得來嗎?

官方文件說它支援多種程式語言,並提供對應的連接器,例如 Java 用 MySQL Connector/J、Python 用 MySQL Connector/Python。也就是說,你只要照官方文件把對應的驅動程式裝好,就可以從程式裡連到資料庫下 SQL 指令。PHP、C# 這些常見語言也都有社群提供的連線方式。

07這套軟體是免費的嗎?

它分成兩個版本:Community Edition 免費且開放原始碼,Enterprise Edition 要訂閱付費。免費版涵蓋大部分日常功能,但官方文件提到,即時分析、企業級技術支援這類進階功能只有在付費版才有。一般學習、開發、小型專案用免費版就夠了。

08我只會 Windows,這套軟體在我的電腦上跑得起來嗎?

可以。官方支援 Windows 7 到 Windows 11 的 64 位元系統,也支援 macOS 和 Linux。安裝時要注意你的系統是 64 位元,硬碟空間和記憶體要看資料庫大小決定,官方文件說需求會依版本和資料量而不同。

09介面是中文的嗎?

不是。軟體本身的介面是英文,安裝過程和命令列操作都是英文。如果你對英文介面不熟悉,操作上會多一層障礙。不過圖形工具 MySQL Workbench 的介面也是英文,這點要先有心理準備。網路上有大量中文教學,可以邊看邊學。

10我只是想存一些個人資料,這套會不會太重?

如果你的需求是單機、單人、資料量不大,SQLite 這類輕量資料庫可能更適合。SQLite 不需要安裝伺服器、不需要設定帳號密碼,把資料庫存成一個檔案就能用。MySQL 需要背景服務持續執行,對純個人用途來說確實比較重,但如果你之後要學網站開發,遲早會用到它。

11我聽說微軟也有免費的 SQL Server Express,跟它比起來呢?

SQL Server Express 是微軟出的免費資料庫,介面是中文的,圖形工具 SSMS 也比較完整,對 Windows 使用者來說上手門檻較低。MySQL 的優勢是跨平台、開源、社群龐大,而且網路上教學資源非常多。兩套都是免費的,你可以先裝 MySQL 試試,不習慣再換 SQL Server Express。

12這套軟體是不是很久沒更新了?

不是。根據收錄的版本紀錄,它從 2011 年至今持續有新版釋出,最近一年內更新了 3 次,最近兩年內更新了 7 次,屬於持續維護中的軟體。開發商是 Oracle,背後有商業公司在維護,不用擔心專案突然停擺。

下載與官方連結

前往官方網站 下載 MySQL (64-bit)

mysql-5.7.11-winx64.msi · 91.8 MB · 連結指向軟體原廠

版本紀錄

再看 5 筆

看完整版本清單

這一版改了什麼

What's new in this version:

Compilation Notes:
- A value of system is now permitted for the WITH_BOOST CMake option. If this option is not set or is set to system, it is assumed that the correct version of Boost is installed on the compilation host in the standard location. In this case, the installed version of Boost is used rather than any version included with a MySQL source distribution. (Bug #22224313)
- In addition to the mysql-5.7.11.tar.gz source tarball, another tarball named mysql-boost-5.7.11.tar.gz is provided. The new tarball contains everything in the first tarball, but also contains all the required Boost header files in a subdirectory named boost. This is for the benefit of those who do not have the correct Boost version installed and do not wish to or cannot download it. To build from this source distribution, add -DWITH_BOOST=boost to the CMake command line.

Data Type Notes:
- Bit functions and operators comprise BIT_COUNT(), BIT_AND(), BIT_OR(), BIT_XOR(), &, |, ^, ~, . Currently, bit functions and operators require BIGINT (64-bit integer) arguments and return BIGINT values, so they have a maximum range of 64 bits. Arguments of other types are converted to BIGINT and truncation might occur.
- A planned extension for MySQL 5.8 is to permit bit functions and operators to take binary string type arguments (BINARY, VARBINARY, and the BLOB types), enabling them to take arguments and produce return values larger than 64 bits. Consequently, bit operations on binary arguments in MySQL 5.7 might produce different results in MySQL 5.8. To provide advance notice about this potential change in behavior, the server now produces warnings for bit operations for which binary arguments will not be converted to integer in MySQL 5.8. These warnings afford an opportunity to rewrite affected statements. To explicitly produce MySQL 5.7 behavior in a way that will not change after an upgrade to 5.8, cast bit-operation binary arguments to convert them to integer. For more information and examples, see Bit Functions and Operators.

Installation Notes:
- Previously, mysqld --initialize required the data directory to not exist or, if it existed, to be empty. Now an existing data directory is permitted to be nonempty if every entry either has a name that begins with a period (.) or is named using an --ignore-db-dir option. (Bug #79250, Bug #22213873)

Security Notes:
- The linked OpenSSL library for the MySQL Commercial Server has been updated from version 1.0.1p to version 1.0.1q. Issues fixed in the new 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 #22348181)
- The default value of the default_password_lifetime system variable that controls the global password expiration policy has been changed from 360 (360 days) to 0 (no password expiration). The default of 360 sometimes took people by surprise when account passwords expired a year after upgrading to MySQL 5.7. To continue to use a value other than 0 as the password expiration, start the server with an explicit setting for default_password_lifetime.
- MySQL client programs now support an --ssl-mode option that enables you to specify the security state of the connection to the server. Permitted option values are PREFERRED (establish a secure encrypted connection if the server supports the capability, falling back to an unencrypted connection otherwise), DISABLED (establish an unencrypted connection), REQUIRED (establish a secure connection, or fail), VERFIFY_CA (like REQUIRED, but additionally verify the server certificate), VERIFY_IDENTITY (like VERIFY_CA, but additionally verify that the server certificate matches the host name to which the connection is attempted). For backward compatibility, the default is PREFERRED if --ssl-mode is not specified.
- These clients support --ssl-mode: mysql, mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlshow, mysqlpump, mysqlslap, mysqltest, mysql_upgrade.
- The --ssl-mode option comprises the capabilities of the client-side --ssl and --ssl-verify-server-cert options. Consequently, both of those options are now deprecated and will be removed in a future MySQL release. Use --ssl-mode=REQUIRED instead of --ssl=1 or --enable-ssl. Use --ssl-mode=DISABLED instead of --ssl=0, --skip-ssl, or --disable-ssl. Use --ssl-mode=VERIFY_IDENTITY instead of --ssl-verify-server-cert options. (The server-side --ssl option is not deprecated.)
- For the C API, the new MYSQL_OPT_SSL_MODE option for mysql_options() corresponds to the --ssl-mode option. The MYSQL_OPT_SSL_ENFORCE and MYSQL_OPT_SSL_VERIFY_SERVER_CERT options for mysql_options() correspond to the client-side --ssl and --ssl-verify-server-cert options. They are now deprecated and will be removed in a future MySQL release. Use MYSQL_OPT_SSL_MODE with an option value of SSL_MODE_REQUIRED or SSL_MODE_VERIFY_IDENTITY instead. In consequence of this change, the minor C API version number was incremented.
- MySQL now supports a keyring service that enables internal MySQL server components and plugins to securely store sensitive information for later retrieval. The implementation includes a keyring_file plugin that stores data in a file local to the server host.

Functionality Added or Changed:
- InnoDB: A new InnoDB configuration option, innodb_tmpdir, allows you to configure a separate temporary file directory for online ALTER TABLE operations. This option was introduced to help avoid tmpdir overflows that could occur as a result of large temporary files created during online ALTER TABLE operations. innodb_tmpdir is a SESSION variable and can be configured dynamically using a SET statement. (Bug #19183565)
- InnoDB: InnoDB now supports at-rest data encryption for InnoDB tables stored in file-per-table tablespaces. Encryption is enabled by specifying the ENCRYPTION option when creating or altering an InnoDB table. For more information, see InnoDB Tablespace Encryption.
- Replication: The log_statements_unsafe_for_binlog variable was added to provide control over whether the warnings generated by error 1592 are added to the binary log or not.
- yaSSL was upgraded to version 2.3.9. This upgrade corrects an issue in which yaSSL handled only cases of zero or one leading zeros for the key agreement instead of potentially any number, which in rare cases could cause connections to fail when using DHE cipher suites. (Bug #22361038)
- The Valgrind function signature in mysql-test/valgrind.supp was upgraded for Valgrind 3.11. (Bug #22214867)
- The audit_log plugin now produces events in the MYSQL_AUDIT_TABLE_ACCESS_CLASS class. These events are abortable. (Bug #21458192)
- The format of log output produced by mysqld_safe now is configurable using the --mysqld-safe-log-timestamps option. This option can be used to produce log timestamps in formats compatible with the server or in formats used by mysqld_safe in older versions of MySQL. For more information, see mysqld_safe — MySQL Server Startup Script. (Bug #78475, Bug #21862951)
- The mysql_kill(), mysql_list_fields(), mysql_list_processes(), and mysql_refresh() C API functions are deprecated and will be removed in a future version of MySQL. The same is true of the corresponding COM_PROCESS_KILL, COM_FIELD_LIST, COM_PROCESS_INFO, and COM_REFRESH client/server protocol commands. Instead, use mysql_query() to execute a KILL, SHOW COLUMNS, SHOW PROCESSLIST, or FLUSH statement, respectively.
- The mysql_plugin utility is deprecated and will be removed in a future version of MySQL. Alternatives include loading plugins at server startup using the --plugin-load or --plugin-load-add option, or at runtime using the INSTALL PLUGIN statement.
- Storage engines now can request notification about acquisition and release of exclusive metadata locks. As result, the LOCK_STATUS column of the metadata_locks Performance Schema table has two new status values. The PRE_ACQUIRE_NOTIFY and POST_RELEASE_NOTIFY status values are brief and signify that the metadata locking subsubsystem is notifying interested storage engines while entering lock acquisition or leaving lock release operations.

Bugs Fixed:
- InnoDB; Partitioning: When OPTIMIZE TABLE rebuilt a partitioned InnoDB table, it placed the resulting partition tablespace files (*.ibd files) in the default data directory instead of the directory specified using the DATA DIRECTORY option. (Bug #75112, Bug #20160327)
- InnoDB: InnoDB failed to update index statistics when adding or dropping a virtual column. (Bug #22469660, Bug #79775)
- InnoDB: A small InnoDB buffer pool size with a large innodb_stats_persistent_sample_pages setting resulted in a Difficult to find free blocks in the buffer pool warning. (Bug #22385442)
- InnoDB: memcached connections are blocked from accessing tables that contain an indexed virtual column. Accessing an indexed virtual column requires a callback to the server, but a memcached connection does not have access to the server code. (Bug #22384503, Bug #79691)
- InnoDB: InnoDB did not return an informative message when refusing an online ALTER TABLE operation that attempted to add an index and a virtual column. (Bug #22374827)
- InnoDB: An invalid innodb_saved_page_number_debug setting caused a server exit. (Bug #22311319, Bug #79516)
- InnoDB: InnoDB failed to free a table object when a compressed table and temporary compressed table were created in the same shared tablespace. (Bug #22306581)
- InnoDB: In Numa-related code, the size information passed to the mbind() call in the buf_chunk_init() function was incorrect. (Bug #22293530, Bug #79434)
- InnoDB: Numa support was incomplete for online buffer pool resizing operations. (Bug #22293511, Bug #79354)
- InnoDB: A SELECT COUNT(*) query that counted the results of a full-text subquery raised an assertion. (Bug #22270139)
- InnoDB: InnoDB passed a buffer with an incorrect TINYBLOB data length for a virtual column, resulting in a purge thread failure. (Bug #22256752)
- InnoDB: A purge failure occurred while deleting data from a table that contained a spatial index. (Bug #22230442)
- InnoDB: An assertion was raised when purge accessed a freed page while attempting to rebuild virtual column data from the clustered index. (Bug #22204260)
- InnoDB: Only prefix bytes were logged for an indexed virtual column, resulting in an a Clustered record for sec rec not found error. (Bug #22202788)
- InnoDB: A small buffer pool with an innodb_page_size setting of 64K could cause startup, bootstrap, and recovery failures. (Bug #22179133, Bug #79201)
- InnoDB: Unreachable code that checks for 32-bit file offsets was removed. (Bug #22163880, Bug #79150)
- InnoDB: A slow shutdown failure was caused by background threads adding undo records to the purge history list during or after purge thread exit. (Bug #22154730)
- InnoDB: The InnoDB purge thread died attempting to purge a virtual column index record that was not delete-marked. (Bug #22141031)
- InnoDB: In debug builds, an ALTER TABLE operation that increased the column length of a virtual column raised an assertion. (Bug #22139917)
- InnoDB: ut_allocator prepended the allocation payload with a 12-byte header on 32-bit systems, causing unaligned memory access. On 32-bit SPARC systems, the unaligned memory access caused a crash during bootstrap. (Bug #22131684)
- InnoDB: In debug builds, an ALTER TABLE operation that added a new virtual column before an existing virtual column raised an assertion. (Bug #22123674, Bug #22111464)
- InnoDB: InnoDB startup messages related to dumping and loading of the buffer pool were improved. (Bug #22096661, Bug #78960)
- InnoDB: Creating a table with a full-text index and a foreign key constraint failed when foreign_key_checks was disabled. (Bug #22094601, Bug #78955)
- References: This bug is a regression of Bug #16845421.
- InnoDB: Support was enabled for ALGORITHM=INPLACE operations that add an index on an existing virtual column while dropping another virtual column. Support was also enabled for ALGORITHM=INPLACE operations that add a virtual column and an index. When adding an index on a newly-added virtual column, purge now skips the uncommitted virtual index. (Bug #22082762)
- InnoDB: The wrong table object was used to compute virtual column values for a query that accessed multiple instances of the same table. (Bug #22070021)
- InnoDB: A purge thread failure occurred when inserting and deleting spatial data. The child page number field was not stored during the R-tree search stage. (Bug #22027053)
- InnoDB: Starting the server with an empty innodb_data_home_dir entry in the configuration file caused InnoDB to look for the buffer pool file in the root directory, resulting in a startup error. (Bug #22016556, Bug #78831)
- InnoDB: A failure to compute virtual column values caused an excessive number of error messages. (Bug #21968375)
- InnoDB: An INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX query raised an assertion. A dictionary mutex was taken while InnoDB populated an in-memory heap table. The mutex was not released before InnoDB attempted to convert the in-memory heap table to an optimized internal temporary table. (Bug #21950756, Bug #78714)
- InnoDB: To avoid a potential hang and redo log overwrite, the innodb_log_file_size minimum value was increased from 1MB to 4MB, and the length calculation in log_margin_checkpoint_age() was revised. (Bug #21924224, Bug #78647)
- InnoDB: A full-text query run under high concurrency caused a server exit due to an invalid memory access. (Bug #21922532)
- InnoDB: An ALTER TABLE operation on a table partitioned across multiple tablespaces moved existing partitions to the table's default tablespace, resulting in an assertion on SHOW CREATE TABLE. Likewise, ALTER TABLE tbl_name TABLESPACE tablespace_name moved existing partitions to the named tablespace. Only ALTER TABLE ... REORGANIZE PARTITION should move existing partitions to the table's default tablespace or to a named tablespace. Running ALTER TABLE tbl_name TABLESPACE tablespace_name on a table partitioned across multiple tablespaces should only change the table's default tablespace. (Bug #21914047, Bug #22124042, Bug #79030)
- InnoDB: With a large innodb_sort_buffer_size setting, adding an index on an empty table performed more slowly than expected. (Bug #21762319, Bug #78262)
- InnoDB: A race condition occurred between fil_names_write() and file_rename_tablespace_in_mem(). (Bug #21549928)
- InnoDB: Purge attempted to access undo pages that were freed by a preceding undo log truncate operation, resulting in an assertion. (Bug #21508627)
- InnoDB: InnoDB did not return an informative message when refusing an online ALTER TABLE operation on a table with a spatial index. (Bug #20111575)
- InnoDB: A compiler barrier was added to ut_relax_cpu(). The ut_always_false dummy global variable was removed from ut_delay(). (Bug #20045167, Bug #74832)
- InnoDB: Incorrect index values were returned while dropping a virtual column. The altered table object was used to evaluate virtual column values. (Bug #79773, Bug #22469459)
- References: This bug is a regression of Bug #22082762.
- Partitioning: Subquery scans on partitioned tables with virtual columns could leak memory. (Bug #79145, Bug #22162200)
- Replication: When a slave was configured with log_bin=OFF, the applier (SQL) thread was failing to correctly roll back partial transactions left in the relay log. The fix ensures that on reconnection, the applier thread correctly rolls back a partial transaction and starts applying it again from the next relay log file. (Bug #21691396)
- Replication: The behavior of SET GTID_PURGED was not consistent between version 5.6 and 5.7. The fix ensures that version 5.7 does not initiate a transaction for SET GTID_PURGED statements. (Bug #21472492)
- Replication: When DML invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column, that DML has to be marked as an unsafe statement. If the tables are locked in the transaction prior to the DML statement (for example by using LOCK TABLES), then the DML statement was not being marked as an unsafe statement. The fix ensures that such DML statements are marked correctly as unsafe. (Bug #17047208)
- Replication: If pseudo_slave_mode was set to 1 while an XA transaction was in the prepare stage, an assert was generated. The fix ensures that changes from 0 to 1 can be made during XA transactions. Note that this variable is solely for internal use by the server. (Bug #79416, Bug #22273964, Bug #78695, Bug #21942487)
- Replication: If the server stopped unexpectedly immediately before committing an XA transaction which had been prepared, and the transaction modified the mysql.gtid_executed table, then the subsequent recovery aborted due to an innodb_lock_wait_timeout error when it was reading the mysql.gtid_executed table. To fix the problem, XA transactions are no longer permitted to modify the mysql.gtid_executed table. (Bug #77740, Bug #21452916)
- Replication: As part of the fix for Bug #16290902, when writing a DROP TEMPORARY TABLE IF EXISTS query into the binary log, the query is no longer preceded by a USE `db` statement. Instead the query uses a fully qualified table name, for example DROP TEMPORARY TABLE IF EXISTS `db`.`t1`;. This changed the application of replicate-rewrite-db filter rules, as they work only on the default database specified in a USE statement. This caused slaves to fail when the resulting CREATE TEMPORARY TABLE was applied. The fix ensures that at the time of writing a DROP TEMPORARY TABLE IF EXISTS query into the binary log, a check is made for the default database. If it exists then the query is written as USE default_db in the binary log. If a default database is not present then the query is logged with the qualified table name. (Bug #77417, Bug #21317739)
- Replication: If generating a GTID for a transaction fails, the transaction is not written to the binary log but still gets committed. Although running out of GTIDs is a rare situation, if it did occur an error was written to the binary log as a sync stage error. With binlog_error_action=ABORT_SERVER, the server aborts on such an error, avoiding data inconsistency. When binlog_error_action=IGNORE_ERROR, the server continues binary logging after such an error, potentially leading to data inconsistency between the master and the slave. The fix changes the error to be correctly logged as a flush stage error. (Bug #77393, Bug #21276661)
- Replication: When using --gtid-mode=on , --enforce-gtid-consistency , and --binlog-format=row, if a user defined function with multiple DROP TEMPORARY TABLE statements was executed on a master, the resulting binary log caused an error on slaves. The fix ensures that stored functions and triggers are also considered multi-statement transactions, and that when --enforce-gtid-consistency is enabled, functions with CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE statements generate an ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION error. (Bug #77354, Bug #21253415)
- Replication: Stored procedure local variables that were used in an ALTER EVENT statement were not being replicated correctly. This was related to the fact that CALL statements are not written into the binary log. Instead each statement executed in a stored procedure is binary logged separately, with the exception that the query string is modified so that uses of stored procedure local variables are replaced with NAME_CONST('spvar_name', 'spvar-value') calls. DDL statements (which are always binary logged in statement binary log mode irrespective of the current binary log format) can also use stored procedure local variables and a clash could cause them to not be replicated correctly. The fix ensures that any stored procedure local variables used in a query are replaced with NAME_CONST(...), except for the case when it is a DML query and the binary log format is ROW. (Bug #77288, Bug #21229951)
- Replication: DROP TABLE statements are regenerated by the server before being written to the binary log. If a table or database name contained a non-regular character, such as non-latin characters, the regenerated statement was using the wrong name, breaking replication. The fix ensures that in such a case the regenerated name is correctly converted back to the original character set. Also during work on this bug, it was discovered that in the rare case that a table or database name contained 64 characters, the server was throwing an assert(M_TBLLEN < 128) assertion. The assertion has been corrected to be less than or equal 128. (Bug #77249, Bug #21205695)
- References: See also Bug #78036, Bug #22261585, Bug #21619371.
- Replication: Irrespective of the current binlog_format setting, DDL that changes metadata on a master is always identified and written to the binary log in STATEMENT format. Such DDL could occur from event based SQL statements, such as CREATE EVENT or DROP EVENT, or transactions that had unsafe functions such as sysdate(). When binlog_format=MIXED and attempting to replicate such DDL, it was not being correctly identified and therefore was not being correctly replicated. (Bug #71859, Bug #19286708)
- The System-V initialization script for RHEL6 or older failed to enable the mysqld service by default. (Bug #22600974)
- Some activations of triggers that referenced a NEW value inside a query might cause a server exit. (Bug #22377554)
- Parsing the output of ST_GeometryType() as a DATETIME value with a default character set of utf32 caused a server exit. (Bug #22340858)
- For a character set loaded from an XML file, the server could fail to properly initialize its state map, leading to a server exit. (Bug #22338946)
- Inserting a token of 84 4-byte characters into a full-text index raised an assertion. The maximum token length was 84 characters up to a maximum of 252 bytes, which did not account for 4-byte characters. The maximum byte length is now 336 bytes. (Bug #22291765, Bug #79475)
- For some combination of consumers, the Performance Schema prepared statement instrumentation could cause a server exit. (Bug #22291560)
- If a client attempted to use an unsupported client character set (ucs2, utf16, utf32), the error message reported to the client differed for SSL and non-SSL connections. (Bug #22216715)
- Data corruption or a server exit could occur if a stored procedure had a variable declared as TEXT or BLOB and data was copied to that variable using SELECT ... INTO syntax from a TEXT or BLOB column. (Bug #22203532, Bug #22232332, Bug #21941152)
- For debug builds, with the ONLY_FULL_GROUP_BY SQL mode disabled, the optimizer could attempt to sort on outer references, causing an assertion to be raised. (Bug #22200984)
- Different handling of YEAR values for INSERT and SELECT could raise an assertion when such values were used in a generated-column expression. (Bug #22195458)
- For debug builds, for queries involving MIN() or MAX() on an indexed column and a reference to an unindexed datetime column, the optimizer could attempt to access unread values, causing an assertion to be raised. (Bug #22186926)
- Geohash decoding (for example, for ST_LongFromGeoHash(), ST_LatFromGeoHash(), and ST_PointFromGeoHash()) could yield incorrect results due to the rounding algorithm being too aggressive. (Bug #22165582)
- In debug builds, with READ UNCOMMITTED transaction isolation level, a SELECT reading a generated column using an index could raise an assertion. (Bug #22133710)
- For generated columns, the optimizer could fail to establish the proper table reference, resulting in a server exit. (Bug #22132822)
- For some combination of consumers, the Performance Schema file instrumentation could fail due to an attempt to use a NULL pointer while instrumenting temporary file I/O. (Bug #22130453)
- The Performance Schema could raise an assertion based on the (incorrect) assumption that instrumenting a temporary file open operation always resulted in an instrumented file. (Bug #22118669)
- An ALTER TABLE statement that added an index on a virtual generated column using the INPLACE algorithm did not properly report warnings (or errors in strict SQL mode) for problems with virtual column values. Any subsequent ALTER TABLE on the same table using the COPY algorithm produced such warnings (or failures in strict SQL mode) due to evaluating the problematic value, but left the connection in a state that made further INPLACE alterations on the table fail for the same reason. (Bug #22095783)
- If the left expression of an IN expression was a row subquery that accesses no tables, an assertion could be raised (in debug builds), or incorrect results could be returned (in release builds). (Bug #22089623)
- Expressions that match an indexed generated column may be replaced with the generated column by the optimizer to enable use of the associated index. However, this optimization was not performed for single-table update and delete statements. The optimizer now extends this replacement optimization to such statements. (Bug #22077611)
- ANSI SQL mode could cause inconsistencies in processing of generated column expressions. (Bug #22018979)
- Removal of server session plugins was faulty and could cause a server exit. (Bug #21983102)
- For some queries, if the optimizer used Disk-Sweep Multi-Range Read optimization on generated columns, the server could exit. (Bug #21980430)
- mysqlpump tries to do as much work in parallel as possible, but the dump threads lacked a synchronization point before backing up the data, resulting in inconsistent backup. mysqlpump now locks the server and flushes all the tables using FLUSH TABLES WITH READ LOCK to ensure that any further connections view the same state of all the databases.
- This change lifts the restriction aginst the --single-transaction option being mutually exclusive with parallelism. When using --single-transaction, it is no longer necessary to disable parallelism by setting --default-parallelism to 0 and not using any instances of --parallel-schemas. (Bug #21980284)
- A fault in pthread_rwlock_unlock() wherein it decremented the lock counter even for already unlocked objects could result in deadlock. (Bug #21966621)
- The Performance Schema could acquire a double lock on session system variables, causing a server hang or (in debug builds) an assertion to be raised. (Bug #21935106)
- Certain queries containing WHERE 0 of the following form could cause a server exit due to uninitialized reads: SELECT (SELECT col AND constant FROM t WHERE 0) IN (SELECT constant FROM t1). (Bug #21922202)
- CREATE TEMPORARY TABLE .. SELECT statements involving BIT columns that resulted in a column type redefinition could cause a server exit or an improperly created table. (Bug #21902059)
- For UPDATE operations on InnoDB tables, there could be a mismatch between the value of a virtual generated column in the index and the value in the “before” buffer, resulting in a server exit. (Bug #21875520)
- With character_set_server=utf16le, some values of ft_boolean_syntax could cause a server exit for full-text searches. (Bug #21631855)
- With gtid_mode=ON, concurrent execution of SHOW TABLE STATUS and REVOKE ALL PRIVILEGES could lead to deadlock in there was a view in the database and REVOKE ALL PRIVILEGES failed for some but not all of the named users. (Bug #21463167)
- mysqlpump could exit due to incorrect synchronization of view-handling threads during dump processing. (Bug #21399236, Bug #21447753)
- With LOCK TABLES in force, an attempt to open a temporary MERGE table consisting of a view in its list of tables (not the last table in the list) caused a server exit. (Bug #20691429)
- For certain prepared statements, the optimizer could transform join conditions such that it used a pointer to a temporary table field that was no longer available after the initial execution. Subsequent executions caused a server exit. (Bug #19941403)
- Repeated execution of ALTER TABLE v1 CHECK PARTITION as a prepared statement, where v1 is a view, led to a server exit.
- In addition, output for some administrative operations, when they are attempted on a view, changes from “Corrupt” to “Operation failed”. These include ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE, and ALTER TABLE statements that perform ANALYZE PARTITION, CHECK PARTITION, OPTIMIZE PARTITION, and REPAIR PARTITION operations. (Bug #19817021)
- Valgrind detected some possibly unsafe use of string functions in code used for asymmetric encryption. (Bug #19688135)
- An out-of-memory failure in join buffer allocation could lead to incorrect results for multiple-table queries. (Bug #19031409)
- SSL connections ignored any change made by passing the MYSQL_OPT_READ_TIMEOUT option to the mysql_options() C API function. (Bug #17618162)
- For ALTER TABLE statements, the parser did not support the ALGORITHM clause for some operations involving tablespaces or partitions. (Bug #17400320)
- Debian packages create the root user account using the auth_socket authentication plugin to achieve secure-by-default installation if installation was done with a blank root password. However, auth_socket was being used even if the password was not blank. (Bug #80137, Bug #22594846)
- Solaris packages failed to note the dependency of the MySQL client library on the libstlport library. (Bug #79778, Bug #22504264)
- Thread handle resource leakage could occur when creating threads for handling connections on Windows, which could lead to Windows servers eventually running out of handles. (Bug #79714, Bug #22455198)
- Using systemd to start mysqld failed if configuration files contained multiple datadir lines. Now the last datadir line is used. (Bug #79613, Bug #22361702)
- A derived table contained in the SET clause of an UPDATE statement should be materialized to avoid an error about updating a table that is also read in the same statement. Materialization did not occur for some statements, leading to that error. (Bug #79590, Bug #22343301)
- MySQL 5.7.8 prohibited references to select list columns of the outer query from the HAVING clause of a correlated subquery in the inner query because they are not permitted by standard SQL. However, because this is a frequently used extension, it is once again permitted. (Bug #79549, Bug #22328395)
- References: This bug was introduced by Bug #19823076.
- Installing just shared libraries, clients, and development support files failed to install everything needed to build client applications because the binary_log_types.h header file was not installed. (Bug #79531, Bug #22321338)
- SHOW CREATE TRIGGER could fail to display all applicable SQL modes. (Bug #79526, Bug #22313133)
- On SELinux, mysqld --initialize with an --init-file option could fail to initialize the data directory. (Bug #79442, Bug #22314098, Bug #79458, Bug #22286481)
- Syntax checks were not always performed when an ALTER TABLE statement changed a column's type from TEXT to JSON. This could lead to JSON columns containing invalid JSON data. This issue was observed when the original TEXT column used the utf8mb4_bin collation. (Bug #79432, Bug #22278524)
- Hexadecimal and bit literals written to saved view definitions could be truncated. This could also affect extended EXPLAIN output. (Bug #79398, Bug #22268110)
- ST_Buffer() returned an error for geometries with an SRID different from 0. Nonzero SRID values now are permitted but ignored (calculations are still done using Cartesian coordinates). (Bug #79394, Bug #22306745)
- A regression caused failure of the workaround at Restrictions on Subqueries for avoiding ER_UPDATE_TABLE_USED errors when referencing the same table in a subquery as was used as target for an UPDATE or DELETE statement. (Bug #79333, Bug #22239474)
- Statements causing multiple parse errors could cause an assertion to be raised. (Bug #79303, Bug #22222013)
- Some queries with derived tables perform better with materialization than when merged into the outer query. The optimizer no longer uses merging by default for derived tables containing dependent subqueries in the select list. (Bug #79294, Bug #22223202)
- ALTER USER and SET PASSWORD did not work at server startup when invoked in the file named using the --init-file option. (Bug #79277, Bug #22205360)
- When not in strict SQL mode, attempts to implicitly insert NULL into a NOT NULL column resulted in different behavior depending on whether the table had a trigger. (Bug #79266, Bug #22202665)
- Some replication-only code was not protected with #ifdef and failed to compile with the WITH_UBSAN CMake option enabled. (Bug #79236, Bug #22190632)
- Configuring MySQL with the -DWITH_UBSAN=ON CMake option resulted in spurious runtime warnings from comp_err. These are now suppressed. Also, a CMake warning was added that undefined behavior address sanitizer support is currently experimental. (Bug #79230, Bug #22190656)
- INSERT INTO ... SELECT statements could insert values other than DEFAULT into generated columns. (Bug #79204, Bug #22179637)
- With the derived_merge flag of the optimizer_switch system variable enabled, queries that used a derived table on the inner side of an outer join could return incorrect results. (Bug #79194, Bug #22176604)
- Memory leaks in libmysqld were corrected. (Bug #79187, Bug #22174219)
- FOUND_ROWS() could return a negative value if the preceding query was a UNION involving SQL_CALC_FOUND_ROWS and LIMIT ... OFFSET. (Bug #79131, Bug #22155786)
- IN-to-EXISTS subquery transformation could cause SELECT NULL IN (subquery) to return 0 rather than NULL.
- IN-to-EXISTS subquery transformation could yield incorrect results for queries for which the table was nonempty, the subquery on the left side of the IN predicate produced an empty result, and semi-join optimization was disabled. (Bug #78946, Bug #22090717, Bug #19822406)
- The result from WEIGHT_STRING() could be incorrect when used in a view. (Bug #78783, Bug #21974321)
- If server was started with --thread-handling=no-threads, no foreground thread was created for a client connection. The Performance Schema did not account for the possibility of no foreground threads for queries on the session_connect_attrs table, causing an assertion to be raised. (Bug #78292, Bug #21765843)
- mysqlpump generated incorrect INSERT statements for tables that had generated columns. (Bug #78082, Bug #21650559)
- ALTER TABLE ... CONVERT TO CHARACTER SET operations that used the INPLACE algorithm were ineffective if the table contained only numeric data types. Also, such operations failed to clean up their temporary .frm file. (Bug #77554, Bug #21345391)
- Heavy SHOW PROCESSLIST or SELECT ... FROM INFORMATION_SCHEMA.PROCESSLIST activity could result in the server accepting more than max_connections connections. (Bug #75155, Bug #20201006)
- When used with the libmysqld embedded server, the mysql_stmt_execute() C API function failed with a malformed communication packet error, even for simple prepared statements. (Bug #70664, Bug #17883203)
- Queries using SUM(DISTINCT) could produce incorrect results when there were many distinct values. (Bug #56927, Bug #11764126, Bug #79648, Bug #22370382)