-
Notifications
You must be signed in to change notification settings - Fork 446
Change History
- Changes in Twitter MySQL 5.5.35.t14.1 (19 March 2014)
- Changes in Twitter MySQL 5.5.35.t14 (6 February 2014)
- Changes in Twitter MySQL 5.5.34.t13 (15 November 2013)
- Changes in Twitter MySQL 5.5.33.t12 (26 August 2013)
- Changes in Twitter MySQL 5.5.31.t11.1 (21 June 2013)
- Changes in Twitter MySQL 5.5.31.t11 (7 June 2013)
- Changes in Twitter MySQL 5.5.29.t10.1 (12 March 2013)
- Changes in Twitter MySQL 5.5.29.t10 (04 February 2013)
- Changes in Twitter MySQL 5.5.28.t9 (04 January 2013)
- Changes in Twitter MySQL 5.5.28.t8 (13 November 2012)
- Changes in Twitter MySQL 5.5.24.t7 (25 July 2012)
- Changes in Twitter MySQL 5.5.23.t6.1 (20 June 2012)
- Changes in Twitter MySQL 5.5.23.t6 (11 June 2012)
- Changes in Twitter MySQL 5.5.22.t5 (24 April 2012)
- Changes in Twitter MySQL 5.5.21.t4 (06 March 2012)
- Changes in Twitter MySQL 5.5.20.t3 (06 February 2012)
- Changes in Twitter MySQL 5.5.19.t2 (06 January 2012)
- Changes in Twitter MySQL 5.5.19.t1 (06 December 2011)
- Changes in Twitter MySQL 5.5.19 (16 November 2011)
- Changes in Twitter MySQL 5.5.18 (24 October 2011)
- Server crash in Percona userstat
This change fixes a NULL pointer reference in Percona userstat code.
Beginning with Twitter MySQL 5.5.35.t14, we enable SSL support with the system OpenSSL library.
- User statistics
This change ports Percona's userstat patch that include user statistics, table statistics, index statistics, thread statistics, and client statistics. All are accessible as information schema tables.
- Extend Twitter query statistics with row operations
This change adds rows_sent and rows_examined to Twitter query statistics.
- Add user@host annotation to binlog event metadata
This change adds a new system variable binlog_write_user_info control whether user@host annotation is written to binlog. This functionality is intended for use by mysqlbinlog on MySQL slaves.
- Expose max number of concurrently running threads
This change adds a new status variable Thread_running_max that tracks the max number of running threads since last execution of SHOW STATUS. It complements status variable Thread_running in capturing dynamic workload.
- Expose the number of insert/upsert that are no-op
This changes adds a new status variable com_insert_noop that tracks the number of insert/upsert statements that does not insert or update any row.
This change throws a warning for ALTER TABLE statements that attempt to modify a primary key column to nullable.
- Server crash in Twitter audit logging mode
This change fixes Twitter audit logging code that didn't handle consecutive query strings separated by semi-colon in load file buffer.
Beginning with Twitter MySQL 5.5.34.t13, we no longer support embedded MySQL server library.
- Crash Resistant Replication Slaves
This change ports Percona's crash resistant replication functionality. It makes replication relay log position transactional with respect to replication slave relay log application. The transactional relay info will overwrite relay-log.info at crash recovery time and therefore increase MySQL 5.5 replication reliability. Due to implementation, the change adds a limitation (480 characters) on the length of binary or relay log file names.
- IPv6 SQL Functions
This change backports from MySQL 5.6 the following SQL functions INET6_ATON, INET6_NTOA, IS_IPV4, IS_IPV6, IS_IPV4_COMPAT, IS_IPV4_MAPPED.
- CVE-2012-5627 Reuse of SALT during multiple change_user executions.
This change ports a fix from Percona to eliminate the security vulnerability by disallowing repeated change user command executions in the same connection.
Update future_group_master_log_pos correctly in Xid_log_event. It fixes a known issue that Innodb_mysql_master_log_pos appears to be one event behind the actual last committed event.
- Twitter Query Type Statistics
This change adds new system variable --twitter_query_stats to support Twitter query type statistics. This feature collects runtime statistics at query level, and it allows DBA to have better understanding of applications workload.
- Configurable reserved superuser connections.
This change adds a global variable --superuser_connections to support configurable number of reserved connections for superusers.
- Expose global rows_sent and rows_examined statistics.
This change adds two global status variables rows_sent and rows_examined. They expose the total number of table rows that have been sent to clients or examined by MySQL.
- Improve InnoDB deadlock report.
This change adds plugin API to allow InnoDB to print more information about deadlock transactions.
-
Export InnoDB row searches statistics.
This change adds two new status variables Innodb_rows_search_btree_index and Innodb_rows_search_hash_index. They expose InnoDB global stats of B+-tree row searches and adaptive hash index searches.
-
Optimizer partition map should include timestamp-based partition endpoint.
On table partitioned on timestamp using UTC_EXTRACT(YMD) function, query optimizer's used partition map didn't include the partition endpoint for predicate such as "(rows_created_at > '2013-07-01 13:55:00')". Miss the time partition endpoint would cause wrong query result. This fix corrects UTC_EXTRACT end point implementation.
-
Twitter audit logging.
This change adds new system variable --twitter_audit_logging to support Twitter DBA audit logging. A new system privilege IGNORE LOGGING can be used to exempt a granted user from activity logging in the error log.
-
A non-blocking NO_WAIT mode for lock table.
This change adds NO_WAIT clause to lock table syntax. Conflicting table metadata lock requests on a table locked in the non-blocking NO_WAIT mode will be aborted immediately.
-
IF EXISTS clause for drop user.
This change adds IF EXISTS clause to drop user syntax. With IF EXISTS clause, drop user command will log a warning instead of raising error, if the user does not exist.
-
Information schema space statistics table extension.
This change adds InnoDB tablespace file extension stats, EXTEND_REQS and EXTEND_BYTES, to INNODB_SPACE_STATS table.
-
Export InnoDB thread concurrency queue info.
This change adds two new status variables Innodb_thread_concurrency_active and Innodb_thread_concurrency_waiting. They expose InnoDB thread concurrency FIFO queue status.
-
[Bug#68869: InnoDB's thread concurrency tickets might be released after a row is read] (http://bugs.mysql.com/bug.php?id=68869)
-
[Bug#68876: Disabling innodb_thread_concurrency might cause queries to hang] (http://bugs.mysql.com/bug.php?id=68876)
-
[Bug#67983: Memory leak on filtered slaves] (http://bugs.mysql.com/bug.php?id=67983)
Deferred events container maintenance fix to avoid memory leak on random event objects.
See also Changes in MySQL 5.5.29 for changes in the upstream release.
-
Bug#68051: Killing a query inside InnoDB causes it to eventually crash with an assertion
Killing a query that is inside InnoDB searching for a row causes InnoDB to crash with an assertion failure the next time the same table/cursor instance is used again.
This is a regression introduced by the fix for Bug#14704286 (66c9023). The solution is to simply revert the original fix.
-
Revert MySQL revision f8a5acc (and any subsequent related changes).
The fix for Bug#14548159 (Numerous cases of incorrect identifier quoting in replication) introduced a regression that breaks statement-based replication by generating statements with malformed quoting, which will cause a slave to stop since such statements cannot be parsed.
-
Expose operations counters per table.
This change introduces a set of per table statistics counters for handler operations. The counters are incremented for each specific operation on a handler instance and once the handler instance is closed, the counters are accrued in the table definition stored in the definition cache.
An information schema table named
TABLE_STATISTICS
is introduced to provide the handler statistics counters for each table in the definition cache. Each counter is displayed in a separate column that, for example, records the number of insert, delete, or update operations, as well as other operations, plus columns for the table and database names. -
Expose I/O operations counters per tablespace.
This change introduces a set of per tablespace counters for read, write and flush operations. The counters are incremented whenever data is read, written or flushed to an InnoDB space. Additionally, the number of bytes read and written are also counted. These statistics are kept in the tablespace memory cache and, hence, are ephemeral.
A new information schema table named
INNODB_SPACE_STATS
is introduced to expose these statistics counters. Each row of the table represents a space in the tablespace memory cache, and each column represents a counter value. -
Slave should include the table name in its status while processing RBR events.
When processing a row-based event, the SQL Thread state is updated to reflect what type of event is being processed, but short of dumping the event from the logs, there is currently no way to identify to which table the event is being applied to.
In order to allow for easier identification of which table an event is being applied to, this change extends the SQL Thread state to also include the fully qualified name of the table associated with an event being applied.
-
Expose total per-table space file size as Max_data_length.
This change repurposes the
Max_data_length
field ofSHOW TABLE STATUS
to expose the actual total size of the tablespace to which an InnoDB table belongs to. Previously, this field was left unused (zeroed) for such tables. -
Print ISO date and PID with mysqld_safe log messages.
Make mysqld_safe print log messages using a format similar to the one used by mysqld. The header should include a date printed using the ISO format (YYYY-MM-DD hh:mm:ss) and the process ID.
-
Report counter for InnoDB stall events.
This change introduces a new status variable named
Innodb_semaphore_stalls
that exposes the number of detected semaphore stalls (e.g. long semaphore wait) so that it is possible to easily trigger alerts when these events occur.
-
Bug#67718: InnoDB drastically under-fills pages in certain conditions
InnoDB's B+ tree page split algorithm that attempts to optimize for sequential inserts might end up causing poor space utilization depending on the distribution pattern of index key values throughout the index.
For example, if an insert that causes a page to be split is inserting a key value that is an immediate successor or predecessor to the last inserted key value in the same page, the insertion point is used as the split point irrespective of the actual distribution of values in the page.
The solution is to use the standard B+ tree split algorithm while still preserving some form of optimization for sequential inserts. When a page needs to be split, the median key value in a page is used as the split point so that the data is distributed in a symmetric fashion.
A new variable named
innodb_index_page_split_mode
is introduced to provide a way to control the page split behavior. The variable accepts a set of permitted values:symmetric
,lower
andupper
. Usingsymmetric
alone, pages are always split roughly in the middle. Whensymmetric,lower
orsymmetric,upper
are set, sequential inserts into the left-most or right-most page in the tree will cause the insertion point to be used as a reference for the split point. -
Bug#67963: InnoDB wastes 62 out of every 16384 pages
The problem is that once the segments of a tablespace are bigger than 32 pages, fragment pages are no longer allocated for use, yet they are still reserved whenever a new fragment extent is allocated. This is a direct consequence of mainly two facts: whenever a new descriptor page is needed (every 16384 pages), the extent that contains the descriptor page cannot be assigned to a segment and is instead used as a fragment extent; and a segment can only allocate up to 32 fragment pages since the array used to track fragment pages belonging to a segment is limited to 32 entries per segment.
The solution is to allow for fragment extents to be leased to segments whenever there are free fragment extents available. A fragment extent is considered available if the only used pages in the extent are the extent descriptor and ibuf bitmap pages. A new extent state is used to tag leased extents and to ensure that they are returned to the space free fragment list once no longer being used by a segment.
-
Bug#68023: InnoDB reserves an excessive amount of disk space for write operations
When performing operations that are expected to expand a table (for example, allocate new pages due to a page split), InnoDB currently preallocates and reserves up to 1% of the total size of the tablespace as a measure to ensure that enough free extents (that is, disk space) are available for the operation and to ensure that if running out of disk space, these operations are preemptively failed as to reserve any remaining free space to operations that end up freeing space (that is, delete data).
The percentage is reasonable for tables smaller than a few gigabytes, but not for tables sized at tens of gigabytes or more, at which point the percentage won't correctly estimate the free space needed to perform operations and may cause an excessive amount of free extents to be preallocated.
This change introduces two new system variables to enable/disable free extents reservation and to control the amount of free extents that is reserved for such operations. The variable
innodb_reserve_free_extents
can be used to enable or disable free extents reservation andinnodb_free_extents_reservation_factor
can be used to control what percentage of a space size is reserved for operations that may cause more space to be used.
-
Log checkpoint triggered flushes might be synchronous and asynchronous.
To better reflect the synchronization status of such flushes, this change adds a new status variable named
innodb_buffer_pool_flush_async_page
as a separate counter for asynchronous flushes. -
Export insert buffer statistics.
This change introduces a set of new status variables for insert buffering operations. See
ibuf
status variables for details. -
Expose purge age information
This introduces new status variables that expose the purge age in transactions and undo log:
Innodb_purge_trx_no
,Innodb_purge_undo_no
andInnodb_trx_max_id
. -
Add counters for successful page merges and page discards.
Currently
Innodb_page_merges
counts only merge attempts but there is no metric for successful merges. This change introduces a new status variable namedInnodb_page_merges_succeeded
which indicates the number of successful page merge operations (that is, the number of pages successfully merged into another page).Additionally, this change also introduces a new status variable named
Innodb_page_discards
which represents the number of pages that have become empty and were thus discarded. -
Support for floating-point system variables using the plugin interface.
Augment the server plugin interface to allow plugins to define and expose floating-point system variables of type double. The convenience macros
MYSQL_SYSVAR_DOUBLE
andMYSQL_THDVAR_DOUBLE
are introduced and can be used by plugins to declare system variables of type double. -
The fractional part of the def, min and max values of system variables is ignored.
Since the command-line option parsing interface (my_getopt) uses fields of type
unsigned long long
to store these values, the double values were being stored in a lossy way that discards the fractional part.This change allows the default, minimum and maximum values of system variables of type double to have a meaningful fractional part by to storing the raw representation of a double value in the raw bits of an
unsigned long long
field in a way that the binary representation remains the same. Hence, the actual value can be passed back and forth between the types. -
Change the type of the system variables
innodb_segment_fill_factor
andinnodb_index_fill_factor
to double.These variables are used to represent percentages but were defined to be of type integer as their values could not be set to percentages with fractional parts because of the problem described above.
Furthermore, their initial default values were fractional percentages, but had to be changed because the interface did not support them. Now these system variables are made of type double and their default values are restored to their original form.
-
Fixed some some test failures.
Suppressed unsafe statement warnings generated by the rpl_filter_tables_not_exist test case. Increased timeout of the innodb_mysql test case. Fixed spurious failures of the rpl_start_stop_slave test case.
See also Changes in MySQL 5.5.28 for changes in the upstream release.
-
Bug#67156: Sporadic query cache related crash in
pthread_rwlock_init()
Reinitializing the query cache could lead to a crash inside
pthread_rwlock_init()
on Mac OS X. -
Bug#67433: Using
SET GLOBAL SQL_LOG_BIN
should not be allowedEarlier in MySQL 5.5 development cycle, the
SQL_LOG_BIN
variable was made to be both global and session-scoped, instead of only session as it was in previous releases. The problem is that usage ofSQL_LOG_BIN
at the global scope can be quite dangerous, potentially leading to data loss with binary logging being disabled for new (and unrelated) sessions.This changes makes
SQL_LOG_BIN
once again a session-only variable, generating an error if it is used withSET GLOBAL
. -
Bug#67476:
Innodb_buffer_pool_read_ahead_evicted
is inaccurateIf a page being read into the buffer pool is made "young" (moved to the head of the LRU), its time of first access was not being properly set. When the page eventually gets evicted, it would be counted as a read-ahead page that was evicted without having been accessed by queries. This lack of access time could also affect linear read-ahead, potentially causing InnoDB to calculate multiple times whether to trigger read-ahead whenever the page was accessed.
-
Gracefully handle errors when disarming a statement timer.
If the timer for a statement timeout cannot be properly disarmed, assume that the timer might be pending.
-
Lightweight I_S table to hold basic information about each page in the InnoDB buffer pool
Retrieving page information from the
information_schema
tableINNODB_BUFFER_PAGE
can become computationally expensive in terms of time and and disk storage since the temporary table that is created to materialize the table is populated with all fields, some of which are very large (table name, column, etc.).Since, currently, the main use case of the table is to export a list of space and page numbers from the buffer pool, this change introduces a new
information_schema
table, namedINNODB_BUFFER_PAGE_BASIC
, that only holds these particular fields for each index page in the buffer pool. -
Increase time resolution of
expire_logs_days
In some scenarios, it is necessary to purge the binary logs more frequently than once a day. In these cases,
expire_logs_days
cannot be used for automatic binary log file removal because of its whole-day resolution.In order to allow for more fine-grained control over the automatic removal period, the type of the
expire_logs_days
variable is changed to decimal where the fractional part represents the fraction of one day. For example, 12 hours can be expressed as 0.5 day. -
Thread state is "query end" while blocked writing to binary log
When binary logging is enable, the thread state is set to "query end" most recently before writing to the binary log, so any time taken in that (due to contention or I/O) shows up as "query end" which makes it difficult to determine what is the current state of the thread.
This change introduces new and more appropriate thread states that are set in any binary log related activities that may take time. For example, now whenever an event is being writing to the binary log, the thread state is set to "Writing an event to the binary log".
-
Add new InnoDB status variables for InnoDB B-tree node operations
Introduced new counters for InnoDB b-tree page operations such as page split, merge and reorganization.
-
A non-blocking mode for
ALTER TABLE
While an
ALTER TABLE
is executing, writes to the table whose definition is being changed are blocked until the operation completes or a lock wait timeout occurs.In a sharded system, it would be better if conflicting operations were aborted rather than blocked, thereby eliminating delays due to lock waits and allowing them to be redirect to another shard.
In order to allow for this behavior, this change introduces a new
ALTER TABLE
option namedNO_WAIT
. WhenNO_WAIT
is set, conflicting locks requests that would normally block are aborted instead. -
ALTER TABLE in exclusive mode
In certain cases, it is desirable to control the lock mode to be used for an
ALTER TABLE
operation, especially in a scenario where it is appropriate to restrict access to the table while the operation is in progress.This change adds a
LOCK
clause toALTER TABLE
, that can be used to enforce a specific lock mode for an alter table operation. The only supported lock mode parameter isEXCLUSIVE
and is meant to be used in conjunction withNO_WAIT
to abort any attempts to use a table while its structure is being changed. -
Expose the level of each B-tree page in the buffer pool
Although the
INNODB_BUFFER_PAGE
table shows the number of records within a page, it is not clear whether these records are row data or internal B-tree pointers. For this reason, a newLEVEL
column is introduced which shows the level of a page in the B-tree.Additionally, the direction of insertion encoded in InnoDB data pages is now available in the
DIRECTION
column, and the number of consecutive inserts in that direction is available in theN_DIRECTION
column. These columns are useful to determine whether records are being inserted in an ascending or descending sequence. -
Expose the segment fill factor as a configurable setting
When allocating a page from a segment, InnoDB has an internal fill factor setting that is used to decide whether to allocate a new extent or to use an unused page. In short, the segment fill factor is used to determine how full to make the segment before extending it.
This change introduces a new variable named
innodb_segment_fill_factor
that can be used to control the fill factor. Its value specifies the percentage of space on a segment to be used, reserving the remainder as free space for future growth. -
Expose the index fill factor as a configurable setting
When extending a clustered index to the left or right, InnoDB attempts to fill leaf pages only up to a certain percentage (known as the fill factor), at which point the page is split. The remaining space is reserved for updating rows belonging to the page, attempting to make it likely that an updated row will be stored on the same page.
This change introduces a new variable name
innodb_index_fill_factor
that can be used to control the fill factor for clustered indexes. Its value specifies the percentage of space on a leaf page to be used, reserving the remainder as free space.
See also Changes in MySQL 5.5.24 for changes in the upstream release.
-
Bug#65715: Wrong connection ID (thread ID) in the general and slow query logs
Connection IDs (thread IDs) above 2^32 were not being properly written to the general query log. The method used to write commands to the log (e.g.
MYSQL_QUERY_LOG::write
) uses a 32-bits wide integer to store the connection ID value, which is actually a 64-bits wide integer value, thus causing the higher bits of the value to be discarded. -
Bug#65830:
utf8_general_cs
is not availableThe problem is that although the
utf8_general_cs
collation is enabled in CMake, the config option (HAVE_UTF8_GENERAL_CS
) is not being copied over to the configuration header (e.g. config.h) because it lacks a stub in config.h.cmake for CMake to replace with the actual value of the variable.
-
Expose current row-based replication (RBR) execution state in the SQL Thread state
The execution of row-based events in a replication slave is not reflected in the SQL Thread state, making it rather difficult to identify long-running events. For example, the execution of a large row-by-row delete event is not immediately identifiable as the replication SQL thread state for most of its duration stays as "Reading event from the relay log".
This change adds two new states to the replication slave SQL thread that are used to highlight the event that the SQL thread is executing and, for row-based events, to indicate how many rows have been applied. These will generally look like:
Executing Delete_rows event at position 100 Handling record 50 of 100 for a Delete_rows event
Additionally, the outermost state of a thread state is now saved and restored when inner states are set, so that the overall information of what the thread is doing is not lost.
-
Add an event to send column information in RBR
Although
Table_map
events include some column metadata information, such as type and length, they lack the necessary information to fully deduce a column's definition and to interpret its values. For example, information such as the column name, whether an integer type is signed or unsigned, or the character set of string types, is missing. This makes it difficult for external programs to extract meaningful row data from row-based events.In order to enable external programs to fully deduce the table/column definitions, a new
Table_metadata
event is added. The purpose of this event is to describe the structure and other properties of the table and its columns, such as name, SQL type name, character set, etc. EachTable_metadata
event follows aTable_map
. WhetherTable_metadata
events are written to the binary log can be controlled using the system variablebinlog_rows_table_metadata_events
. -
Print ISO date and PID with all error log messages.
The currently available fields that compromise the header of error log messages, which are the date and time, plus the severity of the message, do not provide the enough information to identify discontinuity in reporting or which process generated a message.
To make such identification possible, this change includes the process ID in the header so that any changes in its value will identify the source (process) of the message and also indicate any discontinuity in reporting.
Additionally, the format of the date and time is changed to the ISO format (YYYY-MM-DD hh:mm:ss). The previous format was non-standard and difficult to read.
-
Provide the resulting error code for queries printed to the slow log
The slow query log did not provide enough information to determine if logged SQL statements completed successfully or whether they failed for some reason (e.g. they were killed). To make this easier, the resulting error number of a slow SQL statement is now printed to the slow query log in the
Error_code
field. -
Error when creating RBR-safe non-deterministic stored function due when binary logging is enabled
Even though the creation of non-deterministic functions can be allowed by enabling
log_bin_trust_function_creators
, enabling the option also implies that executing such functions is allowed even if the binary log format is set to statement. If the binary log format is set to row-based, creating and executing non-deterministic functions shouldn't pose any problems. Hence, this change allows non-deterministic functions to be created when the binary log format is set to row-based. If said functions are invoked at runtime when the binary log format is statement-based, they will fail with an error. -
Use an absolute install name for the shared library on Mac OS X
In order to allow Apple's Mac OS X dynamic linker to locate the
mysqlclient
shared library even if the path where it is installed is not in the default search path, change the shared library install name from just the library filename to the absolute path to the library.
-
Bug#65692: Deadlock between START SLAVE and setting a system variable
Starting the SQL thread might deadlock with setting or reading the values of the replication (filtering) options.
See also Changes in MySQL 5.5.23 for changes in the upstream release.
-
Bug#65469: Infinite loop when opening a corrupted table
If a permanently corrupted page was read, InnoDB would forever keep trying to read the page.
-
Bug#65310: Crash with partition pruning and impossible condition
Reading from a partitioned table using an impossible (e.g.
WHERE
,BETWEEN
, etc.) condition could lead to a crash if all partitions are pruned and the optimizer attempts to obtain the number of rows in the table. The problem occurs because even though no partitions are used, the optimizer might still attempt to perform (e.g. using range) analysis where an estimate of the the number of rows is needed, but the partition storage engine wasn't prepared to provide it.
-
Add partitioning functions for YMD and YMDH or equivalent
Added a
UTC_EXTRACT(unit FROM date)
function that extracts parts from a date and returns them as an integer in a specified format. The function is modeled afterEXTRACT()
, but differs in that it uses UTC for all of its calculations. The supported unit specifiers areYEAR_MONTH_DAY
andYEAR_MONTH_DAY_HOUR
, which return a representation of the date argument as a value in the YYYYMMDD or YYYYMMDDHH format, respectively.This function is intended to facilitate partitioning by days, especially when applied to
TIMESTAMP
values. It allows partitions to be named in a more human-readable format (such as YYYYMMDD). -
Export the last know good binary log position as a status variable from InnoDB
Introduced two new status variables that export the master binary log name and position of a slave as stored by InnoDB. Whenever the SQL thread commits a transaction, InnoDB also commits the master binary log name and position to the system tablespace. Now this information can be retrieved through the
Innodb_mysql_master_log_file
andInnodb_mysql_master_log_pos
status variables. -
Report counters for InnoDB corruption events so that they are alertable
Introduced status variables that expose a counter of page corruption and table corruption events so that they can be alerted on without scanning the error log files.
-
Improve obscure "Got error -1 when reading table" messages
The problem was that handler originated errors printed to the error log sometimes do not indicate the precise nature of the problem. This is especially an issue with InnoDB because it cannot always convert an internal InnoDB error code to a MySQL error code.
InnoDB now provides an additional (and more detailed) error message if it cannot convert the error code. Additionally, errors related to a statement being interrupted are no longer printed to the error log.
Also, the error message format was changed from "Got error when reading table" to "Error when reading table: error message (error number)" in order to distinguish the offending error message.
-
Use the Google Breakpad crash reporting system
Google's Breakpad is now used to generate minimal crash dump information when the server process (mysqld) crashes. The minidump file generated by breakpad contains a list of the executable and shared libraries loaded in the process, the state of the processor register and a stack trace for each thread, and miscellaneous information about the system and the reason for the dump. Minidumps are significantly smaller than core files, making them more practical for collection and processing.
-
Added non-functional RQG tests for InnoDB data compression
-
Binaries are now compiled with debugging symbols and are dynamically linked to the the Standard C++ Library (libstdc++)
See also Changes in MySQL 5.5.22 for changes in the upstream release.
-
Bug#65030: Innodb_buffer_pool_pages_flushed reports incorrect number of flushed pages
The internal counter for the number of flushed pages (
srv_buf_pool_flushed
) was being incremented twice, once inbuf_flush_batch()
and again inbuf_flush_common()
. -
Bug#65061: LRU flush rate calculation is based on invalid values
The internal counter for the number of pages flushed as part of LRU flushing was being incremented twice, once in
buf_flush_LRU_list_batch()
and again inbuf_flush_common()
. This could lead to an incorrect calculation of the rate at which LRU flush is happening, which might later affect the statistics associated with adaptive flushing. -
Potential security issue with Oracle MySQL
If, for whatever reason, the
memcmp()
call incheck_scramble()
returns a value with the 8 rightmost bits set to zero (e.g. 256), an invalid password could be accepted during authentication.
-
MYSQL-62: Replication info not available from crash recovery?
Restored code that stores the master binary log position of a slave in InnoDB's data file. Like in earlier MySQL versions, if a slave crashes, the name and position of the slave in relation to the master binary log file is printed after crash recovery.
-
Backport innodb_flush_neighbors from MySQL 5.6
Backported from MySQL 5.6 the
innodb_flush_neighbors
option that controls whether flushing a page from the InnoDB buffer pool also flushes other dirty pages in the same extent. -
Add ability to disable anticipatory flushing
Introduced the
innodb_anticipatory_flushing
option that controls whether the master thread will flush dirty pages from the buffer pool if there is I/O bandwidth available for background tasks. -
Add InnoDB flush-related status variables
Introduced status variables that provide counters for the various flushing-related tasks performed by InnoDB. For example, these counters provide information about the number of pages scanned and flushed from the flush and LRU lists. Also, there are counters for the number of pages flushed by the background thread.
See also Changes in MySQL 5.5.21 for changes in the upstream release.
-
MYSQL-35: Packages for Mac OS X should not set -arch flags in mysql_config --cflags
When building OS X universal binaries, the size of certain types might vary across architectures. Use architecture-to-size mapping to properly detect the size of
time_t
. This should fix a failure of the timezone test case. -
MYSQL-30: Research safer buffer pool dump/restore method
Fix tablespace bounds checking, the offset of the last page is the tablespace size minus one.
-
Bug#60682: deadlock from thd_security_context
In order to avoid a deadlock-prone lock order, the query of a session associated with an active transaction is no longer displayed in the output of
SHOW ENGINE INNODB STATUS
. -
Bug#64556: Interrupting a query inside InnoDB causes an unrelated warning to be raised
Interrupting a statement (with
KILL QUERY
) that is executing inside InnoDB leads to an unrelated warning being raised in the context of the connection whose statement was interrupted.
-
MYSQL-42: Allow pre-allocation of InnoDB file-per-table (ibd) tablespace files
Added the ability to set the initial size and to extended the size, in pages, of per-table tablespaces. The option is only meaningful if
innodb_file_per_table
is enabled. -
MYSQL-45: InnoDB should allow flushing to be gated by age of pages
In order to reduce and control the frequency of write requests to SSD-based storage systems, this change introduces a new variable named
innodb_flush_dirty_pages_age
which can be used to set the minimum age (in seconds) of dirty pages to be flushed from the buffer pool, if the number of dirty pages is below the maximum percentage. -
MYSQL-46: Make Replication filter settings dynamic
Makes the slave options
--replicate-*
dynamic variables so that these options can be changed dynamically while the server is running, which enables users to modify replication filtering rules without having to stop and restart the server. -
MYSQL-15: Implement server-side statement timeout support
Introduces a server-side time limit for the execution of statements. The feature works by interrupting the execution of statements that take over a specified amount of time (in milliseconds) to complete. After the specified time has passed, the server attempts to abort the statement without affecting the session (connection) itself.
See also Changes in MySQL 5.5.20 for changes in the upstream release.
-
MYSQL-40: RPM "Obsoletes:" lines make it impossible to "yum install" specific old versions
The "obsoletes" property of newer MySQL-server packages was interfering with the Yum installation of older (obsoleted) MySQL packages from different repositories. In order to avoid any obsoletes processing logic in Yum, the obsoletes property was simply removed.
-
MYSQL-39: Accessing innodb_buffer_page is very slow
Temporary MyISAM tables, which are used to internally store the contents of large
INFORMATION_SCHEMA
tables, were being created using the static (fixed-length row) MyISAM storage format, which causesCHAR
andVARCHAR
columns to be padded to the column width. Given that theINNODB_BUFFER_PAGE
table has a few largeVARCHAR
columns, and depending on the size of the buffer pool, this behavior would lead to large (tens of gigabytes) temporary tables being written to disk. Such temporary tables are now stored using the dynamic format, which uses significantly less disk space. -
MYSQL-38: Counters in innodb_buffer_pool_stats seem broken
The value of the
NUMBER_PAGES_CREATED
andNUMBER_PAGES_WRITTEN
columns of theINNODB_BUFFER_POOL_STATS
were being mistakenly set to the rate of pages created and written.
-
MYSQL-37: Export InnoDB LSN information
Added status variables that show the current log sequence number (
Innodb_lsn_current
), how far the log has been flushed to disk (Innodb_lsn_flushed
), and the position at which InnoDB last took a checkpoint (Innodb_lsn_checkpoint
). -
MYSQL-28: Produce installable dmg+pkg builds for Mac OS X
Various changes related to building on Mac OS X and producing installable packages.
-
MYSQL-27: Report test results to jenkins
Artificial tests used for reporting unit-tests results, Valgrind warnings, etc., that have no associated suite name, are now added by default to the 'report' test suite for reporting purposes.
-
WL#5914: remove option "--all" and BDB errors from the "perror" program.
Back-ported removal of the
--all
option that relied on deprecated APIs (e.g.sys_errlist
).
See also Changes in MySQL 5.5.19 for changes in the upstream release.
-
MYSQL-28: Produce installable dmg+pkg builds for Mac OS X
Fixes for building on Mac OS X.
-
Bug#63618: Assertion in ha_innobase::records_in_range
Disabled assertion to enable extended testing. Assertion is used to detect questionable API usage.
-
Bug#63623: Test case partition_binlog_stmt creates a file in an improper location.
Test case
partition_binlog_stmt
could fail if themysql-test
directory is not writable.
-
MYSQL-27: Report test results to jenkins
Added JUnit reporting support to the MySQL test suite.
-
MYSQL-30: Research safer buffer pool dump/restore method
Added
information_schema
tablesINNODB_BUFFER_PAGE
,INNODB_BUFFER_POOL_STATS
andINNODB_BUFFER_PAGE_LRU
, which represents information about each page in the InnoDB buffer pool and their position in the LRU list. This change also introduces aprefetch_pages
command to the InnoDB storage engine. This command may be use to prefetch (retrieve from disk) index and data pages into the buffer pool. The prefetch command syntax is:ENGINE_CONTROL(InnoDB, prefetch_pages, space, page [, page ...])
-
MYSQL-31: Implement super_only mode to restrict all queries to SUPER-user only
Introduced a
super_only
variable that restricts all statements, rather than just update statements as was already possible withread_only
, to users holding theSUPER
privilege. -
MYSQL-29: Remove stop/start logic from RPM install/upgrade process
RPM install/upgrade now fails if a MySQL server instance is currently running. Any instance must be stopped before a package upgrade can continue.
-
MYSQL-10: Modules for non-functional testing: sysbench, randgen, dbt2, etc.
Added additional optimizer, replication and InnoDB RQG-based stress tests.
See also Changes in MySQL 5.5.19 for changes in the upstream release.
-
Bug#61575: InnoDB: Error: io_setup() failed
InnoDB would crash if Linux's native AIO support could not be initialized via
io_setup()
.
-
MYSQL-14: Twitter MySQL build configuration
The RPM package now provides information about the organization that maintains and distributes the RPM package (Twitter, Inc.). Also, upgrades are now only allowed between packages of the same vendor (Twitter, Inc.).
-
MYSQL-22: Make population of column source metadata in result sets optional
This change introduces a new protocol mode that instructs MySQL to empty certain object names that are part of the result set metadata. Only the absolutely minimal (or essential) set of names is preserved. If the minimal option is set, the database, table (both original and aliased) and column names in the result set metadata will be empty strings. Only the column alias name is preserved.
-
MYSQL-23: Integrate (and port) patch for Innodb_deadlocks
Introduce an
Innodb_lock_deadlocks
server status variable that provides the number of deadlocks that have occurred within InnoDB. -
MYSQL-24: Include git sha in version_comment
The
version_comment
field now contains a reference to the last git commit object in the checked out branch that was used to build the source package. -
MYSQL-25: Add new InnoDB status variables Innodb_files_{open,opened,closed}
Added status variables
Innodb_files_open
,Innodb_files_opened
,Innodb_files_closed
,Innodb_tablespace_files_open
,Innodb_tablespace_files_opened
, andInnodb_tablespace_files_closed
, that show the number of open, opened and closed files within InnoDB and within InnoDB's tablespaces. -
Removed extraneous space in InnoDB log message "Waiting for the background threads to start".
See also Changes in MySQL 5.5.19 for changes in the upstream release.
-
Bug#63130: CMake-based check for the presence of a system readline library is not reliable.
A system-provided readline library was not being properly detected.
-
MYSQL-10: Modules for non-functional testing: sysbench, randgen, dbt2, etc.
Added optimizer, partitioning, runtime and InnoDB RQG-based tests.
-
MYSQL-16: Augment mysqld_safe to flush caches and set NUMA policy
Added
mysqld_safe
options to flush (sync and drop) caches before startingmysqld
and to set the NUMA memory allocation policy to interleave. -
MYSQL-12: Improve MySQL memory allocation, especially under NUMA
Added option
innodb-buffer-pool-populate
to force the operating system to pre-allocate in physical memory the page frames required for the buffer pool memory region. -
MYSQL-14: Twitter MySQL build configuration.
Now there is a build configuration specific for Twitter MySQL builds.
See also Changes in MySQL 5.5.18 for changes in the upstream release.
-
Bug#62907: mysql_plugin.test fails on a RPM-based install.
The
mysql_plugin
test case would fail when executed in the context of a RPM-based install. -
Bug#62712: RPM-based install of the test suite is useless for non-root users.
Certain test cases would fail when executed in the context of a RPM-based install.
- Fixed various compiler warnings.