Assignment DBA

28
MySql versions upgrading: MySQL is evolving quite rapidly at MySQL AB. New releases are made when there are useful features that others seem to have a need for. No one has to download a new release. The News section will tell us if the new release has something we really want. For each minor update, the last number in the version string is incremented. When there are major new features or minor incompatibilities with previous versions, the second number in the version string is incremented. When the file format changes, the first number is increased. Changes in Release 3.23.x Changes in Release 3.23.0 (05 July 1999: Alpha) A new storage engine library (MyISAM) with a lot of new features. Support for big files (63-bit) on OSs that support big files.

description

ASSIGNMENT

Transcript of Assignment DBA

MySql versions upgrading:MySQL is evolving quite rapidly at MySQL AB. New releases are made when there are useful features that others seem to have a need for.

No one has to download a new release. The News section will tell us if the new release has something we really want.For each minor update, the last number in the version string is incremented. When there are major new features or minor incompatibilities with previous versions, the second number in the version string is incremented. When the file format changes, the first number is increased.Changes in Release 3.23.x

Changes in Release 3.23.0 (05 July 1999: Alpha)

A new storage engine library (MyISAM) with a lot of new features.

Support for big files (63-bit) on OSs that support big files.

New function LOAD FILE(Filename) to get the contents of a file as a string value.

New operator that acts as = but returns TRUE if both arguments are NULL. This is useful for comparing changes between tables.

Added the ODBC 3.0 EXTRACT(interval FROM datetime) function. Columns defined as FLOAT(X) are not rounded on storage and may be in scientific notation (1.0 E+10) when retrieved.

REPLACE is now faster than before.

Changed LIKE character comparison to behave as =; This means that 'e' LIKE '' is now true. (If the line doesn't display correctly, the latter 'e' is a French 'e' with an acute accent above.)

SHOW TABLE STATUS returns a lot of information about the tables.

Added LIKE to the SHOW STATUS statement.

Added Privileges column to SHOW COLUMNS. Added Packed and Comment columns to SHOW COLUMNS. Added comments to tables (with CREATE TABLE ... COMMENT 'xxx').

Added UNIQUE, as in CREATE TABLE tbl_name (col INT NOT NULL UNIQUE)

New create syntax: CREATE TABLE tbl_name SELECT ...

New create syntax: CREATE TABLE IF NOT EXISTS ...

Permit creation of CHAR(0) columns.

DATE_FORMAT() now requires % before any format character.

DELAYED is now a reserved word (sorry about that :( ).

An example procedure is added: analyse, file: sql_analyse.c. This describes the data in your query. Try the following:

SELECT ... FROM ...

WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])

This procedure is extremely useful when you want to check the data in your table!

BINARY cast to force a string to be compared in case-sensitive fashion.

Check whether a row has changed in an UPDATE now also works with BLOB/TEXT columns.

Added the INNER join syntax. Note that this change makes INNER a reserved word!

Added support for netmasks to the host name in the MySQL grant tables. You can specify a netmask using the IP/NETMASK syntax.

If you compare a NOT NULL DATE/DATETIME column with IS NULL this is changed to a compare against 0 to satisfy some ODBC applications.

NULL IN (...) now returns NULL instead of 0. This ensures that null_column NOT IN (...) doesn't match NULL values.

Fix storage of floating-point values in time columns.

Changed parsing of TIME strings to be more strict. Now the fractional second part is detected (and currently skipped). The following formats are supported:

[[DAYS] [H]H:]MM:]SS[.fraction]

[[[[[H]H]H]H]MM]SS[.fraction]

Detect (and ignore) fractional second part from DATETIME.

Added the LOW_PRIORITY attribute to LOAD DATA INFILE.

The default index name now uses the same case as the column name on which the index name is based.

Changed default number of connections to 100.

Use bigger buffers when using LOAD DATA INFILE. DECIMAL(x,y) now works according to standard SQL.

