Functionality added or changed:
INTERVAL(NULL, ...) returns -1.
INSERT from SELECT when the table into which the records
are inserted is also a table listed in the SELECT.
CREATE TABLE and INSERT from any UNION.
SQL_CALC_FOUND_ROWS option now always returns the total number
of rows for any UNION.
--table option from mysqlbinlog
to avoid repeating mysqldump functionality.
max_seeks_for_key variable that can
be used to force the optimiser to use keys instead of table scans
even if the cardinality of the index is low.
LEFT JOIN to normal join in
some cases.
CHANGE MASTER command. See section 4.10.7.9 CHANGE MASTER TO master_def_list (slave).
--nice option to mysqld_safe to allow setting the
niceness of the mysqld process. (Thanks to Christian Hammers for
providing the initial patch.) (Bug #627)
--read-only option to cause mysqld to allow no updates
except from slave threads or from users with the SUPER privilege.
(Original patch from Markus Benning).
SHOW BINLOG EVENTS FROM x where x is strictly less than 4 now
silently converts x to 4 instead of printing an error. The same change
was done for CHANGE MASTER TO MASTER_LOG_POS=x and
CHANGE MASTER TO RELAY_LOG_POS=x.
mysqld now only adds an interrupt handler for the SIGINT signal
if you start it with the new --gdb option. This is because some
MySQL users encountered strange problems when they accidentally sent SIGINT to
mysqld threads.
RESET SLAVE now clears the Last_errno and
Last_error fields in the output of SHOW SLAVE STATUS.
max_relay_log_size variable; the relay log will be rotated
automatically when its size exceeds max_relay_log_size. But if
max_relay_log_size is 0 (the default), max_binlog_size
will be used (as in older versions). max_binlog_size still
applies to binary logs in any case.
FLUSH LOGS now rotates relay logs in addition to the other types of
logs it already rotated.
Bugs fixed:
latin1_de character set was rewritten.
The old algorithm could not handle cases like "sä" > "ßa".
See section 4.6.1.1 German character set. In rare cases it resulted in table
corruption.
ALTER TABLE ... UNION=(...) for MERGE table is now allowed
even if some underlying MyISAM tables are read-only. (Bug #702)
CREATE TABLE t1 SELECT x'41'. (Bug #801)
REPAIR on a table with a multi-part
auto_increment key where one part was a packed CHAR.
INSERT statements not being replicated in the
event of a FLUSH LOGS command or when the binary log exceeds
max_binlog_size. (Bug #791)
INTERVAL and GROUP BY or
DISTINCT. (Bug #807)
mysqlhotcopy so it actually aborts for unsuccessful
table copying operations. Fixed another bug so that it succeeds
when there are thousands of tables to copy. (Bug #812)
mysqlhotcopy failing to read options from option
files. (Bug #808)
FULLTEXT indexes even though it was possible (for example, in
SELECT * FROM t1 WHERE MATCH a,b AGAINST("index") > 0).
UNION operations.
SHOW TABLES and
similar commands.
max_user_connections.
HANDLER without an index now works properly when a table has deleted
rows. (Bug #787)
LOAD DATA in mysqlbinlog. (Bug #670).
SET CHARACTER SET DEFAULT works. (Bug #462)
MERGE table behaviour in ORDER BY ... DESC queries.
(Bug #515)
PURGE MASTER LOGS or SHOW MASTER LOGS
when the binary log is off. (Bug #733)
DATETIME column and an integer
constant. (Bug #504)
mysqlbinlog. (Bug #672)
ERROR 1105: Unknown error that occurred for some SELECT
queries, where a column that was declared as NOT NULL was compared
with an expression that took NULL value.
mysql_real_connect() to use poll() instead of
select() to work around problem with many open files in the client.
MATCH ... AGAINST used with a
LEFT JOIN query.
mysqld variables
to 4294967295 when they are specified on the command line.
HANDLER ... READ statements, when a table is referenced
via an alias.
safe_malloc, which caused MySQL to
give "Freeing wrong aligned pointer" errors on SCO 3.2.
ALTER TABLE ... ENABLE/DISABLE KEYS could cause a core dump when
done after an INSERT DELAYED statement on the same table.
mysqld. (Bug #549)
INSERT ... SELECT into an AUTO_INCREMENT column
not replicate well. This bug is in the master, not in the slave.
(Bug #490)
INSERT ... SELECT statement inserted rows into a
non-transactional table, but failed at some point (for example, due to
a ``Duplicate key'' error), the query was not written to the binlog.
Now it is written to the binlog, with its error code, as all other
queries are. About the slave-skip-errors option for how to
handle partially completed queries in the slave, see section 4.10.6 Replication Options in `my.cnf'. (Bug #491)
SET FOREIGN_KEY_CHECKS=0 was not replicated properly.
The fix probably will not be backported to 3.23.
LOAD DATA INFILE which had no IGNORE or
REPLACE clause on the master, was replicated with IGNORE.
While this is not a problem if the master and slave data are identical
(a LOAD that produces no duplicate conflicts on the master will
produce none on the slave anyway), which is true in normal operation, it
is better for debugging not to silently add the IGNORE. That way,
you can get an error message on the slave and discover that for some
reason, the data on master and slave are different and investigate why.
(Bug #571)
LOAD DATA INFILE printed an incomplete ``Duplicate entry
'%-.64s' for key %d''' message (the key name and value were not mentioned)
in case of duplicate conflict (which does not happen in normal operation).
(Bug #573)
--debug, CHANGE MASTER
TO RELAY_LOG_POS could cause a debug assertion failure. (Bug #576)
LOCK TABLES WRITE on an InnoDB table, commit could
not happen, if the query was not written to the binary log (for example, if
--log-bin was not used, or binlog-ignore-db was
used). (Bug #578)
DROP TABLE statements to its binlog, then the 4.0.13
slave would not notice the temporary tables have to be dropped, until the
slave mysqld server is restarted. This minor inconvenience is
fixed in 3.23.57 and 4.0.14 (meaning the master must be upgraded to
3.23.57 and the slave to 4.0.14 to remove the inconvenience). (Bug #254)
MASTER_POS_WAIT() was waiting, and the slave was idle, and
the SQL slave thread terminated, MASTER_POS_WAIT() would wait
forever. Now when the SQL slave thread terminates,
MASTER_POS_WAIT() immediately returns NULL (``slave
stopped''). (Bug #651)
RESET SLAVE; START SLAVE;, the Relay_log_space value
displayed by SHOW SLAVE STATUS was too big by four bytes. (Bug #763)
replicate-ignore-table and other similar rules), the slave
still checked if the query got the same error code (0, no error) as on
the master. So if the master had an error on the query (for example,
``Duplicate entry'' in a multiple-row insert), then the slave stopped
and warned that the error codes didn't match. (Bug #797)
| Posted by Shane Allen on Friday June 6 2003, @12:40pm | [Delete] [Edit] |
# Fixed a bug (accidentally introduced by us, only in version 4.0.13) which made INSERT ... SELECT in an auto_increment column not replicate well. This bug is in the master, not in the slave. Bug #490.
This changelog line is kind of misleading. If you have a master->slave set up, running an INSERT ... SELECT will not, in my experience replicate. It will generate a duplicate key error on the slave, because the master will binlog a SET INSERT_ID=##; statement where it doesn't belong, which will lead to the slave stopping when you hit a duplicate key.
| Posted by [name withheld] on Thursday July 10 2003, @7:13am | [Delete] [Edit] |
Could you add a 'PURGE RELAY LOGS' command similar to 'PURGE MASTER LOGS' ?
Or is there already a way of doing that ?