- make the 'dist-hook' from top-level Makefile work again.
- we can find my_print_defaults from --basedir by parsing command
line arguments prior to running my_print_defaults.
- take advantage of additional command line parsing and allow the
--no-defaults etc arguments to work anywhere rather than having
to be the first argument.
- find SQL files either from binary archive or source install.
- consolidate and tidy code and error messages.
Removing a RESET MASTER inside the test since that will change binlog
positions in such a manner that the dual masters lose track of where
they acually are.
between perm and temp tables. Review fixes.
The original bug report complains that if we locked a temporary table
with LOCK TABLES statement, we would not leave LOCK TABLES mode
when this temporary table is dropped.
Additionally, the bug was escalated when it was discovered than
when a temporary transactional table that was previously
locked with LOCK TABLES statement was dropped, futher actions with
this table, such as UNLOCK TABLES, would lead to a crash.
The problem originates from incomplete support of transactional temporary
tables. When we added calls to handler::store_lock()/handler::external_lock()
to operations that work with such tables, we only covered the normal
server code flow and did not cover LOCK TABLES mode.
In LOCK TABLES mode, ::external_lock(LOCK) would sometimes be called without
matching ::external_lock(UNLOCK), e.g. when a transactional temporary table
was dropped. Additionally, this table would be left in the list of LOCKed
TABLES.
The patch aims to address this inadequacy. Now, whenever an instance
of 'handler' is destroyed, we assert that it was priorly
external_lock(UNLOCK)-ed. All the places that violate this assert
were fixed.
This patch introduces no changes in behavior -- the discrepancy in
behavior will be fixed when we start calling ::store_lock()/::external_lock()
for all tables, regardless whether they are transactional or not,
temporary or not.
The files below "mysql-test/suite/funcs_1" in version 5.1
did not depend on the equivalent ones in 5.0,
probably because they had been checked in independent of each other
in both versions.
Step 1:
Foreach file F in the suite that has a "deleted" counterpart D, use
bk rm $F
bk mv $D $F
to get those files into the 5.1 suite that (for BK) depend on 5.0.
INSERT/DELETE/UPDATE followed by ALTER TABLE within LOCK TABLES
may cause table corruption on Windows.
That happens because ALTER TABLE writes outdated shared state
info into index file.
Fixed by removing obsolete workaround.
Affects MyISAM tables on Windows only.
Bug#25422 (Hang with log tables)
Bug 17876 (Truncating mysql.slow_log in a SP after using cursor locks the
thread)
Bug 23044 (Warnings on flush of a log table)
Bug 29129 (Resetting general_log while the GLOBAL READ LOCK is set causes
a deadlock)
Prior to this fix, the server would hang when performing concurrent
ALTER TABLE or TRUNCATE TABLE statements against the LOG TABLES,
which are mysql.general_log and mysql.slow_log.
The root cause traces to the following code:
in sql_base.cc, open_table()
if (table->in_use != thd)
{
/* wait_for_condition will unlock LOCK_open for us */
wait_for_condition(thd, &LOCK_open, &COND_refresh);
}
The problem with this code is that the current implementation of the
LOGGER creates 'fake' THD objects, like
- Log_to_csv_event_handler::general_log_thd
- Log_to_csv_event_handler::slow_log_thd
which are not associated to a real thread running in the server,
so that waiting for these non-existing threads to release table locks
cause the dead lock.
In general, the design of Log_to_csv_event_handler does not fit into the
general architecture of the server, so that the concept of general_log_thd
and slow_log_thd has to be abandoned:
- this implementation does not work with table locking
- it will not work with commands like SHOW PROCESSLIST
- having the log tables always opened does not integrate well with DDL
operations / FLUSH TABLES / SET GLOBAL READ_ONLY
With this patch, the fundamental design of the LOGGER has been changed to:
- always open and close a log table when writing a log
- remove totally the usage of fake THD objects
- clarify how locking of log tables is implemented in general.
See WL#3984 for details related to the new locking design.
Additional changes (misc bugs exposed and fixed):
1)
mysqldump which would ignore some tables in dump_all_tables_in_db(),
but forget to ignore the same in dump_all_views_in_db().
2)
mysqldump would also issue an empty "LOCK TABLE" command when all the tables
to lock are to be ignored (numrows == 0), instead of not issuing the query.
3)
Internal errors handlers could intercept errors but not warnings
(see sql_error.cc).
4)
Implementing a nested call to open tables, for the performance schema tables,
exposed an existing bug in remove_table_from_cache(), which would perform:
in_use->some_tables_deleted=1;
against another thread, without any consideration about thread locking.
This call inside remove_table_from_cache() was not required anyway,
since calling mysql_lock_abort() takes care of aborting -- cleanly -- threads
that might hold a lock on a table.
This line (in_use->some_tables_deleted=1) has been removed.
Added libCsup as a mysql library dependency on hpux11.
This means any projects statically linking to our libraries using the HPUX11 compiler will need to add the -lCSup option to their build link options. If they use the mysql_config tool this will happen automatically.
Projects that dynamically link to libmysqlclient will continue to work without any modifications.
Library libCsup is a C++ runtime library needed for yassl support when built with the hpux11 C/C++ compiler. The first attempts to fix this bug were to remove the yassl dependencies on libCsup. We tried removing all pure virtual functions and other hacks, but the dependency remained. The only other options left involve extensive restructuring of the yassl library.
- make ha_berkeley::cmp_ref() take into account that auto-generated PKs
are stored in LSB-first order.
- Remove the temporary code that made the bugfix work for innodb only
5.1.20 -> 5.1.21 upgrades.
We generate mysql_fix_privilege.sql file, which contains SQL
statements required to upgrade the system database. This script
is generated by concatenation of mysql_system_tables.sql and
mysql_system_tables_fix.sql.
The problem was that
- in order to create general_log and slow_log tables we use
stored programs in mysql_system_tables.sql;
- we upgrade mysql.proc table in mysql_system_tables_fix.sql;
So, if mysql.proc table needs to be upgraded, stored procedures
can not be used in mysql_system_tables.sql.
In other words, in mysql_system_tables.sql stored programs must
not be used because they may be unavailable at this point.
The fix is to use dynamic SQL instead of stored programs.
There is no test case for this bug because our test suite
is not suitable for such test cases. system_mysql_db_fix* test
cases play with the database "test". Here we need to modify
the system database and we can not do that in the test suite.
available and reduce the chance of failure. This should fix bug#28585
which is caused by the script being quite random in how it finds files it
requires and not giving very good feedback to the user about what went
wrong.
Also update make_binary_distribution so that it provides the correct path
to the required SQL scripts when generating mysql_install_db. The script
only previously worked because of the permissive behaviour which looked
around the current working directory before the "correct" location. This
could lead to severe problems if the user happened to run the script from
a location which contained older or even broken copies of the SQL scripts.
We now require either a complete binary release (and the mysql_install_db
script ran from inside the extracted archive), or an installed compiled
tree, as this is the only way we can be sure everything that we need is
available and ready to run.
While working on this fix, also clean up the mysql_install_db script a lot
to make it simpler, easier to read, and hopefully less prone to bugs in
the future.
to 150 or 107 characters for those messages which are generated
by the embedded server during release builds.
This fixes bug#16635:
Error messages wrong: absolute path names, "%s" format code
See the bug report or the changelog for "sql/share/english/errmsg.txt"
for instructions how to do that with other languages,
even at the customer site, and for the restrictions to keep.
the master but on the slave
MySQL can decide to "downgrade" a INSERT DELAYED statement
to normal insert in certain situations.
One such situation is when the slave is replaying a
replication feed.
However INSERT DELAYED is logged even if there're no updates
whereas the NORMAL INSERT is not logged in such cases.
Fixed by always logging a "downgraded" INSERT DELAYED: even
if there were no updates.
Problem: trying to repair an old (e.g. with "old" varstring fields) corrupted
table with use_frm option we don't actually repair the table, just altering it
which may couse data loss.
Fix: if use_frm repair option is set, do repair instead of altering even
if the table needs upgrade.
"log.cc:1448: failed assertion `mysql_bin_log.is_open() && rex_data->empty()'"
When Federated's transaction support was disabled by bug29875,
this assertion became unreproducable.