Added aggregate user-defined functions. Thanks to Andreas F. Bobak for this!

LAST_INSERT_ID() is now updated for INSERT INTO ... SELECT. Some small changes to the join table optimizer to make some joins faster.

SELECT DISTINCT is much faster; it uses the new UNIQUE functionality in MyISAM. One difference compared to MySQL 3.22 is that the output of DISTINCT is no longer sorted.

All C client API macros are now functions to make shared libraries more reliable. Because of this, you can no longer call mysql_num_fields() on a MYSQL object, you must use mysql_field_count() instead. Added use of LIBWRAP; patch by Henning P. Schmiedehausen.

Do not allow AUTO_INCREMENT for other than numerical columns.

Using AUTO_INCREMENT now automatically makes the column NOT NULL.

Show NULL as the default value for AUTO_INCREMENT columns.

Added SQL_BIG_RESULT; SQL_SMALL_RESULT is now default.

Added a shared library RPM. This enhancement was contributed by David Fox Added --enable-large-files and --disable-large-files options to configure. See configure.in for some systems where this is automatically turned off because of broken implementations.

Upgraded readline to 4.0.

Changes in Release 4.0.0 (October 2001: Alpha)

Added full-text variables ft_min_word_len, ft_max_word_len, and ft_max_word_len_for_sort system variables.

Added full-text variables ft_min_word_len, ft_max_word_len, and ft_max_word_len_for_sort variables to myisamchk.

Added documentation for libmysqld, the embedded MySQL server library. Also added example programs (a mysql client and mysqltest test program) which use libmysqld.

Removed all Gemini hooks from MySQL server.

Removed my_thread_init() and my_thread_end() from mysql_com.h, and added mysql_thread_init() and mysql_thread_end() to mysql.h.

Support for communication packets > 16MB. In 4.0.1 we extended MyISAM to be able to handle these.

Secure connections (with SSL).

Unsigned BIGINT constants now work. MIN() and MAX() now handle signed and unsigned BIGINT numbers correctly.

New character set latin1_de which provides correct German sorting.

STRCMP() now uses the current character set when doing comparisons, which means that the default comparison behavior now is case insensitive.

TRUNCATE TABLE and DELETE FROM tbl_name are now separate functions. One bonus is that DELETE FROM tbl_name now returns the number of deleted rows, rather than zero.

DROP DATABASE now executes a DROP TABLE on all tables in the database, which fixes a problem with InnoDB tables.

Added support for UNION.

Added support for multiple-table DELETE operations.

A new HANDLER interface to MyISAM tables.

Added support for INSERT on MERGE tables. Patch from Benjamin Pflugmann.

Changed WEEK(date,0) to match the calendar in the USA.

COUNT(DISTINCT) is about 30% faster.

Speed up all internal list handling.

Speed up IS NULL, ISNULL() and some other internal primitives.

Full-text index creation now is much faster.

Tree-like cache to speed up bulk inserts and myisam_bulk_insert_tree_size variable.

Searching on packed (CHAR/VARCHAR) keys is now much faster.

Optimized queries of type: SELECT DISTINCT * FROM tbl_name ORDER by key_part1 LIMIT row_count.

SHOW CREATE TABLE now shows all table attributes.

ORDER BY ... DESC can now use keys.

LOAD DATA FROM MASTER automatically sets up a slave.

Renamed safe_mysqld to mysqld_safe to make this name more in line with other MySQL scripts/commands.

Added support for symbolic links to MyISAM tables. Symlink handling is now enabled by default for Windows.

Added SQL_CALC_FOUND_ROWS and FOUND_ROWS(). This makes it possible to know how many rows a query would have returned without a LIMIT clause.

Changed output format of SHOW OPEN TABLES.

Permit SELECT expression LIMIT ....

Added the identity variable as a synonym for the last_insert_id variable (like Sybase).

Added ORDER BY syntax to UPDATE and DELETE.

SHOW INDEXES is now a synonym for SHOW INDEX.

