by binlogging some SET ONE_SHOT CHARACTER_SETetc,
which will be enough until we have it more compact and more complete in 5.0. With the present patch,
replication will work ok between 4.1.3 master and slaves, as long as:
- master and slave have the same GLOBAL.COLLATION_SERVER
- COLLATION_DATABASE and CHARACTER_SET_DATABASE are not used
- application does not use the fact that table is created with charset of the USEd db (BUG#2326).
all of which are not too hard to fulfill.
ONE_SHOT is reserved for internal use of mysqlbinlog|mysql and works only for charsets,
so we give error if used for non-charset vars.
Fix for BUG#3875 "mysqlbinlog produces wrong ouput if query uses
variables containing quotes" and BUG#3943 "Queries with non-ASCII literals are not replicated
properly after SET NAMES".
Detecting that master and slave have different global charsets or server ids.
'SHOW GRANTS' syntax is added
'SHOW GRANTS FOR CURRENT_USER' syntax is added
'SHOW GRANTS FOR CURRENT_USER()' syntax is added
CURRENT_USER without parens in expressions(SELECT CURRENT_USER;)
and for (2) converting the columns:
1. ALTER TABLE t1 [DEFAULT] CHARACTER SET xxx [COLLATE yyy]
2. ALTER TABLE t1 CONVERT TO CHARACTER SET xxx [COLLATE yyy]
CREATE TABLE t1(a NVARCHAR(10))
This is for compatibility with MSSQL, DB2, Informix and some other DBMSs.
Note, standard SQL doesn't have "NVARCHAR" syntax.
There are only these syntaxes in SQL2003:
NATIONAL VARCHAR
NCHAR VARCHAR
NATIONAL CHARACTER VARYING
NCHAR VARYING
- Tests were added for all the above syntaxes.
Added proper options to CHANGE MASTER TO, new fields to SHOW SLAVE STATUS,
Honoring this parameters during connection to master.
Introduced new format of master.info file
Add syntax SAVEPOINT id and ROLLBACK TO SAVEPOINT id. This is compatible with DB2 and Oracle but not with SQL Server. Savepoints do not do anything yet, this is just parsing.
now by default, FLUSH, OPTIMIZE, ANALYZE, REPAIR commands are written to the
binlog, unless the new NO_WRITE_TO_BINLOG keyword was used :
OPTIMIZE NO_WRITE_TO_BINLOG table t;
Previously these commands were never written to the binlog, but there are
2 reasons to change this :
- the RENAME TABLE in MERGE table bug (#175) on slave
- the possible "differently optimised queries may lead to different
updates on the master and slave" bug, until we have automatic ORDER BY.
FLUSH LOGS/SLAVE/MASTER/TABLES WITH READ LOCK are never written to the binlog.
New test for the new logging behaviour.
Other small change : reload_acl_and_cache() and reset_slave() don't send their errors themselves,
this is more usual.