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 ?