Added ALTER TABLE tbl_name DISABLE KEYS and ALTER TABLE tbl_name ENABLE KEYS commands.

Permit use of IN as a synonym for FROM in SHOW commands.

Implemented repair by sort for FULLTEXT indexes. REPAIR TABLE, ALTER TABLE, and OPTIMIZE TABLE for tables with FULLTEXT indexes are now up to 100 times faster.

Permit standard SQL syntax X'hexadecimal-number'.

Cleaned up global lock handling for FLUSH TABLES WITH READ LOCK.

Fixed problem with DATETIME = constant in WHERE optimization.

Added --master-data and --no-autocommit options to mysqldump. (Thanks to Brian Aker for this.)

Added script mysql_explain_log.sh to distribution. (Thanks to mobile.de).

Changes in Release 4.1.x

Changes in MySQL 4.1.0 (03 April 2003 Alpha)

Functionality added or changed:

Incompatible Change: TIMESTAMP is now returned as a string of type 'YYYY-MM-DD HH:MM:SS' and different timestamp lengths are not supported.

This change was necessary for SQL standards compliance. In a future version, a further change will be made (backward compatible with this change), allowing the timestamp length to indicate the desired number of digits of fractions of a second.

Replication: Replication now works with RAND() and user variables @var.

Allow index type to be specified explicitly for some storage engines via USING type_name syntax in index definition.

Allow DEFAULT(col_name) in expressions; it produces the column's default value.

Added database and real table name (in case of alias) to the MYSQL_FIELD structure.

Renamed SHOW MASTER LOGS statement to SHOW BINARY LOGS.

Unicode (UTF8) support.

Allow one to change mode for ANSI_QUOTES on the fly.

Faster embedded server (new internal communication protocol).

One can specify many temporary directories to be used in a round-robin fashion with: --tmpdir=dirname1:dirname2:dirname3.

New faster client/server protocol that supports prepared statements, bound parameters, and bound result columns, binary transfer of data, warnings.

Aliases are now forced in derived tables, as per standard SQL.

libmysqlclient did not always fetch column default values correctly.

Support for GIS (Geometrical data). The mysql command-line client attempted to interpret quotation marks within comments.

REPAIR TABLE and OPTIMIZE TABLE now can be killed.

Added record_in_range() method to MERGE tables to be able to choose the correct index when there are many to choose from.

New CHARSET() and COLLATION() functions to return the character set and collation of a string.

Added new VARIANCE(expr) function that returns the variance of expr

In CREATE TABLE foo (a INT not null primary key) the PRIMARY word is now optional.

CHAR BYTE is an alias for the CHAR BINARY data type.

VARCHARACTER is an alias for VARCHAR.

Added support for UNION in derived tables.

SHOW [COUNT(*)] WARNINGS shows warnings from the last command.

New operators integer MOD integer and integer DIV integer. DIV is now a reserved word.

One can specify a data type for a column in CREATE TABLE ... SELECT by defining the column in the CREATE TABLE part.

CREATE TABLE foo (a TINYINT NOT NULL) SELECT b+1 AS a FROM bar;

expr SOUNDS LIKE expr same as SOUNDEX(expr)=SOUNDEX(expr).

Multi-line queries: You can now issue several queries at once and then read the results in one go.

New CONVERT(... USING ...) syntax for converting string values between character sets.

ALTER DATABASE.

Added old-password command to mysqladmin for changing password but storing it using the old password-hashing format.

In CREATE TABLE the attribute SERIAL is now an alias for BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.

One can specify the different BLOB/TEXT types with the syntax BLOB(length) and TEXT(length). MySQL automatically changes it to one of the internal BLOB/TEXT types.

New more secure client authentication based on 45-byte passwords in the user table. Subqueries: SELECT * from t1 where t1.a=(SELECT t2.b FROM t2).

START SLAVE (STOP SLAVE) no longer returns an error if the slave is started (stopped); it returns a warning instead.

