What Is the FileHippo Safety Guarantee?
# Functionality Added or Changed
- mysql_upgrade now verifies that the server version matches the version against which it was compiled, and exits if there is a mismatch. In addiion, a --version-check option permits specifying whether to enable version checking (the default), or disable checking if given as --skip-version-checking.
# Bugs Fixed
- Important Change; Replication: When the server was running with --binlog-ignore-db and SELECT DATABASE() returned NULL (that is, there was no currently selected database), statements using fully qualified table names in dbname.tblname format were not written to the binary log. This was because the lack of a currently selected database in such cases was treated as a match for any possible ignore option rather than for no such option; this meant that these statements were always ignored. Now, if there is no current database, a statement using fully qualified table names is always written to the binary log.
- InnoDB: After a clean shutdown, InnoDB does not check .ibd file headers at startup. As a result, in a crash recovery scenario, InnoDB could load a corrupted tablespace file. This fix implements consistency and status checks to avoid loading corrupted files.
- InnoDB: The page_zip_available function would count some fields twice.
- InnoDB: In debug builds, an insert would fail with an invalid assertion: sync_thread_levels_g(array, level - 1, TRUE).
- InnoDB: Multiple concurrent calls to dict_update_statistics() would result in unnecessary server load.
- InnoDB: Crash recovery would fail with a !recv_no_log_write assertion when reading a page.
- InnoDB: When calling the lock_rec_block_validate() function after releasing the kernel mutex, there is a chance the lock might be invalid and result in a Valgrind error due to an invalid read on lock->index. This fix copies the lock->index when the kernel mutex is being held and passes the lock->index to lock_rec_block_validate().
- InnoDB: When a transaction is in READ COMMITTED isolation level, gap locks are still taken in the secondary index when a row is inserted. This occurs when the secondary index is scanned for duplicates. The function row_ins_scan_sec_index_for_duplicate() always calls the function row_ins_set_shared_rec_lock() with LOCK_ORDINARY irrespective of the transaction isolation level. This fix modifies the row_ins_scan_sec_index_for_duplicate() function to call row_ins_set_shared_rec_lock() with LOCK_ORDINARY or LOCK_REC_NOT_GAP, based on the transaction isolation level.
- InnoDB: Starting mysqld with --innodb_log_buffer_size=50GB failed to allocate memory and returned NULL. For non-debug builds there was no check in place and a segmentation fault occurred. This fix adds a log message stating that memory failed to be allocated, and adds an assertion.
- InnoDB: When UNIV_DEBUG is enabled in debug builds, buf_validate() is often called which sometimes results in false alarms in tests on semaphore wait timeout. This fix increases counter values to reduce false alarms.
- InnoDB: The explain_filename function, which provides information about a partition by parsing the file name, would return an error when attempting to parse a file name with no partition information.
- InnoDB: For UPDATE statements in which an error occurred, it was possible for a temporary file opened during the update not to be closed.
- InnoDB: An overflow would occur for innodb_row_lock_time_max and innodb_row_lock_current_waits. This fix modifies code logic in storage/innobase/srv/srv0srv.c.
- Replication: Point-in-time recovery could fail when trying to restore a single database from a binary log in row-based format using mysqlbinlog with the --database option.
- Replication: When used with the options --dump-slave --include-master-host-port, mysqldump printed the port number within quotation marks, as if it were a string value rather than an integer.
- Replication: Running the server with both the --log-slave-updates and --replicate-wild-ignore-table options in some cases caused updates to user variables not to be logged.
- Replication: Following disconnection from the master, the slave could under certain conditions report erroneously on reconnection that it had received a packet that was larger than slave_max_allowed_packet, causing replication to fail.
- Replication: When semisynchronous replication was enabled, the automatic dropping on the master of an event created using ON COMPLETION NOT PRESERVE caused the master to fail.
- Replication: Setting a SET column to NULL inside a stored procedure caused replication to fail.
- Replication: The binary log contents got corrupted sometimes, because the function MYSQL_BIN_LOG::write_cache always thought it had reached the end-of-cache when the function my_b_fill() reported a '0,' while that could also mean an error had occurred. This fix makes sure that whenever my_b_fill() returns a '0,' an error check is performed on info->error.
- Replication: When replicating to a BLACKHOLE table using the binary logging format, updates and deletes cannot be applied and so are skipped. Now a warning is generated for this whenever it occurs. Note : binlog_format=STATEMENT is recommended when replicating to tables that use the BLACKHOLE storage engine.
- The WKB reader for spatial operations could fail and cause a server exit.
- EXPORT_SET() or MAKE_SET() with many COUNT(*) arguments could cause a server exit.
- Several scripts in the sql-bench directory that were supposed to be executable did not have the executable access bit set.
- For debug builds, DBUG_EXPLAIN resulted in a buffer overflow when the debug system variable value was more than 255 characters.
- thread_pool_high_priority_connection could not be set at server startup.
- Oracle RPM packages were unusable by yum due to issues with the obsoletes line in the .spec file causing yum to interpret the package as obsoleting itself.
- A GROUP_CONCAT() invocation containing subquery having an outer reference caused the server to exit.
- For debug builds, GROUP_CONCAT(... ORDER BY) within an ORDER BY clause could cause a server exit.
- If loose index scan was used on a query that used MIN(), a segmentation fault could occur.
- If multiple statements were sent in a single request, the audit log plugin logged only the last one. Now it logs each statement separately.
- A prepared statement that used GROUP_CONCAT() and an ORDER BY clause that named multiple columns could cause the server to exit.
- ORDER BY MATCH ... AGAINST could cause a server exit.
- When a partition is missing, code in ha_innodb.cc would retry 10 times and sleep for a microsecond each time while holding LOCK_open. The retry logic for partitioned tables was introduced as a fix but did not include a test case to validate it. This fix removes the retry logic for partitioned tables. If the problem reported reappears, a different solution will be explored.
- The mysql.server script exited with an error if the status command was executed with multiple servers running.
- A query with a union and a join could crash the parser.
- Installation using Solaris packages ran mysql_install_db during upgrade operations (this should occur only for new installations).
- When processing row-based-replication events in the old binary log format from prior to MySQL 5.1 GA builds, mysqlbinlog could result in out-of-bounds heap buffer reads and undefined behaviour.
- The mysql client allocated but did not free a string after reading each line in interactive mode, resulting in a memory leak.
- INSERT ... ON DUPLICATE KEY UPDATE on a view could cause a server exit.
- Grouping by an outer BLOB column in a subquery caused a server exit.
- The server could exit due to improper handling of the error from an invalid comparison.
- The CMake check for unsigned time_t failed on all platforms.
- On 64-bit Mac OS X systems, CMake used x86 rather than x86_64 when determining the machine type.
- The parser rejected legal queries that involved a UNION where the right hand side query term has a table in parenthese.
- The url columns in the mysql datatbase help tables were too short to hold some of the URLs in the help content. For new installations, these columns are now created as type TEXT to accommodate longer URLs. For upgrades, mysql_upgrade does not update the columns. Modify them manually using these statements:
ALTER TABLE mysql.help_category MODIFY url TEXT NOT NULL;
ALTER TABLE mysql.help_topic MODIFY url TEXT NOT NULL;
- If Loose Index Scan was used to evaluate a query that compared an integer column to an integer specified as a quoted string (for example, col_name = '1'), the query could return incorrect results.
- IF() function evaluations could produce different results when executed in a prepared versus nonprepared statement.
- It is now possible to suppress installation of the mysql-test directory after compiling MySQL from source by invoking CMake with the INSTALL_MYSQLTESTDIR option explicitly set to empty: cmake . -DINSTALL_MYSQLTESTDIR= Previously, attempts to do this resulted in an error.
- Using range access with an index prefix could produce incorrect results.
- MD5() code did not properly initialize one of its data structures.
- When specified in an option file, the plugin-dir client option was ignored.
- If an UPDATE containing a subquery caused a deadlock inside InnoDB, the deadlock was not properly handled by the SQL layer. The SQL layer then tried to unlock the row after InnoDB rolled back the transaction, raising an assertion inside InnoDB.