New options --reconnect and --skip-reconnect for the mysql client, to reconnect automatically or not if the connection is lost.

TRUE and FALSE added as alias for 1 and 0, respectively.

DATE/DATETIME checking is now a bit stricter to support the ability to automatically distinguish between date, datetime, and time with microseconds. For example, dates of type YYYYMMDD HHMMDD are no longer supported; you must either have separators between each DATE/TIME part or not at all.

REPAIR TABLE of MyISAM tables now uses less temporary disk space when sorting char columns.

Derived tables:

SELECT a.col1, b.col2

FROM (SELECT MAX(col1) AS col1 FROM root_table) a,

other_table b

WHERE a.col1=b.col1;

Added --compatible option to mysqldump for producing output that is compatible with other database systems or with older MySQL servers.

DROP TEMPORARY TABLE now drops only temporary tables and doesn't end transactions.

SELECT .. LIMIT 0 did not return the proper row count for SQL_CALC_FOUND_ROWS.

One can create a table from the existing table using CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table (LIKE table). The table can be either normal or temporary.

One can add a comment per column in CREATE TABLE.

SERIAL DEFAULT VALUE added as an alias for AUTO_INCREMENT.

New function IS_USED_LOCK() for determining the connection identifier of the client that holds a given advisory lock.

SELECT ... FROM DUAL is an alias for SELECT .... (To be compatible with some other database systems).

Server side help for all MySQL functions. One can now type help week in the mysql client and get help for the week() function.

Allow empty index lists to be specified for USE INDEX, IGNORE INDEX, and FORCE INDEX.

SHOW FULL COLUMNS FROM tbl_name shows column comments.

Character sets to be defined per column, table and database.

Added new mysql_get_server_version() C API client function.

New CRC32() function to compute cyclic redundancy check value.

BTREE index on MEMORY (HEAP) tables.

If one creates a too long CHAR/VARCHAR it is now automatically changed to TEXT or BLOB; One get a warning in this case.

On Windows, we are now using shared memory to communicate between server and client when they are running on the same machine and you are connecting to localhost.

SLAVE START and SLAVE STOP are no longer accepted by the query parser; use START SLAVE and STOP SLAVE instead.

.

Changes in MySQL 4.1.25

Functionality added or changed:

Security Enhancement: To enable stricter control over the location from which user-defined functions can be loaded, the plugin_dir system variable has been backported from MySQL 5.1. If the value is nonempty, user-defined function object files can be loaded only from the directory named by this variable. If the value is empty, the behavior that is used prior to the inclusion of plugin_dir applies: The UDF object files must be located in a directory that is searched by your system's dynamic linker.

If the plugin directory is writable by the server, it may be possible for a user to write executable code to a file in the directory using SELECT ... INTO DUMPFILE. This can be prevented by making plugin_dir read only to the server or by setting --secure-file-priv to a directory where SELECT writes can be made safely.

Bugs fixed:

Important Change: Security Fix: Additional corrections were made for the symlink-related privilege problem originally addressed in MySQL 4.1.24. The original fix did not correctly handle the data directory path name if it contained symlinked directories in its path, and the check was made only at table-creation time, not at table-opening time later.

The Windows installer displayed incorrect product names in some images.

On Windows, the installer attempted to use JScript to determine whether the target data directory already existed. On Windows Vista x64, this resulted in an error because the installer was attempting to run the JScript in a 32-bit engine, which wasn't registered on Vista. The installer no longer uses JScript but instead relies on a native WiX command.

INSERT INTO ... SELECT caused a crash if innodb_locks_unsafe_for_binlog was enabled.

The MySQL Instance Configuration Wizard would not allow you to choose a service name, even though the criteria for the service name were valid. The code that checks the name has been updated to support the correct criteria of any string less than 256 character and not containing either a forward or backward slash character.

Changes in MySQL 5.0.0 (22 December 2003 Alpha)

Functionality added or changed:

Important Change: If you upgrade to MySQL 4.1.1 or higher, it is difficult to downgrade back to 4.0 or 4.1.0. That is because, for earlier versions, InnoDB is not aware of multiple tablespaces.

Replication: Easier replication upgrade (5.0.0 masters can read older binary logs and 5.0.0 slaves can read older relay logs). See Section16.4.2, Replication Compatibility Between MySQL Versions, for more details). The format of the binary log and relay log is changed compared to that of MySQL 4.1 and older.

Replication: New binary log format that enables replication of these session variables: sql_mode, sql_auto_is_null, foreign_key_checks (which was replicated since 4.0.14, but here it is done more efficiently and takes less space in the binary logs), unique_checks. Other variables (like character sets, sql_select_limit, ...) will be replicated in upcoming 5.0.x releases.

Added TIMESTAMPADD() and TIMESTAMPDIFF() functions.

The KILL statement now takes CONNECTION and QUERY modifiers. The first is the same as KILL with no modifier (it kills a given connection thread). The second kills only the statement currently being executed by the connection.

Added support for SUM(DISTINCT), MIN(DISTINCT), and MAX(DISTINCT).

Basic support for stored procedures and functions (SQL:2003 style). See Section18.2, Using Stored Routines (Procedures and Functions).

The output of the SHOW BINLOG EVENTS statement has been modified. The Orig_log_pos column has been renamed to End_log_pos and now represents the offset of the last byte of the event, plus one.

Implemented Index Merge optimization for OR clauses. See Section7.3.1.4, Index Merge Optimization.

For user-defined functions (UDFs), the UDF_ARGS structure now has attributes and attribute_lengths members that provide information about the argument names. Section21.2.2.3, UDF Argument Processing.

Added WEEK and QUARTER values as INTERVAL arguments for the DATE_ADD() and DATE_SUB() functions.

The precedence of the XOR operator now lies between OR and AND. Previously, XOR had the same precedence as OR.

Added SELECT INTO list_of_vars, which can be of mixed (that is, global and local) types. See Section12.7.3.3, SELECT ... INTO Statement.

LOAD DATA INFILE causes an implicit commit.

Changes in MySQL Connector/MXJ 5.0.11 (24th November 2009)

Functionality added or changed:

The embedded MySQL binaries have been updated to MySQL 5.1.40 for GPL releases and MySQL 5.1.40 for Commercial releases.

The contents of the directory used for bootstrapping the MySQL databases is now configurable by using the windows-share-dir-jar property. You should supply the name of a jar containing the files you want to use.

The embedded Aspect/J class has been removed.

The default timeout for the kill delay within the embedded test suite has been increased from 10 to 30 seconds.

Bugs fixed:

On startup Connector/MXJ generated an exception on Windows 7:

Changes in MySQL 5.1.48 (02 June 2010)

InnoDB Notes:

InnoDB Plugin has been upgraded to version 1.0.9. This version is considered of General Availability (GA) quality. InnoDB Plugin Change History, may contain information in addition to those changes reported here.

In this release, the InnoDB Plugin is included in source and binary distributions, except RHEL3, RHEL4, SuSE 9 (x86, x86_64, ia64), and generic Linux RPM packages. It also does not work for FreeBSD 6 and HP-UX or for Linux on generic ia64.

Functionality added or changed:

The Rows_examined value in slow query log rows now is nonzero for UPDATE and DELETE statements that modify rows. (Bug#49756)

Bugs fixed:

Important Change: Replication: MyISAM transactions replicated to a transactional slave left the slave in an unstable condition. This was due to the fact that, when replicating from a nontransactional storage engine to a transactional engine with autocommit turned off, no BEGIN and COMMIT statements were written to the binary log; thus, on the slave, a never-ending transaction was started.

The fix for this issue includes enforcing autocommit mode on the slave by replicating all autocommit=1 statements from the master. (Bug#29288)

Partitioning: ALTER TABLE statements that cause table partitions to be renamed or dropped (such as ALTER TABLE ... ADD PARTITION, ALTER TABLE ... DROP PARTITION, and ALTER TABLE ... REORGANIZE PARTITION) when run concurrently with queries against the INFORMATION_SCHEMA.PARTITIONS table could fail, cause the affected partitioned tables to become unusable, or both. This was due to the fact that the INFORMATION_SCHEMA database ignored the name lock imposed by the ALTER TABLE statement on the partitions affected. In particular, this led to problems with InnoDB tables, because InnoDB would accept the rename operation, but put it in a background queue, so that subsequent rename operations failed when InnoDB was unable to find the correct partition. Now, INFORMATION_SCHEMA honors name locks imposed by ongoing ALTER TABLE statements that cause partitions to be renamed or dropped. (Bug#50561)

See also Bug#47343, Bug#45808.

Partitioning: It was possible to execute a CREATE TEMPORARY TABLE tmp LIKE pt statement, where pt is a partitioned table, even though partitioned temporary tables are not permitted, which caused the server to crash. Now a check is performed to prevent such statements from being executed. (Bug#49477)

Partitioning: When attempting to perform DDL on a partitioned table and the table's .par file could not be found, the server returned the inaccurate error message Out of memory; restart server and try again (needed 2 bytes). Now in such cases, the server returns the error Failed to initialize partitions from .par file. (Bug#49161)

Replication: In some cases, attempting to update a column with a value of an incompatible type resulted in a mismatch between master and slave because the column value was set to its implicit default value on the master (as expected), but the same column on the slave was set to NULL. (Bug#52868)

Replication: When using a non-transactional table on the master with autocommit disabled, no COMMIT was recorded in the binary log following a statement affecting this table. If the slave's copy of the table used a transactional storage engine, the result on the slave was as though a transaction had been started, but never completed. (Bug#49522)

See also Bug#29288.

Replication: Reading from a table that used a self-logging storage engine and updating a table that used a transactional engine (such as InnoDB) generated changes that were written to the binary log using statement format which could make slaves diverge. However, when using mixed logging format, such changes should be written to the binary log using row format. (This issue did not occur when reading from tables using a self-logging engine and updating MyISAM tables, as this was already handled by checking for combinations of non-transactional and transactional engines.) Now such statements are classified as unsafe, and in mixed mode, cause a switch to row-based logging. (Bug#49019)

The server could crash with a message InnoDB: Assertion failure in thread nnnn, typically during shutdown on a Windows system. (Bug#53947)

Valgrind warnings resulting from passing incomplete DATETIME values to the TIMESTAMP() function were corrected. (Bug#53942)

Builds of the embedded mysqld would fail due to a missing element of the struct NET. (Bug#53908, Bug#53912)

UPDATE on an InnoDB table modifying the same index that was used to satisfy the WHERE condition could trigger a debug assertion under some circumstances. (Bug#53830)

MySQL incorrectly processed ALTER DATABASE `#mysql50#` UPGRADE DATA DIRECTORY NAME where was ., .., or a sequence starting with ./ or ../. It used the server data directory (that contains other regular databases) as the database directory. (Bug#53804, CVE-2010-2008)

InnoDB mistakenly considered the sequence /*/ to be an open/close comment sequence. (Bug#53644)

InnoDB crashed when replacing duplicates in a table after a fast ALTER TABLE added a unique index. (Bug#53592)

For InnoDB tables, the error handler for a fast CREATE INDEX did not reset the error state of the transaction before attempting to undo a failed operation, resulting in a crash. (Bug#53591)

For single-table DELETE statements that used quick select and index scan simultaneously caused a server crash or assertion failure. (Bug#53450)

Incorrect results could be returned for LEFT JOIN of InnoDB tables with an impossible WHERE condition. (Bug#53334)

Adding a unique key on multiple columns, where one of the columns is null, could mistakenly report duplicate key errors. (Bug#53290)

Fixed a checksum error reported for compressed tables when the --innodb_checksums option is enabled. (Bug#53248)

Corrected the handling of the setting innodb_change_buffering=default. (The appropriate default value is different between MySQL 5.1 and 5.5.) mysqldump and SELECT ... INTO OUTFILE truncated long BLOB and TEXT values to 766 bytes. In the debug version of the server, the FreeState() function could in some circumstances be called twice, leading to an assertion failure. Aggregate functions could incorrectly return NULL in outer join queries. The Loose Index Scan optimization method assumed that it could depend on the partitioning engine to maintain interval endpoint information, as if it were a storage engine. Calculation of intervals for Event Scheduler events was not portable. (Bug#50087)

Selecting from INFORMATION_SCHEMA.ROUTINES or INFORMATION_SCHEMA.PARAMETERS resulted in a memory leak.

Multi-statement execution could fail with an error about foreign key constraints. This problem could affect calls to mysql_query() and mysql_real_query(), and CALL statements that invoke stored procedures.

When the transaction isolation level was REPEATABLE READ and binary logging used statement or mixed format, SELECT statements with subqueries referencing InnoDB tables unnecessarily acquired shared locks on rows in these tables.

Using an initial command with mysql_options(..., MYSQL_INIT_COMMAND, ...) that generated multiple result sets (such as a stored procedure or a multi-statement command) left the connection unusable.

If a crash occurs while creating an index using the InnoDB Fast Index Creation mechanism, the partially created index is dropped during the crash recovery processing when the database is restarted.

Changes in MySQL 5.5.0 (07 December 2009 Milestone 2)

Previously, MySQL development proceeded by including a large set of features and moving them over many versions within a release series through several stages of maturity (Alpha, Beta, and so forth). This development model had a disadvantage in that problems with only part of the code could hinder timely release of the whole. As you might have found when testing MySQL Server 6.0, alpha quality code could jeopardize the stability of the entire release. (One consequence of this was that MySQL Server 6.0 has been withdrawn for now.)

MySQL development now uses a milestone model. The move to this model provides for more frequent milestone releases, with each milestone proceeding through a small number of releases having a focus on a specific subset of thoroughly tested features. Following the releases for one milestone, development proceeds with the next milestone; that is, another small number of releases that focuses on the next small set of features, also thoroughly tested.

MySQL 5.5.0-m2 is the first release for Milestone 2. The new features of this milestone may be considered to be initially of beta quality. For subsequent Milestone 2 releases, we plan to use increasing version numbers (5.5.1 and higher) while continuing to employ the -m2 suffix. For Milestone 3, we plan to change the suffix to -m3. Version designators with -alpha or -beta suffixes are no used.

Functionality added or changed:

Incompatible Change: MySQL Server now includes a plugin services interface that complements the plugin API. The services interface enables server functionality to be exposed as a service that plugins can access through a function-call interface. The libmysqlservices library provides access to the available services and dynamic plugins now must be linked against this library (use the -lmysqlservices flag). For an example showing what Makefile.am should look like, see Section22.2.6, MySQL Services for Plugins. (Bug#48461)

Incompatible Change: Several changes have been made regarding the language and character set of error messages:

The --language option for specifying the directory for the error message file is now deprecated. The new --lc-messages-dir and --lc-messages options should be used instead, and --language is handled as an alias for --lc-messages-dir.

The language system variable has been removed and replaced with the new lc_messages_dir and lc_messages system variables. lc_messages_dir has only a global value and is read only. lc_messages has global and session values and can be modified at runtime, so the error message language can be changed while the server is running, and individual clients each can have a different error message language by changing their session lc_messages value to a different locale name.

Error messages previously were constructed in a mix of character sets. This issue is resolved by constructing error messages internally within the server using UTF-8 and returning them to the client in the character set specified by the character_set_results system variable. The content of error messages therefore may in some cases differ from the messags returned previously.