Merge lp:~akopytov/percona-server/backup-locks into lp:percona-server/5.6

Proposed by Alexey Kopytov
Status: Merged
Approved by: Laurynas Biveinis
Approved revision: no longer in the source branch.
Merged at revision: 545
Proposed branch: lp:~akopytov/percona-server/backup-locks
Merge into: lp:percona-server/5.6
Diff against target: 6342 lines (+5557/-63) (has conflicts)
42 files modified
client/client_priv.h (+4/-0)
client/mysqldump.c (+83/-3)
mysql-test/include/backup_locks_binlog.inc (+803/-0)
mysql-test/r/backup_locks.result (+883/-0)
mysql-test/r/backup_locks_binlog_mixed.result (+573/-0)
mysql-test/r/backup_locks_binlog_row.result (+579/-0)
mysql-test/r/backup_locks_binlog_stmt.result (+575/-0)
mysql-test/r/backup_locks_mysqldump.result (+143/-0)
mysql-test/suite/funcs_1/r/storedproc.result (+3/-1)
mysql-test/suite/funcs_1/t/storedproc.test (+1/-1)
mysql-test/suite/rpl/r/rpl_backup_locks.result (+34/-0)
mysql-test/suite/rpl/t/rpl_backup_locks.test (+95/-0)
mysql-test/suite/sys_vars/r/have_backup_locks_basic.result (+11/-0)
mysql-test/suite/sys_vars/t/have_backup_locks_basic.test (+7/-0)
mysql-test/t/backup_locks.test (+1091/-0)
mysql-test/t/backup_locks_binlog_mixed.test (+9/-0)
mysql-test/t/backup_locks_binlog_row.test (+9/-0)
mysql-test/t/backup_locks_binlog_stmt.test (+9/-0)
mysql-test/t/backup_locks_mysqldump.test (+58/-0)
sql/binlog.cc (+27/-1)
sql/handler.h (+7/-0)
sql/lock.cc (+145/-0)
sql/log_event.cc (+19/-0)
sql/mdl.cc (+54/-23)
sql/mdl.h (+2/-0)
sql/mysqld.cc (+6/-0)
sql/rpl_rli.cc (+24/-0)
sql/set_var.h (+1/-0)
sql/share/errmsg-utf8.txt (+4/-0)
sql/sql_base.cc (+46/-0)
sql/sql_class.cc (+8/-0)
sql/sql_class.h (+49/-0)
sql/sql_cmd.h (+2/-0)
sql/sql_insert.cc (+34/-14)
sql/sql_parse.cc (+91/-1)
sql/sql_reload.cc (+3/-1)
sql/sql_yacc.yy (+31/-13)
sql/sys_vars.cc (+27/-1)
storage/blackhole/ha_blackhole.cc (+1/-1)
storage/federated/ha_federated.cc (+2/-1)
storage/innobase/handler/ha_innodb.cc (+2/-1)
storage/perfschema/ha_perfschema.cc (+2/-1)
Text conflict in client/client_priv.h
To merge this branch: bzr merge lp:~akopytov/percona-server/backup-locks
Reviewer Review Type Date Requested Status
Laurynas Biveinis (community) Needs Fixing
Review via email: mp+207410@code.launchpad.net

This proposal supersedes a proposal from 2014-02-17.

Description of the change

    Implementation of
    https://blueprints.launchpad.net/percona-server/+spec/backup-locks

    The patch introduces 3 new SQL statements, LOCK TABLES FOR BACKUP, LOCK
    BINLOG FOR BACKUP and UNLOCK BINLOG, that can be used as a lightweight
    alternative to FLUSH TABLES WITH READ LOCK for both physical and logical
    backups.

    LOCK TABLES FOR BACKUP uses a new MDL lock type to block updates to
    all non-transactional tables and DDL statements for all tables. More
    specifically, if there’s an active LOCK TABLES FOR BACKUP lock, all
    DDL statements and all updates to MyISAM, CSV, MEMORY and ARCHIVE
    tables will be blocked in the “Waiting for backup lock” status as
    seen in PERFORMANCE_SCHEMA or PROCESSLIST. SELECT queries for all
    tables and INSERT/UPDATE/DELETE against InnoDB, Blackhole and
    Federated tables are not affected by LOCK TABLES FOR BACKUP. UNLOCK
    TABLES releases the lock acquired by LOCK TABLES FOR BACKUP.

    LOCK BINLOG FOR BACKUP uses another MDL lock type to block all
    operations that might change either binary log position or
    Exec_Master_Log_Pos (i.e. master binary log position corresponding
    to the current SQL thread state on a replication slave) as reported
    by SHOW MASTER/SLAVE STATUS. More specifically, a commit will only
    be blocked if the binary log is enabled (both globally, and for
    connection with sql_log_bin), or if commit is performed by a slave
    thread and would advance Exec_Master_Log_Pos. Connections that are
    currently blocked on the global binlog lock can be identified by the
    “Waiting for binlog lock” status in PROCESSLIST.

    UNLOCK BINLOG releases the LOCK BINLOG FOR BACKUP lock, if acquired by
    the current connection. The intended use case for XtraBackup is:

    LOCK TABLES FOR BACKUP
    ... copy .frm, MyISAM, CSV, etc. ...
    LOCK BINLOG FOR BACKUP
    UNLOCK TABLES
    ... get binlog coordinates ...
    ... wait for redo log copying to finish ...
    UNLOCK BINLOG

    Both LOCK TABLES FOR BACKUP and LOCK BINLOG FOR BACKUP have no effect if
    the current connection already owns a FTWRL lock, as it’s a more
    restrictive lock. If FTWRL is executed in a connection that has acquired
    LTFB or LBFB, FTWRL fails with an error.

    mysqldump has also been extended with a new option,
    --lock-for-backup (disabled by default). When used together with the
    --single-transaction option, the option makes mysqldump issue LOCK
    TABLES FOR BACKUP before starting the dump operation to prevent
    unsafe statements that would normally result in an inconsistent
    backup. When used without the --single-transaction option,
    --lock-for-backup is automatically converted to
    --lock-all-tables. --lock-for-backup is mutually exclusive with
    --lock-all-tables, i.e. specifying both on the command line will
    lead to an error. If the backup locks feature is not supported by
    the target server, but --lock-for-backup is specified on the command
    line, mysqldump aborts with an error.

To post a comment you must log in.
Revision history for this message
Alexey Kopytov (akopytov) wrote : Posted in a previous version of this proposal
Revision history for this message
Alexey Kopytov (akopytov) wrote : Posted in a previous version of this proposal

Removed a few spurious changes, added missing code comments, updated revision comments.

Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote : Posted in a previous version of this proposal
Download full text (3.7 KiB)

    If time is short, this may go in as-is and the review comments can
    be addressed in a follow-up as needed.

    core:

    - Is the binlogging of "ROLLBACK" statement properly protected,
      i.e. does the ordered_commit call in MYSQL_BIN_LOG::rollback
      need the protection too? The testcase would be: start
      transaction, write to both InnoDB and MyISAM tables, ROLLBACK.

    - I was not able to figure out why do we need binlog lock
      protection in Rotate_log_event::do_update_pos?

    - Nor I was able to figure out why dispatch_command added

@@ -1877,6 +1877,14 @@

   THD_STAGE_INFO(thd, stage_cleaning_up);

+ if (thd->killed == THD::KILL_QUERY ||
+ thd->killed == THD::KILL_TIMEOUT ||
+ thd->killed == THD::KILL_BAD_DATA)
+ {
+ thd->killed= THD::NOT_KILLED;
+ thd->mysys_var->abort= 0;
+ }
+
   thd->reset_query();
   thd->set_command(COM_SLEEP);

    - Dead store error= 1 in the case of
      backup_binlog_lock.acquire_protection failure.

    - Indentation error at sql_parse.cc line 4233

    parser:

    - The parser changes cause "unlock" as a statement label to be
      treated as ER_PARSE_ERROR instead ER_SP_BADSTATEMENT, as
      recorded in funcs_1/storedproc. Which leaves the if
      (lex->sphead) ... in unlock symbol rule as dead code. Is that
      intentional? It is possible to avoid this by rewriting it as

unlock:
          UNLOCK_SYM
          {
            LEX *lex= Lex;

            if (lex->sphead)
            {
              my_error(ER_SP_BADSTATEMENT, MYF(0), "UNLOCK");
              MYSQL_YYABORT;
            }
          }
          unlock_variant
          {}
 ;

unlock_variant:
          BINLOG_SYM
          {
            Lex->sql_command= SQLCOM_UNLOCK_BINLOG;
          }
        | table_or_tables
          {
            Lex->sql_command= SQLCOM_UNLOCK_TABLES;
          }
        ;

      which is also a bit more localized change against trunk.

    mysqldump:

    - might be good to include a note in docs that --lock-for-backup
      always disables --lock-tables (by --single-transaction if
      specified or by --lock-for-backup converted to --lock-all-tables
      otherwise).

    - It looks like mysqldump will issue an unbalanced UNLOCK TABLES
      if --single-transaction is the only option given. This appears
      to be benign and pre-existing.

    MTR:

    - possible to do s/STOP SLAVE;--source
      include/wait_for_slave_to_stop.inc/--source
      include/stop_slave.inc, likewise for START SLAVE, unless for
      some reason you prefer the current form?

    - It is of course true that there are many possible test
      combinations that could be added to the testcases. I tried to
      list a selected few that are single-threaded and IMHO required:

    - Need a test that checks for a LTFB/LBFB failure if issued by a
      user without RELOAD privilege.

    - Need a test for crash-safe slave: slave server binlog on, log
      slave updates off, --master-info-repository=TABLE,
      --relay-log-info-repository=TABLE, LOCK BINLOG on the slave,
      verify that updates from the master are not blocked.

    - I was not able to find a test where a single connection w...

Read more...

review: Needs Information
Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote :
Download full text (3.7 KiB)

(posting on the right MP)

    If time is short, this may go in as-is and the review comments can
    be addressed in a follow-up as needed.

    core:

    - Is the binlogging of "ROLLBACK" statement properly protected,
      i.e. does the ordered_commit call in MYSQL_BIN_LOG::rollback
      need the protection too? The testcase would be: start
      transaction, write to both InnoDB and MyISAM tables, ROLLBACK.

    - I was not able to figure out why do we need binlog lock
      protection in Rotate_log_event::do_update_pos?

    - Nor I was able to figure out why dispatch_command added

@@ -1877,6 +1877,14 @@

   THD_STAGE_INFO(thd, stage_cleaning_up);

+ if (thd->killed == THD::KILL_QUERY ||
+ thd->killed == THD::KILL_TIMEOUT ||
+ thd->killed == THD::KILL_BAD_DATA)
+ {
+ thd->killed= THD::NOT_KILLED;
+ thd->mysys_var->abort= 0;
+ }
+
   thd->reset_query();
   thd->set_command(COM_SLEEP);

    - Dead store error= 1 in the case of
      backup_binlog_lock.acquire_protection failure.

    - Indentation error at sql_parse.cc line 4233

    parser:

    - The parser changes cause "unlock" as a statement label to be
      treated as ER_PARSE_ERROR instead ER_SP_BADSTATEMENT, as
      recorded in funcs_1/storedproc. Which leaves the if
      (lex->sphead) ... in unlock symbol rule as dead code. Is that
      intentional? It is possible to avoid this by rewriting it as

unlock:
          UNLOCK_SYM
          {
            LEX *lex= Lex;

            if (lex->sphead)
            {
              my_error(ER_SP_BADSTATEMENT, MYF(0), "UNLOCK");
              MYSQL_YYABORT;
            }
          }
          unlock_variant
          {}
 ;

unlock_variant:
          BINLOG_SYM
          {
            Lex->sql_command= SQLCOM_UNLOCK_BINLOG;
          }
        | table_or_tables
          {
            Lex->sql_command= SQLCOM_UNLOCK_TABLES;
          }
        ;

      which is also a bit more localized change against trunk.

    mysqldump:

    - might be good to include a note in docs that --lock-for-backup
      always disables --lock-tables (by --single-transaction if
      specified or by --lock-for-backup converted to --lock-all-tables
      otherwise).

    - It looks like mysqldump will issue an unbalanced UNLOCK TABLES
      if --single-transaction is the only option given. This appears
      to be benign and pre-existing.

    MTR:

    - possible to do s/STOP SLAVE;--source
      include/wait_for_slave_to_stop.inc/--source
      include/stop_slave.inc, likewise for START SLAVE, unless for
      some reason you prefer the current form?

    - It is of course true that there are many possible test
      combinations that could be added to the testcases. I tried to
      list a selected few that are single-threaded and IMHO required:

    - Need a test that checks for a LTFB/LBFB failure if issued by a
      user without RELOAD privilege.

    - Need a test for crash-safe slave: slave server binlog on, log
      slave updates off, --master-info-repository=TABLE,
      --relay-log-info-repository=TABLE, LOCK BINLOG on the slave,
      verify that updates from the master are not blocked.

    - I was not able to find a test ...

Read more...

review: Needs Information
Revision history for this message
Alexey Kopytov (akopytov) wrote : Posted in a previous version of this proposal

> Review: Needs Information
>
> If time is short, this may go in as-is and the review comments can
> be addressed in a follow-up as needed.
>
> core:
>
> - Is the binlogging of "ROLLBACK" statement properly protected,
> i.e. does the ordered_commit call in MYSQL_BIN_LOG::rollback
> need the protection too? The testcase would be: start
> transaction, write to both InnoDB and MyISAM tables, ROLLBACK.
>

No, ROLLBACK does not need protection for the same reasons as FTWRL
only blocks COMMITs, but not ROLLBACKs.

> - I was not able to figure out why do we need binlog lock
> protection in Rotate_log_event::do_update_pos?
>

Because it updates master binary coordinates via
Relay_log_info::inc_group_relay_log_pos().

> - Nor I was able to figure out why dispatch_command added
>
> @@ -1877,6 +1877,14 @@
>
> THD_STAGE_INFO(thd, stage_cleaning_up);
>
> + if (thd->killed == THD::KILL_QUERY ||
> + thd->killed == THD::KILL_TIMEOUT ||
> + thd->killed == THD::KILL_BAD_DATA)
> + {
> + thd->killed= THD::NOT_KILLED;
> + thd->mysys_var->abort= 0;
> + }
> +
> thd->reset_query();
> thd->set_command(COM_SLEEP);
>

That is required to properly handle errors in situations when a COMMIT is
waiting on a binlog lock and that fails for whatever reasons.

> - Dead store error= 1 in the case of
> backup_binlog_lock.acquire_protection failure.

Removed.

>
> - Indentation error at sql_parse.cc line 4233
>

Fixed.

> parser:
>
> - The parser changes cause "unlock" as a statement label to be
> treated as ER_PARSE_ERROR instead ER_SP_BADSTATEMENT, as
> recorded in funcs_1/storedproc. Which leaves the if
> (lex->sphead) ... in unlock symbol rule as dead code. Is that
> intentional? It is possible to avoid this by rewriting it as
>

That is not dead code. That code prevents UNLOCK TABLES/BINLOG from
inclusion into stored procedures. In fact, the current behavior re:
unlock as a statement label is more correct. It is indeed not a
statement that is not allowed in SP, but a genuine parse error.

[...]

> MTR:
>
> - possible to do s/STOP SLAVE;--source
> include/wait_for_slave_to_stop.inc/--source
> include/stop_slave.inc, likewise for START SLAVE, unless for
> some reason you prefer the current form?
>

For my purposes, both would be exactly the same sequence of commands
executed by MTR.

> - It is of course true that there are many possible test
> combinations that could be added to the testcases. I tried to
> list a selected few that are single-threaded and IMHO required:
>

I have all of that + many more items in my list of things that would be
nice to test. I simply don’t have time for that ATM. Feel free to create
a QA request, and I will chime in with more suggestions.

--
Best regards,
Alexey.

Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote :

OK, I see. All the explanations make sense (in fact are obvious; sorry for having missed them).

review: Approve
Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote :
review: Needs Fixing
Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote : Posted in a previous version of this proposal

> I have all of that + many more items in my list of things that would be
> nice to test. I simply don’t have time for that ATM. Feel free to create
> a QA request, and I will chime in with more suggestions.

OK: https://blueprints.launchpad.net/percona-server/+spec/backup-locks-mtr

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'client/client_priv.h'
2--- client/client_priv.h 2014-02-15 00:23:41 +0000
3+++ client/client_priv.h 2014-02-25 07:31:10 +0000
4@@ -104,7 +104,11 @@
5 OPT_SERVER_PUBLIC_KEY,
6 OPT_ENABLE_CLEARTEXT_PLUGIN,
7 OPT_INNODB_OPTIMIZE_KEYS,
8+<<<<<<< TREE
9 OPT_REWRITE_DB,
10+=======
11+ OPT_LOCK_FOR_BACKUP,
12+>>>>>>> MERGE-SOURCE
13 OPT_MAX_CLIENT_OPTION
14 };
15
16
17=== modified file 'client/mysqldump.c'
18--- client/mysqldump.c 2013-12-16 08:45:31 +0000
19+++ client/mysqldump.c 2014-02-25 07:31:10 +0000
20@@ -143,6 +143,7 @@
21 static char * opt_mysql_unix_port=0;
22 static char *opt_bind_addr = NULL;
23 static int first_error=0;
24+static uint opt_lock_for_backup= 0;
25 static DYNAMIC_STRING extended_row;
26 #include <sslopt-vars.h>
27 FILE *md_result_file= 0;
28@@ -247,6 +248,11 @@
29 "Adds 'STOP SLAVE' prior to 'CHANGE MASTER' and 'START SLAVE' to bottom of dump.",
30 &opt_slave_apply, &opt_slave_apply, 0, GET_BOOL, NO_ARG,
31 0, 0, 0, 0, 0, 0},
32+ {"lock-for-backup", OPT_LOCK_FOR_BACKUP, "Use lightweight metadata locks "
33+ "to block updates to non-transactional tables and DDL to all tables. "
34+ "This works only with --single-transaction, otherwise this option is "
35+ "automatically converted to --lock-all-tables.", &opt_lock_for_backup,
36+ &opt_lock_for_backup, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
37 {"bind-address", 0, "IP address to bind to.",
38 (uchar**) &opt_bind_addr, (uchar**) &opt_bind_addr, 0, GET_STR,
39 REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
40@@ -995,6 +1001,23 @@
41 return(EX_USAGE);
42 }
43
44+ if (opt_lock_for_backup && opt_lock_all_tables)
45+ {
46+ fprintf(stderr, "%s: You can't use --lock-for-backup and "
47+ "--lock-all-tables at the same time.\n", my_progname);
48+ return(EX_USAGE);
49+ }
50+
51+ /*
52+ Convert --lock-for-backup to --lock-all-tables if --single-transaction is
53+ not specified.
54+ */
55+ if (!opt_single_transaction && opt_lock_for_backup)
56+ {
57+ opt_lock_all_tables= 1;
58+ opt_lock_for_backup= 0;
59+ }
60+
61 /* We don't delete master logs if slave data option */
62 if (opt_slave_data)
63 {
64@@ -5390,6 +5413,20 @@
65 "FLUSH TABLES WITH READ LOCK") );
66 }
67
68+/**
69+ Execute LOCK TABLES FOR BACKUP if supported by the server.
70+
71+ @note If LOCK TABLES FOR BACKUP is not supported by the server, then nothing
72+ is done and no error condition is returned.
73+
74+ @returns whether there was an error or not
75+*/
76+
77+static int do_lock_tables_for_backup(MYSQL *mysql_con)
78+{
79+ return mysql_query_with_error_report(mysql_con, 0,
80+ "LOCK TABLES FOR BACKUP");
81+}
82
83 static int do_unlock_tables(MYSQL *mysql_con)
84 {
85@@ -6153,6 +6190,35 @@
86 die(EX_MYSQLERR, DYNAMIC_STR_ERROR_MSG);
87 }
88
89+/**
90+ Check if the server supports LOCK TABLES FOR BACKUP.
91+
92+ @returns TRUE if there is support, FALSE otherwise.
93+*/
94+
95+static my_bool server_supports_backup_locks(void)
96+{
97+ MYSQL_RES *res;
98+ MYSQL_ROW row;
99+ my_bool rc;
100+
101+ if (mysql_query_with_error_report(mysql, &res,
102+ "SHOW VARIABLES LIKE 'have_backup_locks'"))
103+ return FALSE;
104+
105+ if ((row= mysql_fetch_row(res)) == NULL)
106+ {
107+ mysql_free_result(res);
108+ return FALSE;
109+ }
110+
111+ rc= mysql_num_fields(res) > 1 && !strcmp(row[1], "YES");
112+
113+ mysql_free_result(res);
114+
115+ return rc;
116+}
117+
118
119 int main(int argc, char **argv)
120 {
121@@ -6194,12 +6260,25 @@
122 if (!path)
123 write_header(md_result_file, *argv);
124
125+ if (opt_lock_for_backup && !server_supports_backup_locks())
126+ {
127+ fprintf(stderr, "%s: Error: --lock-for-backup was specified with "
128+ "--single-transaction, but the server does not support "
129+ "LOCK TABLES FOR BACKUP.\n",
130+ my_progname);
131+ goto err;
132+ }
133+
134 if (opt_slave_data && do_stop_slave_sql(mysql))
135 goto err;
136
137 if ((opt_lock_all_tables || opt_master_data ||
138- (opt_single_transaction && flush_logs)) &&
139- do_flush_tables_read_lock(mysql))
140+ (opt_single_transaction && flush_logs)))
141+ {
142+ if (do_flush_tables_read_lock(mysql))
143+ goto err;
144+ }
145+ else if (opt_lock_for_backup && do_lock_tables_for_backup(mysql))
146 goto err;
147
148 /*
149@@ -6244,7 +6323,8 @@
150 goto err;
151 if (opt_slave_data && do_show_slave_status(mysql))
152 goto err;
153- if (opt_single_transaction && do_unlock_tables(mysql)) /* unlock but no commit! */
154+ if (opt_single_transaction && (!opt_lock_for_backup || opt_master_data) &&
155+ do_unlock_tables(mysql)) /* unlock but no commit! */
156 goto err;
157
158 if (opt_alltspcs)
159
160=== added file 'mysql-test/include/backup_locks_binlog.inc'
161--- mysql-test/include/backup_locks_binlog.inc 1970-01-01 00:00:00 +0000
162+++ mysql-test/include/backup_locks_binlog.inc 2014-02-25 07:31:10 +0000
163@@ -0,0 +1,803 @@
164+########################################################################
165+# Binlog-related backup locks tests
166+########################################################################
167+
168+--source include/have_innodb.inc
169+--source include/not_embedded.inc
170+--source include/have_archive.inc
171+--source include/have_csv.inc
172+--source include/have_blackhole.inc
173+--source include/have_log_bin.inc
174+
175+SELECT @@binlog_format;
176+
177+RESET MASTER;
178+
179+SHOW VARIABLES LIKE 'have_backup_locks';
180+
181+--echo #-----------------------------------------------------------------------
182+--echo # Setup
183+--echo #-----------------------------------------------------------------------
184+
185+# Save the initial number of concurrent sessions.
186+--source include/count_sessions.inc
187+
188+CREATE TABLE t_innodb(a INT NOT NULL, KEY (a)) ENGINE=InnoDB;
189+CREATE TABLE t_myisam(a INT NOT NULL, KEY (a)) ENGINE=MyISAM;
190+CREATE TABLE t_memory(a INT NOT NULL, KEY (a)) ENGINE=MEMORY;
191+CREATE TABLE t_csv(a INT NOT NULL) ENGINE=CSV;
192+CREATE TABLE t_blackhole(a INT NOT NULL, KEY (a)) ENGINE=BLACKHOLE;
193+CREATE TABLE t_archive(a INT NOT NULL) ENGINE=ARCHIVE;
194+
195+CREATE VIEW v_innodb AS SELECT * FROM t_innodb;
196+CREATE VIEW v_myisam AS SELECT * FROM t_myisam;
197+CREATE VIEW v_memory AS SELECT * FROM t_memory;
198+CREATE VIEW v_csv AS SELECT * FROM t_csv;
199+CREATE VIEW v_blackhole AS SELECT * FROM t_blackhole;
200+CREATE VIEW v_archive AS SELECT * FROM t_archive;
201+
202+--echo #-----------------------------------------------------------------------
203+--echo # Single-threaded tests
204+--echo #-----------------------------------------------------------------------
205+
206+#
207+# LBFB + DML/DDL in the same connection
208+#
209+
210+LOCK BINLOG FOR BACKUP;
211+
212+DELETE FROM t_innodb;
213+INSERT INTO t_innodb VALUES(0);
214+UPDATE t_innodb SET a = 1;
215+REPLACE INTO t_innodb VALUES(1);
216+SELECT * from t_innodb;
217+HANDLER t_innodb OPEN;
218+HANDLER t_innodb READ a FIRST;
219+HANDLER t_innodb CLOSE;
220+
221+DELETE FROM t_myisam;
222+INSERT INTO t_myisam VALUES(0);
223+UPDATE t_myisam SET a = 1;
224+REPLACE INTO t_myisam VALUES(1);
225+SELECT * from t_myisam;
226+HANDLER t_myisam OPEN;
227+HANDLER t_myisam READ a FIRST;
228+HANDLER t_myisam CLOSE;
229+
230+DELETE FROM t_memory;
231+INSERT INTO t_memory VALUES(0);
232+UPDATE t_memory SET a = 1;
233+REPLACE INTO t_memory VALUES(1);
234+SELECT * from t_memory;
235+
236+DELETE FROM t_archive;
237+INSERT INTO t_archive VALUES(0);
238+SELECT * from t_archive;
239+
240+DELETE FROM t_csv;
241+INSERT INTO t_csv VALUES(0);
242+UPDATE t_csv SET a = 1;
243+REPLACE INTO t_csv VALUES(1);
244+SELECT * from t_csv;
245+
246+DELETE FROM t_blackhole;
247+INSERT INTO t_blackhole VALUES(0);
248+UPDATE t_blackhole SET a = 1;
249+REPLACE INTO t_blackhole VALUES(1);
250+SELECT * from t_blackhole;
251+
252+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
253+CREATE TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
254+CREATE TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
255+CREATE TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
256+CREATE TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
257+CREATE TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
258+
259+DROP TABLE tt_innodb;
260+DROP TABLE tt_myisam;
261+DROP TABLE tt_memory;
262+DROP TABLE tt_csv;
263+DROP TABLE tt_blackhole;
264+DROP TABLE tt_archive;
265+
266+--error ER_BAD_TABLE_ERROR
267+DROP TABLE non_existing;
268+
269+TRUNCATE TABLE t_innodb;
270+TRUNCATE TABLE t_myisam;
271+TRUNCATE TABLE t_memory;
272+TRUNCATE TABLE t_csv;
273+TRUNCATE TABLE t_blackhole;
274+
275+RENAME TABLE t_innodb TO tmp, tmp TO t_innodb;
276+RENAME TABLE t_myisam TO tmp, tmp TO t_myisam;
277+RENAME TABLE t_memory TO tmp, tmp TO t_memory;
278+RENAME TABLE t_csv TO tmp, tmp TO t_csv;
279+RENAME TABLE t_blackhole TO tmp, tmp TO t_blackhole;
280+RENAME TABLE t_archive TO tmp, tmp TO t_archive;
281+
282+ALTER TABLE t_innodb ADD COLUMN b CHAR(10) NOT NULL;
283+ALTER TABLE t_innodb DROP COLUMN b;
284+ALTER TABLE t_myisam ADD COLUMN b CHAR(10) NOT NULL;
285+ALTER TABLE t_myisam DROP COLUMN b;
286+ALTER TABLE t_memory ADD COLUMN b CHAR(10) NOT NULL;
287+ALTER TABLE t_memory DROP COLUMN b;
288+ALTER TABLE t_csv ADD COLUMN b CHAR(10) NOT NULL;
289+ALTER TABLE t_csv DROP COLUMN b;
290+ALTER TABLE t_blackhole ADD COLUMN b CHAR(10) NOT NULL;
291+ALTER TABLE t_blackhole DROP COLUMN b;
292+ALTER TABLE t_archive ADD COLUMN b CHAR(10) NOT NULL;
293+ALTER TABLE t_archive DROP COLUMN b;
294+
295+ALTER TABLE t_innodb ADD KEY tmp (a);
296+ALTER TABLE t_innodb DROP KEY tmp;
297+ALTER TABLE t_myisam ADD KEY tmp (a);
298+ALTER TABLE t_myisam DROP KEY tmp;
299+ALTER TABLE t_memory ADD KEY tmp (a);
300+ALTER TABLE t_memory DROP KEY tmp;
301+ALTER TABLE t_blackhole ADD KEY tmp (a);
302+ALTER TABLE t_blackhole DROP KEY tmp;
303+
304+CREATE DATABASE test1;
305+DROP DATABASE test1;
306+
307+delimiter |;
308+
309+CREATE PROCEDURE p1()
310+BEGIN
311+ SELECT 1;
312+END|
313+
314+DROP PROCEDURE p1|
315+
316+CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
317+BEGIN
318+ RETURN 1;
319+END|
320+
321+DROP FUNCTION f1|
322+
323+delimiter ;|
324+
325+CREATE VIEW v1 AS SELECT * FROM t_innodb;
326+DROP VIEW v1;
327+
328+INSERT INTO v_innodb VALUES(1);
329+INSERT INTO v_blackhole VALUES(1);
330+INSERT INTO v_myisam VALUES(1);
331+INSERT INTO v_csv VALUES(1);
332+INSERT INTO v_memory VALUES(1);
333+INSERT INTO v_archive VALUES(1);
334+
335+UNLOCK BINLOG;
336+
337+#
338+# Test incompatibility with delay_key_write=ALL
339+#
340+SELECT @@delay_key_write;
341+
342+SET GLOBAL delay_key_write=ALL;
343+--error ER_OPTION_PREVENTS_STATEMENT
344+LOCK TABLES FOR BACKUP;
345+
346+SET GLOBAL delay_key_write=default;
347+SELECT @@delay_key_write;
348+
349+#
350+# read-only=1 + backup locks
351+#
352+
353+SET GLOBAL read_only=1;
354+
355+INSERT INTO t_innodb VALUES(0);
356+INSERT INTO t_myisam VALUES(0);
357+
358+LOCK TABLES FOR BACKUP;
359+
360+INSERT INTO t_innodb VALUES(0);
361+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
362+INSERT INTO t_myisam VALUES(0);
363+
364+UNLOCK TABLES;
365+
366+INSERT INTO t_innodb VALUES(0);
367+INSERT INTO t_myisam VALUES(0);
368+
369+SET GLOBAL read_only=0;
370+
371+#
372+# Test that temporary tables are not affected by backup locks
373+#
374+LOCK TABLES FOR BACKUP;
375+CREATE TEMPORARY TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
376+CREATE TEMPORARY TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
377+CREATE TEMPORARY TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
378+CREATE TEMPORARY TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
379+CREATE TEMPORARY TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
380+CREATE TEMPORARY TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
381+
382+INSERT INTO tt_innodb VALUES(5);
383+INSERT INTO tt_myisam VALUES(5);
384+INSERT INTO tt_memory VALUES(5);
385+INSERT INTO tt_csv VALUES(5);
386+INSERT INTO tt_blackhole VALUES(5);
387+INSERT INTO tt_archive VALUES(5);
388+
389+LOCK BINLOG FOR BACKUP;
390+
391+START TRANSACTION;
392+SELECT * FROM tt_archive;
393+SELECT * FROM tt_blackhole;
394+SELECT * FROM tt_memory;
395+SELECT * FROM tt_innodb;
396+SELECT * FROM tt_myisam;
397+INSERT INTO tt_innodb VALUES(6);
398+INSERT INTO tt_myisam VALUES(6);
399+INSERT INTO tt_memory VALUES(6);
400+INSERT INTO tt_csv VALUES(6);
401+INSERT INTO tt_blackhole VALUES(6);
402+INSERT INTO tt_archive VALUES(6);
403+COMMIT;
404+
405+SELECT * FROM tt_archive;
406+SELECT * FROM tt_blackhole;
407+SELECT * FROM tt_memory;
408+SELECT * FROM tt_innodb;
409+SELECT * FROM tt_myisam;
410+
411+DROP TEMPORARY TABLE tt_innodb;
412+DROP TEMPORARY TABLE tt_myisam;
413+DROP TEMPORARY TABLE tt_memory;
414+DROP TEMPORARY TABLE tt_csv;
415+DROP TEMPORARY TABLE tt_blackhole;
416+DROP TEMPORARY TABLE tt_archive;
417+
418+UNLOCK BINLOG;
419+
420+UNLOCK TABLES;
421+
422+#
423+# test that AUTOCOMMIT updates succeed with a BINLOG lock in the same connection with binlog disabled
424+#
425+
426+SELECT @@log_bin;
427+
428+LOCK BINLOG FOR BACKUP;
429+
430+INSERT INTO t_innodb VALUES(1);
431+INSERT INTO t_myisam VALUES(1);
432+
433+UNLOCK BINLOG;
434+
435+#
436+# Log tables
437+#
438+
439+SET @old_general_log = @@general_log;
440+SET @old_slow_query_log = @@slow_query_log;
441+SET @old_log_output = @@log_output;
442+SET @old_long_query_time = @@SESSION.long_query_time;
443+
444+SET SESSION long_query_time = 0;
445+SET GLOBAL log_output = 'TABLE';
446+SET GLOBAL general_log = ON;
447+SET GLOBAL slow_query_log = ON;
448+
449+LOCK TABLES FOR BACKUP;
450+
451+SELECT 1;
452+
453+LOCK BINLOG FOR BACKUP;
454+
455+SELECT 1;
456+
457+UNLOCK BINLOG;
458+
459+UNLOCK TABLES;
460+
461+SET SESSION long_query_time = @old_long_query_time;
462+SET GLOBAL log_output = @old_log_output;
463+SET GLOBAL slow_query_log = @old_slow_query_log;
464+SET GLOBAL general_log = @old_general_log;
465+
466+--echo #-----------------------------------------------------------------------
467+--echo # Multi-threaded tests
468+--echo #-----------------------------------------------------------------------
469+
470+--echo # connection default
471+
472+CREATE USER user@localhost;
473+GRANT ALL PRIVILEGES ON test.* TO user@localhost;
474+
475+--connect(con1,localhost,root,,)
476+
477+--connect(con2,localhost,user,,)
478+
479+--connection default
480+LOCK TABLES FOR BACKUP;
481+
482+--connection con1
483+--echo # connection con1
484+
485+SET SESSION lock_wait_timeout = 1;
486+
487+--error ER_LOCK_WAIT_TIMEOUT
488+SET GLOBAL delay_key_write=ALL;
489+
490+SET SESSION lock_wait_timeout = DEFAULT;
491+
492+--connection default
493+--echo # connection default
494+UNLOCK TABLES;
495+
496+#
497+# read-only=1 + backup locks
498+#
499+
500+--connection con2
501+--echo # connection con2
502+
503+START TRANSACTION;
504+INSERT INTO t_innodb VALUES(0);
505+
506+--connection default
507+--echo # connection default
508+
509+SET GLOBAL read_only=1;
510+
511+--connection con2
512+--echo # connection con2
513+
514+--error ER_OPTION_PREVENTS_STATEMENT
515+COMMIT;
516+
517+--error ER_OPTION_PREVENTS_STATEMENT
518+INSERT INTO t_innodb VALUES(0);
519+--error ER_OPTION_PREVENTS_STATEMENT
520+INSERT INTO t_myisam VALUES(0);
521+
522+--connection con1
523+--echo # connection con1
524+
525+LOCK TABLES FOR BACKUP;
526+
527+--connection con2
528+--echo # connection con2
529+
530+--error ER_OPTION_PREVENTS_STATEMENT
531+INSERT INTO t_innodb VALUES(0);
532+--error ER_OPTION_PREVENTS_STATEMENT
533+INSERT INTO t_myisam VALUES(0);
534+
535+--connection default
536+--echo # connection default
537+
538+SET GLOBAL read_only=0;
539+
540+--connection con2
541+--echo # connection con2
542+
543+SET SESSION lock_wait_timeout = 1;
544+
545+INSERT INTO t_innodb VALUES(0);
546+--error ER_LOCK_WAIT_TIMEOUT
547+INSERT INTO t_myisam VALUES(0);
548+
549+SET SESSION lock_wait_timeout = 0;
550+
551+--connection default
552+--echo # connection default
553+
554+SET GLOBAL read_only=1;
555+
556+--connection con2
557+--echo # connection con2
558+
559+--error ER_OPTION_PREVENTS_STATEMENT
560+INSERT INTO t_innodb VALUES(0);
561+--error ER_OPTION_PREVENTS_STATEMENT
562+INSERT INTO t_myisam VALUES(0);
563+
564+--connection con1
565+--echo # connection con1
566+
567+UNLOCK TABLES;
568+
569+--connection con2
570+--echo # connection con2
571+
572+--error ER_OPTION_PREVENTS_STATEMENT
573+INSERT INTO t_innodb VALUES(0);
574+--error ER_OPTION_PREVENTS_STATEMENT
575+INSERT INTO t_myisam VALUES(0);
576+
577+
578+--connection default
579+--echo # connection default
580+
581+SET GLOBAL read_only=0;
582+
583+#
584+# Test that temporary tables are not affected by tables lock, but updates that
585+# would write into the binary log are blocked by the binlog lock.
586+#
587+--connection default
588+--echo # connection default
589+LOCK TABLES FOR BACKUP;
590+
591+--connection con1
592+--echo # connection con1
593+
594+CREATE TEMPORARY TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
595+CREATE TEMPORARY TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
596+CREATE TEMPORARY TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
597+CREATE TEMPORARY TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
598+CREATE TEMPORARY TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
599+CREATE TEMPORARY TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
600+
601+INSERT INTO tt_innodb VALUES(5);
602+INSERT INTO tt_myisam VALUES(5);
603+INSERT INTO tt_memory VALUES(5);
604+INSERT INTO tt_csv VALUES(5);
605+INSERT INTO tt_blackhole VALUES(5);
606+INSERT INTO tt_archive VALUES(5);
607+
608+--connection default
609+--echo # connection default
610+LOCK BINLOG FOR BACKUP;
611+
612+--let $orig_binlog_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
613+
614+--connection con1
615+--echo # connection con1
616+
617+SET SESSION lock_wait_timeout = 1;
618+
619+START TRANSACTION;
620+if (`SELECT @@binlog_format = 'STATEMENT'`)
621+{
622+ --error ER_LOCK_WAIT_TIMEOUT
623+ INSERT INTO tt_myisam VALUES(6);
624+}
625+if (!`SELECT @@binlog_format = 'STATEMENT'`)
626+{
627+ INSERT INTO tt_myisam VALUES(6);
628+}
629+
630+# Updates to temporary tables are not binlogged in the ROW mode
631+INSERT INTO tt_innodb VALUES(6);
632+SELECT * FROM tt_archive;
633+SELECT * FROM tt_blackhole;
634+SELECT * FROM tt_memory;
635+SELECT * FROM tt_innodb;
636+SELECT * FROM tt_myisam;
637+SELECT * FROM tt_csv;
638+if (`SELECT @@binlog_format = 'STATEMENT'`)
639+{
640+ --error ER_LOCK_WAIT_TIMEOUT
641+ COMMIT;
642+if (!`SELECT @@binlog_format = 'STATEMENT'`)
643+{
644+ COMMIT;
645+}
646+}
647+
648+--connection default
649+--echo # connection default
650+
651+--let $binlog_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
652+--disable_query_log
653+--eval SELECT $orig_binlog_pos = $binlog_pos AS must_be_1
654+--enable_query_log
655+
656+UNLOCK BINLOG;
657+UNLOCK TABLES;
658+
659+--connection con1
660+--echo # connection con1
661+
662+COMMIT;
663+
664+DROP TEMPORARY TABLE tt_innodb;
665+DROP TEMPORARY TABLE tt_myisam;
666+DROP TEMPORARY TABLE tt_memory;
667+DROP TEMPORARY TABLE tt_csv;
668+DROP TEMPORARY TABLE tt_blackhole;
669+DROP TEMPORARY TABLE tt_archive;
670+
671+--connection default
672+--echo # connection default
673+
674+LOCK BINLOG FOR BACKUP;
675+
676+--let $orig_binlog_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
677+
678+--connection con1
679+--echo # connection con1
680+
681+#
682+# test that AUTOCOMMIT updates are blocked with a BINLOG lock in another
683+# connection with binlog enabled
684+#
685+
686+SET SESSION lock_wait_timeout = 1;
687+
688+--error ER_LOCK_WAIT_TIMEOUT
689+INSERT INTO t_innodb VALUES(1);
690+--error ER_LOCK_WAIT_TIMEOUT
691+INSERT INTO t_myisam VALUES(1);
692+
693+SET SESSION lock_wait_timeout = DEFAULT;
694+
695+--connection default
696+--echo # connection default
697+
698+--let $binlog_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
699+--disable_query_log
700+--eval SELECT $orig_binlog_pos = $binlog_pos AS must_be_1
701+--enable_query_log
702+
703+UNLOCK BINLOG;
704+
705+#
706+# LTFB + DDL / DML in another connection
707+#
708+
709+--connection default
710+--echo # connection default
711+
712+LOCK BINLOG FOR BACKUP;
713+
714+--let $orig_binlog_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
715+
716+--connection con1
717+--echo # connection con1
718+
719+SET SESSION lock_wait_timeout = 1;
720+
721+--error ER_LOCK_WAIT_TIMEOUT
722+DELETE FROM t_innodb;
723+--error ER_LOCK_WAIT_TIMEOUT
724+INSERT INTO t_innodb VALUES(0);
725+--error ER_LOCK_WAIT_TIMEOUT
726+UPDATE t_innodb SET a = 1;
727+--error ER_LOCK_WAIT_TIMEOUT
728+REPLACE INTO t_innodb VALUES(1);
729+SELECT * from t_innodb;
730+HANDLER t_innodb OPEN;
731+HANDLER t_innodb READ a FIRST;
732+HANDLER t_innodb CLOSE;
733+
734+START TRANSACTION;
735+SELECT * from t_innodb;
736+DELETE FROM t_innodb;
737+INSERT INTO t_innodb VALUES(0);
738+UPDATE t_innodb SET a = 1;
739+REPLACE INTO t_innodb VALUES(1);
740+--error ER_LOCK_WAIT_TIMEOUT
741+COMMIT;
742+
743+SELECT * FROM t_innodb;
744+COMMIT;
745+
746+START TRANSACTION;
747+--error ER_LOCK_WAIT_TIMEOUT
748+INSERT INTO t_myisam VALUES(1);
749+COMMIT;
750+
751+--error ER_LOCK_WAIT_TIMEOUT
752+INSERT INTO t_myisam VALUES(0);
753+--error ER_LOCK_WAIT_TIMEOUT
754+UPDATE t_myisam SET a = 1;
755+SELECT * FROM t_myisam;
756+HANDLER t_myisam OPEN;
757+HANDLER t_myisam READ a FIRST;
758+HANDLER t_myisam CLOSE;
759+
760+# Blackhole updates are not binlogged in the ROW mode
761+if (`SELECT @@binlog_format = 'ROW'`)
762+{
763+ DELETE FROM t_blackhole;
764+}
765+if (!`SELECT @@binlog_format = 'ROW'`)
766+{
767+--error ER_LOCK_WAIT_TIMEOUT
768+ DELETE FROM t_blackhole;
769+}
770+--error ER_LOCK_WAIT_TIMEOUT
771+INSERT INTO t_blackhole VALUES(0);
772+# Blackhole updates are not binlogged in the ROW mode
773+if (`SELECT @@binlog_format = 'ROW'`)
774+{
775+ UPDATE t_blackhole SET a = 1;
776+}
777+if (!`SELECT @@binlog_format = 'ROW'`)
778+{
779+ --error ER_LOCK_WAIT_TIMEOUT
780+ UPDATE t_blackhole SET a = 1;
781+}
782+--error ER_LOCK_WAIT_TIMEOUT
783+REPLACE INTO t_blackhole VALUES(1);
784+SELECT * FROM t_blackhole;
785+
786+--error ER_LOCK_WAIT_TIMEOUT
787+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
788+
789+--error ER_LOCK_WAIT_TIMEOUT
790+DROP TABLE tt_innodb;
791+
792+--error ER_BAD_TABLE_ERROR
793+DROP TABLE non_existing;
794+
795+--error ER_TABLE_EXISTS_ERROR
796+CREATE TABLE t_innodb(a INT NOT NULL) ENGINE=InnoDB;
797+
798+--error ER_LOCK_WAIT_TIMEOUT
799+TRUNCATE TABLE t_innodb;
800+
801+--error ER_LOCK_WAIT_TIMEOUT
802+RENAME TABLE t_innodb TO tmp, tmp to t_innodb;
803+
804+--error ER_LOCK_WAIT_TIMEOUT
805+ALTER TABLE t_innodb ADD COLUMN b CHAR(10);
806+
807+--error ER_LOCK_WAIT_TIMEOUT
808+ALTER TABLE t_innodb ADD KEY (a);
809+
810+--error ER_LOCK_WAIT_TIMEOUT
811+CREATE DATABASE test1;
812+
813+--error ER_LOCK_WAIT_TIMEOUT
814+DROP DATABASE test1;
815+
816+--error ER_LOCK_WAIT_TIMEOUT
817+CREATE PROCEDURE p1() SELECT 1;
818+
819+--error ER_LOCK_WAIT_TIMEOUT
820+DROP PROCEDURE p1;
821+
822+--error ER_LOCK_WAIT_TIMEOUT
823+CREATE VIEW v1 AS SELECT * FROM t_innodb;
824+
825+--error ER_LOCK_WAIT_TIMEOUT
826+DROP VIEW v1;
827+
828+--error ER_LOCK_WAIT_TIMEOUT
829+INSERT INTO v_innodb VALUES(1);
830+
831+--connection default
832+--echo # connection default
833+
834+--let $binlog_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
835+--disable_query_log
836+--eval SELECT $orig_binlog_pos = $binlog_pos AS must_be_1
837+--enable_query_log
838+
839+UNLOCK BINLOG;
840+
841+--connection con1
842+--echo # connection con1
843+
844+# DDLs are not transactional, so previous DDL statements against t_innodb will
845+# be executed despite the error
846+SHOW CREATE TABLE t_innodb;
847+
848+DROP TABLE t_innodb;
849+CREATE TABLE t_innodb(a INT NOT NULL) ENGINE=InnoDB;
850+
851+--connection default
852+--echo # connection default
853+
854+#
855+# INSERT DELAYED
856+#
857+
858+LOCK BINLOG FOR BACKUP;
859+
860+--let $orig_binlog_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
861+
862+--connection con1
863+--echo # connection con1
864+
865+if (`SELECT @@binlog_format = 'STATEMENT'`)
866+{
867+ --error ER_LOCK_WAIT_TIMEOUT
868+ INSERT DELAYED INTO t_myisam VALUES(0);
869+}
870+if (!`SELECT @@binlog_format = 'STATEMENT'`)
871+{
872+ INSERT DELAYED INTO t_myisam VALUES(0);
873+}
874+
875+--connection default
876+--echo # connection default
877+
878+if (!`SELECT @@binlog_format = 'STATEMENT'`)
879+{
880+ let $wait_condition=
881+ SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST
882+ WHERE STATE = "Waiting for binlog lock" AND
883+ COMMAND = "Delayed insert";
884+ --source include/wait_condition.inc
885+}
886+
887+--let $binlog_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
888+--disable_query_log
889+--eval SELECT $orig_binlog_pos = $binlog_pos AS must_be_1
890+--enable_query_log
891+
892+UNLOCK BINLOG;
893+
894+if (!`SELECT @@binlog_format = 'STATEMENT'`)
895+{
896+ let $wait_condition=
897+ SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST
898+ WHERE STATE = "Waiting for binlog lock" AND
899+ COMMAND = "Delayed";
900+ --source include/wait_condition.inc
901+}
902+
903+SELECT * FROm t_myisam;
904+
905+
906+#
907+# Log tables
908+#
909+
910+SET @old_general_log = @@general_log;
911+SET @old_slow_query_log = @@slow_query_log;
912+SET @old_log_output = @@log_output;
913+
914+SET GLOBAL log_output = 'TABLE';
915+SET GLOBAL general_log = ON;
916+SET GLOBAL slow_query_log = ON;
917+
918+LOCK BINLOG FOR BACKUP;
919+
920+--let $orig_binlog_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
921+
922+--connection con1
923+--echo # connection con1
924+
925+SET @old_long_query_time = @@SESSION.long_query_time;
926+SET SESSION long_query_time = 0;
927+
928+SELECT 1;
929+
930+--connection default
931+--echo # connection default
932+
933+SELECT 1;
934+
935+--connection con1
936+--echo # connection con1
937+
938+SET SESSION long_query_time = @old_long_query_time;
939+
940+--connection default
941+--echo # connection default
942+
943+--let $binlog_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
944+--disable_query_log
945+--eval SELECT $orig_binlog_pos = $binlog_pos AS must_be_1
946+--enable_query_log
947+
948+UNLOCK BINLOG;
949+
950+SET GLOBAL log_output = @old_log_output;
951+SET GLOBAL slow_query_log = @old_slow_query_log;
952+SET GLOBAL general_log = @old_general_log;
953+
954+--echo #-----------------------------------------------------------------------
955+--echo # Cleanup
956+--echo #-----------------------------------------------------------------------
957+
958+DROP USER user@localhost;
959+
960+--disconnect con1
961+--disconnect con2
962+
963+--source include/wait_until_count_sessions.inc
964+
965+DROP VIEW v_innodb, v_myisam, v_memory, v_csv, v_blackhole, v_archive;
966+DROP TABLE t_innodb, t_myisam, t_memory, t_csv, t_blackhole, t_archive;
967
968=== added file 'mysql-test/r/backup_locks.result'
969--- mysql-test/r/backup_locks.result 1970-01-01 00:00:00 +0000
970+++ mysql-test/r/backup_locks.result 2014-02-25 07:31:10 +0000
971@@ -0,0 +1,883 @@
972+SHOW VARIABLES LIKE 'have_backup_locks';
973+Variable_name Value
974+have_backup_locks YES
975+#-----------------------------------------------------------------------
976+# Setup
977+#-----------------------------------------------------------------------
978+CREATE TABLE t_innodb(a INT NOT NULL, KEY (a)) ENGINE=InnoDB;
979+CREATE TABLE t_myisam(a INT NOT NULL, KEY (a)) ENGINE=MyISAM;
980+CREATE TABLE t_memory(a INT NOT NULL, KEY (a)) ENGINE=MEMORY;
981+CREATE TABLE t_csv(a INT NOT NULL) ENGINE=CSV;
982+CREATE TABLE t_blackhole(a INT NOT NULL, KEY (a)) ENGINE=BLACKHOLE;
983+CREATE TABLE t_archive(a INT NOT NULL) ENGINE=ARCHIVE;
984+CREATE VIEW v_innodb AS SELECT * FROM t_innodb;
985+CREATE VIEW v_myisam AS SELECT * FROM t_myisam;
986+CREATE VIEW v_memory AS SELECT * FROM t_memory;
987+CREATE VIEW v_csv AS SELECT * FROM t_csv;
988+CREATE VIEW v_blackhole AS SELECT * FROM t_blackhole;
989+CREATE VIEW v_archive AS SELECT * FROM t_archive;
990+#-----------------------------------------------------------------------
991+# Basic syntax checks
992+#-----------------------------------------------------------------------
993+LOCK TABLES t_innodb FOR BACKUP;
994+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOR BACKUP' at line 1
995+LOCK TABLES t_innodb READ FOR BACKUP;
996+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOR BACKUP' at line 1
997+LOCK TABLES t_innodb FOR BACKUP READ;
998+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOR BACKUP READ' at line 1
999+LOCK BINLOG t_innodb FOR BACKUP;
1000+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't_innodb FOR BACKUP' at line 1
1001+LOCK BINLOG t_innodb READ FOR BACKUP;
1002+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't_innodb READ FOR BACKUP' at line 1
1003+LOCK BINLOG t_innodb FOR BACKUP READ;
1004+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 't_innodb FOR BACKUP READ' at line 1
1005+LOCK TABLES FOR BACKUP;
1006+UNLOCK TABLES;
1007+LOCK BINLOG FOR BACKUP;
1008+UNLOCK BINLOG;
1009+#-----------------------------------------------------------------------
1010+# No backup locks are allowed in stored routines
1011+#-----------------------------------------------------------------------
1012+CREATE PROCEDURE p1()
1013+BEGIN
1014+LOCK TABLES FOR BACKUP;
1015+END|
1016+ERROR 0A000: LOCK is not allowed in stored procedures
1017+CREATE PROCEDURE p2()
1018+BEGIN
1019+LOCK BINLOG FOR BACKUP;
1020+END|
1021+ERROR 0A000: LOCK is not allowed in stored procedures
1022+CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
1023+BEGIN
1024+LOCK TABLES FOR BACKUP;
1025+RETURN 1;
1026+END|
1027+ERROR 0A000: LOCK is not allowed in stored procedures
1028+CREATE FUNCTION f2() RETURNS INT DETERMINISTIC
1029+BEGIN
1030+LOCK BINLOG FOR BACKUP;
1031+RETURN 1;
1032+END|
1033+ERROR 0A000: LOCK is not allowed in stored procedures
1034+#-----------------------------------------------------------------------
1035+# Single-threaded tests
1036+#-----------------------------------------------------------------------
1037+SET SESSION lock_wait_timeout=1;
1038+FLUSH STATUS;
1039+LOCK TABLES FOR BACKUP;
1040+LOCK TABLES FOR BACKUP;
1041+SHOW STATUS LIKE 'Com_lock_tables_for_backup';
1042+Variable_name Value
1043+Com_lock_tables_for_backup 2
1044+UNLOCK TABLES;
1045+SHOW STATUS LIKE 'Com_unlock_tables';
1046+Variable_name Value
1047+Com_unlock_tables 1
1048+LOCK BINLOG FOR BACKUP;
1049+LOCK BINLOG FOR BACKUP;
1050+SHOW STATUS LIKE 'Com_lock_binlog_for_backup';
1051+Variable_name Value
1052+Com_lock_binlog_for_backup 2
1053+UNLOCK BINLOG;
1054+SHOW STATUS LIKE 'Com_unlock_binlog';
1055+Variable_name Value
1056+Com_unlock_binlog 1
1057+LOCK TABLES FOR BACKUP;
1058+DELETE FROM t_innodb;
1059+INSERT INTO t_innodb VALUES(0);
1060+UPDATE t_innodb SET a = 1;
1061+REPLACE INTO t_innodb VALUES(1);
1062+SELECT * FROM t_innodb;
1063+a
1064+1
1065+1
1066+HANDLER t_innodb OPEN;
1067+HANDLER t_innodb READ a FIRST;
1068+a
1069+1
1070+HANDLER t_innodb CLOSE;
1071+DELETE FROM t_myisam;
1072+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1073+INSERT INTO t_myisam VALUES(0);
1074+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1075+INSERT DELAYED INTO t_myisam VALUES(0);
1076+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1077+UPDATE t_myisam SET a = 1;
1078+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1079+REPLACE INTO t_myisam VALUES(1);
1080+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1081+SELECT * FROM t_myisam;
1082+a
1083+HANDLER t_myisam OPEN;
1084+HANDLER t_myisam READ a FIRST;
1085+a
1086+HANDLER t_myisam CLOSE;
1087+DELETE FROM t_memory;
1088+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1089+INSERT INTO t_memory VALUES(0);
1090+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1091+INSERT DELAYED INTO t_memory VALUES(0);
1092+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1093+UPDATE t_memory SET a = 1;
1094+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1095+REPLACE INTO t_memory VALUES(1);
1096+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1097+SELECT * FROM t_memory;
1098+a
1099+DELETE FROM t_archive;
1100+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1101+INSERT INTO t_archive VALUES(0);
1102+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1103+INSERT DELAYED INTO t_archive VALUES(0);
1104+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1105+UPDATE t_archive SET a = 1;
1106+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1107+REPLACE INTO t_archive VALUES(1);
1108+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1109+SELECT * FROM t_archive;
1110+a
1111+DELETE FROM t_csv;
1112+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1113+INSERT INTO t_csv VALUES(0);
1114+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1115+UPDATE t_csv SET a = 1;
1116+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1117+REPLACE INTO t_csv VALUES(1);
1118+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1119+SELECT * FROM t_csv;
1120+a
1121+DELETE FROM t_blackhole;
1122+INSERT INTO t_blackhole VALUES(0);
1123+INSERT DELAYED INTO t_blackhole VALUES(0);
1124+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1125+UPDATE t_blackhole SET a = 1;
1126+REPLACE INTO t_blackhole VALUES(1);
1127+SELECT * FROM t_blackhole;
1128+a
1129+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
1130+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1131+CREATE TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
1132+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1133+CREATE TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
1134+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1135+CREATE TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
1136+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1137+CREATE TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
1138+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1139+CREATE TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
1140+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1141+DROP TABLE t_innodb;
1142+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1143+DROP TABLE t_myisam;
1144+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1145+DROP TABLE t_memory;
1146+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1147+DROP TABLE t_csv;
1148+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1149+DROP TABLE t_blackhole;
1150+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1151+DROP TABLE t_archive;
1152+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1153+DROP TABLE non_existing;
1154+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1155+TRUNCATE TABLE t_innodb;
1156+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1157+TRUNCATE TABLE t_myisam;
1158+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1159+TRUNCATE TABLE t_memory;
1160+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1161+TRUNCATE TABLE t_csv;
1162+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1163+TRUNCATE TABLE t_blackhole;
1164+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1165+TRUNCATE TABLE t_archive;
1166+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1167+RENAME TABLE t_innodb TO tmp;
1168+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1169+RENAME TABLE t_myisam TO tmp;
1170+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1171+RENAME TABLE t_memory TO tmp;
1172+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1173+RENAME TABLE t_csv TO tmp;
1174+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1175+RENAME TABLE t_blackhole TO tmp;
1176+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1177+RENAME TABLE t_archive TO tmp;
1178+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1179+ALTER TABLE t_innodb ADD COLUMN b CHAR(10);
1180+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1181+ALTER TABLE t_myisam ADD COLUMN b CHAR(10);
1182+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1183+ALTER TABLE t_memory ADD COLUMN b CHAR(10);
1184+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1185+ALTER TABLE t_csv ADD COLUMN b CHAR(10);
1186+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1187+ALTER TABLE t_blackhole ADD COLUMN b CHAR(10);
1188+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1189+ALTER TABLE t_archive ADD COLUMN b CHAR(10);
1190+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1191+ALTER TABLE t_innodb ADD KEY (a);
1192+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1193+ALTER TABLE t_myisam ADD KEY (a);
1194+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1195+ALTER TABLE t_memory ADD KEY (a);
1196+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1197+ALTER TABLE t_csv ADD KEY (a);
1198+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1199+ALTER TABLE t_blackhole ADD KEY (a);
1200+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1201+ALTER TABLE t_archive ADD KEY (a);
1202+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1203+DROP DATABASE test;
1204+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1205+CREATE DATABASE test1;
1206+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1207+CREATE PROCEDURE p1()
1208+BEGIN
1209+SELECT 1;
1210+END|
1211+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1212+CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
1213+BEGIN
1214+RETURN 1;
1215+END|
1216+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1217+CREATE VIEW v1 AS SELECT * FROM t_innodb;
1218+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1219+INSERT INTO v_innodb VALUES(1);
1220+INSERT INTO v_blackhole VALUES(1);
1221+INSERT INTO v_myisam VALUES(1);
1222+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1223+INSERT INTO v_csv VALUES(1);
1224+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1225+INSERT INTO v_memory VALUES(1);
1226+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1227+INSERT INTO v_archive VALUES(1);
1228+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1229+UNLOCK TABLES;
1230+LOCK BINLOG FOR BACKUP;
1231+DELETE FROM t_innodb;
1232+INSERT INTO t_innodb VALUES(0);
1233+UPDATE t_innodb SET a = 1;
1234+REPLACE INTO t_innodb VALUES(1);
1235+SELECT * from t_innodb;
1236+a
1237+1
1238+1
1239+HANDLER t_innodb OPEN;
1240+HANDLER t_innodb READ a FIRST;
1241+a
1242+1
1243+HANDLER t_innodb CLOSE;
1244+DELETE FROM t_myisam;
1245+INSERT INTO t_myisam VALUES(0);
1246+UPDATE t_myisam SET a = 1;
1247+REPLACE INTO t_myisam VALUES(1);
1248+SELECT * from t_myisam;
1249+a
1250+1
1251+1
1252+HANDLER t_myisam OPEN;
1253+HANDLER t_myisam READ a FIRST;
1254+a
1255+1
1256+HANDLER t_myisam CLOSE;
1257+DELETE FROM t_memory;
1258+INSERT INTO t_memory VALUES(0);
1259+UPDATE t_memory SET a = 1;
1260+REPLACE INTO t_memory VALUES(1);
1261+SELECT * from t_memory;
1262+a
1263+1
1264+1
1265+DELETE FROM t_archive;
1266+INSERT INTO t_archive VALUES(0);
1267+SELECT * from t_archive;
1268+a
1269+0
1270+DELETE FROM t_csv;
1271+INSERT INTO t_csv VALUES(0);
1272+UPDATE t_csv SET a = 1;
1273+REPLACE INTO t_csv VALUES(1);
1274+SELECT * from t_csv;
1275+a
1276+1
1277+1
1278+DELETE FROM t_blackhole;
1279+INSERT INTO t_blackhole VALUES(0);
1280+UPDATE t_blackhole SET a = 1;
1281+REPLACE INTO t_blackhole VALUES(1);
1282+SELECT * from t_blackhole;
1283+a
1284+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
1285+CREATE TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
1286+CREATE TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
1287+CREATE TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
1288+CREATE TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
1289+CREATE TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
1290+DROP TABLE tt_innodb;
1291+DROP TABLE tt_myisam;
1292+DROP TABLE tt_memory;
1293+DROP TABLE tt_csv;
1294+DROP TABLE tt_blackhole;
1295+DROP TABLE tt_archive;
1296+DROP TABLE non_existing;
1297+ERROR 42S02: Unknown table 'test.non_existing'
1298+TRUNCATE TABLE t_innodb;
1299+TRUNCATE TABLE t_myisam;
1300+TRUNCATE TABLE t_memory;
1301+TRUNCATE TABLE t_csv;
1302+TRUNCATE TABLE t_blackhole;
1303+RENAME TABLE t_innodb TO tmp, tmp TO t_innodb;
1304+RENAME TABLE t_myisam TO tmp, tmp TO t_myisam;
1305+RENAME TABLE t_memory TO tmp, tmp TO t_memory;
1306+RENAME TABLE t_csv TO tmp, tmp TO t_csv;
1307+RENAME TABLE t_blackhole TO tmp, tmp TO t_blackhole;
1308+RENAME TABLE t_archive TO tmp, tmp TO t_archive;
1309+ALTER TABLE t_innodb ADD COLUMN b CHAR(10) NOT NULL;
1310+ALTER TABLE t_innodb DROP COLUMN b;
1311+ALTER TABLE t_myisam ADD COLUMN b CHAR(10) NOT NULL;
1312+ALTER TABLE t_myisam DROP COLUMN b;
1313+ALTER TABLE t_memory ADD COLUMN b CHAR(10) NOT NULL;
1314+ALTER TABLE t_memory DROP COLUMN b;
1315+ALTER TABLE t_csv ADD COLUMN b CHAR(10) NOT NULL;
1316+ALTER TABLE t_csv DROP COLUMN b;
1317+ALTER TABLE t_blackhole ADD COLUMN b CHAR(10) NOT NULL;
1318+ALTER TABLE t_blackhole DROP COLUMN b;
1319+ALTER TABLE t_archive ADD COLUMN b CHAR(10) NOT NULL;
1320+ALTER TABLE t_archive DROP COLUMN b;
1321+ALTER TABLE t_innodb ADD KEY tmp (a);
1322+Warnings:
1323+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_innodb'. This is deprecated and will be disallowed in a future release.
1324+ALTER TABLE t_innodb DROP KEY tmp;
1325+ALTER TABLE t_myisam ADD KEY tmp (a);
1326+Warnings:
1327+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_myisam'. This is deprecated and will be disallowed in a future release.
1328+ALTER TABLE t_myisam DROP KEY tmp;
1329+ALTER TABLE t_memory ADD KEY tmp (a);
1330+Warnings:
1331+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_memory'. This is deprecated and will be disallowed in a future release.
1332+ALTER TABLE t_memory DROP KEY tmp;
1333+ALTER TABLE t_blackhole ADD KEY tmp (a);
1334+Warnings:
1335+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_blackhole'. This is deprecated and will be disallowed in a future release.
1336+ALTER TABLE t_blackhole DROP KEY tmp;
1337+CREATE DATABASE test1;
1338+DROP DATABASE test1;
1339+CREATE PROCEDURE p1()
1340+BEGIN
1341+SELECT 1;
1342+END|
1343+DROP PROCEDURE p1|
1344+CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
1345+BEGIN
1346+RETURN 1;
1347+END|
1348+DROP FUNCTION f1|
1349+CREATE VIEW v1 AS SELECT * FROM t_innodb;
1350+DROP VIEW v1;
1351+INSERT INTO v_innodb VALUES(1);
1352+INSERT INTO v_blackhole VALUES(1);
1353+INSERT INTO v_myisam VALUES(1);
1354+INSERT INTO v_csv VALUES(1);
1355+INSERT INTO v_memory VALUES(1);
1356+INSERT INTO v_archive VALUES(1);
1357+UNLOCK BINLOG;
1358+SELECT @@delay_key_write;
1359+@@delay_key_write
1360+ON
1361+SET GLOBAL delay_key_write=ALL;
1362+LOCK TABLES FOR BACKUP;
1363+ERROR HY000: The MySQL server is running with the delay_key_write=ALL option so it cannot execute this statement
1364+SET GLOBAL delay_key_write=default;
1365+SELECT @@delay_key_write;
1366+@@delay_key_write
1367+ON
1368+SET GLOBAL read_only=1;
1369+INSERT INTO t_innodb VALUES(0);
1370+INSERT INTO t_myisam VALUES(0);
1371+LOCK TABLES FOR BACKUP;
1372+INSERT INTO t_innodb VALUES(0);
1373+INSERT INTO t_myisam VALUES(0);
1374+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
1375+UNLOCK TABLES;
1376+INSERT INTO t_innodb VALUES(0);
1377+INSERT INTO t_myisam VALUES(0);
1378+SET GLOBAL read_only=0;
1379+LOCK TABLES FOR BACKUP;
1380+CREATE TEMPORARY TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
1381+CREATE TEMPORARY TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
1382+CREATE TEMPORARY TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
1383+CREATE TEMPORARY TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
1384+CREATE TEMPORARY TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
1385+CREATE TEMPORARY TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
1386+INSERT INTO tt_innodb VALUES(5);
1387+INSERT INTO tt_myisam VALUES(5);
1388+INSERT INTO tt_memory VALUES(5);
1389+INSERT INTO tt_csv VALUES(5);
1390+INSERT INTO tt_blackhole VALUES(5);
1391+INSERT INTO tt_archive VALUES(5);
1392+LOCK BINLOG FOR BACKUP;
1393+START TRANSACTION;
1394+SELECT * FROM tt_archive;
1395+a
1396+5
1397+SELECT * FROM tt_blackhole;
1398+a
1399+SELECT * FROM tt_memory;
1400+a
1401+5
1402+SELECT * FROM tt_innodb;
1403+a
1404+5
1405+SELECT * FROM tt_myisam;
1406+a
1407+5
1408+INSERT INTO tt_innodb VALUES(6);
1409+INSERT INTO tt_myisam VALUES(6);
1410+INSERT INTO tt_memory VALUES(6);
1411+INSERT INTO tt_csv VALUES(6);
1412+INSERT INTO tt_blackhole VALUES(6);
1413+INSERT INTO tt_archive VALUES(6);
1414+COMMIT;
1415+SELECT * FROM tt_archive;
1416+a
1417+5
1418+6
1419+SELECT * FROM tt_blackhole;
1420+a
1421+SELECT * FROM tt_memory;
1422+a
1423+5
1424+6
1425+SELECT * FROM tt_innodb;
1426+a
1427+5
1428+6
1429+SELECT * FROM tt_myisam;
1430+a
1431+5
1432+6
1433+DROP TEMPORARY TABLE tt_innodb;
1434+DROP TEMPORARY TABLE tt_myisam;
1435+DROP TEMPORARY TABLE tt_memory;
1436+DROP TEMPORARY TABLE tt_csv;
1437+DROP TEMPORARY TABLE tt_blackhole;
1438+DROP TEMPORARY TABLE tt_archive;
1439+UNLOCK BINLOG;
1440+UNLOCK TABLES;
1441+SELECT @@log_bin;
1442+@@log_bin
1443+0
1444+LOCK BINLOG FOR BACKUP;
1445+INSERT INTO t_innodb VALUES(1);
1446+INSERT INTO t_myisam VALUES(1);
1447+UNLOCK BINLOG;
1448+SET @old_general_log = @@general_log;
1449+SET @old_slow_query_log = @@slow_query_log;
1450+SET @old_log_output = @@log_output;
1451+SET @old_long_query_time = @@SESSION.long_query_time;
1452+SET SESSION long_query_time = 0;
1453+SET GLOBAL log_output = 'TABLE';
1454+SET GLOBAL general_log = ON;
1455+SET GLOBAL slow_query_log = ON;
1456+LOCK TABLES FOR BACKUP;
1457+SELECT 1;
1458+1
1459+1
1460+LOCK BINLOG FOR BACKUP;
1461+SELECT 1;
1462+1
1463+1
1464+UNLOCK BINLOG;
1465+UNLOCK TABLES;
1466+SET SESSION long_query_time = @old_long_query_time;
1467+SET GLOBAL log_output = @old_log_output;
1468+SET GLOBAL slow_query_log = @old_slow_query_log;
1469+SET GLOBAL general_log = @old_general_log;
1470+SET SESSION lock_wait_timeout=default;
1471+#-----------------------------------------------------------------------
1472+# Multi-threaded tests
1473+#-----------------------------------------------------------------------
1474+# connection default
1475+SET GLOBAL lock_wait_timeout=1;
1476+CREATE USER user@localhost;
1477+GRANT ALL PRIVILEGES ON test.* TO user@localhost;
1478+LOCK TABLES FOR BACKUP;
1479+# connection con1
1480+SET GLOBAL delay_key_write=ALL;
1481+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1482+# connection default
1483+UNLOCK TABLES;
1484+# connection con2
1485+START TRANSACTION;
1486+INSERT INTO t_innodb VALUES(0);
1487+# connection default
1488+SET GLOBAL read_only=1;
1489+# connection con2
1490+COMMIT;
1491+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
1492+INSERT INTO t_innodb VALUES(0);
1493+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
1494+INSERT INTO t_myisam VALUES(0);
1495+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
1496+# connection con1
1497+LOCK TABLES FOR BACKUP;
1498+# connection con2
1499+INSERT INTO t_innodb VALUES(0);
1500+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
1501+INSERT INTO t_myisam VALUES(0);
1502+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
1503+# connection default
1504+SET GLOBAL read_only=0;
1505+# connection con2
1506+INSERT INTO t_innodb VALUES(0);
1507+INSERT INTO t_myisam VALUES(0);
1508+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1509+# connection default
1510+SET GLOBAL read_only=1;
1511+# connection con2
1512+INSERT INTO t_innodb VALUES(0);
1513+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
1514+INSERT INTO t_myisam VALUES(0);
1515+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
1516+# connection con1
1517+UNLOCK TABLES;
1518+# connection con2
1519+INSERT INTO t_innodb VALUES(0);
1520+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
1521+INSERT INTO t_myisam VALUES(0);
1522+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
1523+# connection default
1524+SET GLOBAL read_only=0;
1525+# connection default
1526+LOCK TABLES FOR BACKUP;
1527+# connection con1
1528+CREATE TEMPORARY TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
1529+CREATE TEMPORARY TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
1530+CREATE TEMPORARY TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
1531+CREATE TEMPORARY TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
1532+CREATE TEMPORARY TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
1533+CREATE TEMPORARY TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
1534+INSERT INTO tt_innodb VALUES(5);
1535+INSERT INTO tt_myisam VALUES(5);
1536+INSERT INTO tt_memory VALUES(5);
1537+INSERT INTO tt_csv VALUES(5);
1538+INSERT INTO tt_blackhole VALUES(5);
1539+INSERT INTO tt_archive VALUES(5);
1540+# connection default
1541+LOCK BINLOG FOR BACKUP;
1542+# connection con1
1543+START TRANSACTION;
1544+SELECT * FROM tt_archive;
1545+a
1546+5
1547+SELECT * FROM tt_blackhole;
1548+a
1549+SELECT * FROM tt_memory;
1550+a
1551+5
1552+SELECT * FROM tt_innodb;
1553+a
1554+5
1555+SELECT * FROM tt_myisam;
1556+a
1557+5
1558+INSERT INTO tt_innodb VALUES(6);
1559+INSERT INTO tt_myisam VALUES(6);
1560+INSERT INTO tt_memory VALUES(6);
1561+INSERT INTO tt_csv VALUES(6);
1562+INSERT INTO tt_blackhole VALUES(6);
1563+INSERT INTO tt_archive VALUES(6);
1564+COMMIT;
1565+SELECT * FROM tt_archive;
1566+a
1567+5
1568+6
1569+SELECT * FROM tt_blackhole;
1570+a
1571+SELECT * FROM tt_memory;
1572+a
1573+5
1574+6
1575+SELECT * FROM tt_innodb;
1576+a
1577+5
1578+6
1579+SELECT * FROM tt_myisam;
1580+a
1581+5
1582+6
1583+DROP TEMPORARY TABLE tt_innodb;
1584+DROP TEMPORARY TABLE tt_myisam;
1585+DROP TEMPORARY TABLE tt_memory;
1586+DROP TEMPORARY TABLE tt_csv;
1587+DROP TEMPORARY TABLE tt_blackhole;
1588+DROP TEMPORARY TABLE tt_archive;
1589+# connection default
1590+UNLOCK BINLOG;
1591+UNLOCK TABLES;
1592+LOCK BINLOG FOR BACKUP;
1593+# connection con1
1594+SELECT @@log_bin;
1595+@@log_bin
1596+0
1597+INSERT INTO t_innodb VALUES(1);
1598+INSERT INTO t_myisam VALUES(1);
1599+# connection default
1600+UNLOCK BINLOG;
1601+# connection default
1602+LOCK TABLES FOR BACKUP;
1603+# connection con1
1604+DELETE FROM t_innodb;
1605+INSERT INTO t_innodb VALUES(0);
1606+UPDATE t_innodb SET a = 1;
1607+REPLACE INTO t_innodb VALUES(1);
1608+SELECT * from t_innodb;
1609+a
1610+1
1611+1
1612+HANDLER t_innodb OPEN;
1613+HANDLER t_innodb READ a FIRST;
1614+a
1615+1
1616+HANDLER t_innodb CLOSE;
1617+INSERT INTO t_myisam VALUES(0);
1618+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1619+INSERT DELAYED INTO t_myisam VALUES(0);
1620+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1621+SELECT * FROM t_myisam;
1622+a
1623+0
1624+0
1625+1
1626+1
1627+1
1628+HANDLER t_myisam OPEN;
1629+HANDLER t_myisam READ a FIRST;
1630+a
1631+0
1632+HANDLER t_myisam CLOSE;
1633+INSERT INTO t_memory VALUES(0);
1634+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1635+SELECT * FROM t_memory;
1636+a
1637+1
1638+INSERT INTO t_archive VALUES(0);
1639+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1640+SELECT * FROM t_archive;
1641+a
1642+0
1643+1
1644+INSERT INTO t_csv VALUES(0);
1645+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1646+SELECT * FROM t_csv;
1647+a
1648+1
1649+DELETE FROM t_blackhole;
1650+INSERT INTO t_blackhole VALUES(0);
1651+UPDATE t_blackhole SET a = 1;
1652+REPLACE INTO t_blackhole VALUES(1);
1653+SELECT * FROM t_blackhole;
1654+a
1655+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
1656+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1657+DROP TABLE t_innodb;
1658+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1659+DROP TABLE non_existing;
1660+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1661+TRUNCATE TABLE t_innodb;
1662+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1663+RENAME TABLE t_innodb TO tmp;
1664+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1665+ALTER TABLE t_innodb ADD COLUMN b CHAR(10);
1666+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1667+ALTER TABLE t_innodb ADD KEY (a);
1668+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1669+DROP DATABASE test;
1670+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1671+CREATE DATABASE test1;
1672+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1673+CREATE PROCEDURE p1() SELECT 1;
1674+# connection default
1675+KILL QUERY #;
1676+# connection con1
1677+ERROR 70100: Query execution was interrupted
1678+CREATE FUNCTION f1() RETURNS INT DETERMINISTIC RETURN 1;
1679+# connection default
1680+KILL QUERY #;
1681+# connection con1
1682+ERROR 70100: Query execution was interrupted
1683+CREATE VIEW v1 AS SELECT * FROM t_innodb;
1684+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1685+INSERT INTO v_innodb VALUES(1);
1686+INSERT INTO v_blackhole VALUES(1);
1687+INSERT INTO v_myisam VALUES(1);
1688+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
1689+# connection default
1690+UNLOCK TABLES;
1691+LOCK BINLOG FOR BACKUP;
1692+# connection con1
1693+DELETE FROM t_innodb;
1694+INSERT INTO t_innodb VALUES(0);
1695+UPDATE t_innodb SET a = 1;
1696+REPLACE INTO t_innodb VALUES(1);
1697+SELECT * from t_innodb;
1698+a
1699+1
1700+1
1701+HANDLER t_innodb OPEN;
1702+HANDLER t_innodb READ a FIRST;
1703+a
1704+1
1705+HANDLER t_innodb CLOSE;
1706+DELETE FROM t_myisam;
1707+INSERT INTO t_myisam VALUES(0);
1708+UPDATE t_myisam SET a = 1;
1709+REPLACE INTO t_myisam VALUES(1);
1710+SELECT * from t_myisam;
1711+a
1712+1
1713+1
1714+HANDLER t_myisam OPEN;
1715+HANDLER t_myisam READ a FIRST;
1716+a
1717+1
1718+HANDLER t_myisam CLOSE;
1719+DELETE FROM t_memory;
1720+INSERT INTO t_memory VALUES(0);
1721+UPDATE t_memory SET a = 1;
1722+REPLACE INTO t_memory VALUES(1);
1723+SELECT * from t_memory;
1724+a
1725+1
1726+1
1727+INSERT INTO t_archive VALUES(0);
1728+SELECT * from t_archive;
1729+a
1730+0
1731+1
1732+0
1733+DELETE FROM t_csv;
1734+INSERT INTO t_csv VALUES(0);
1735+UPDATE t_csv SET a = 1;
1736+REPLACE INTO t_csv VALUES(1);
1737+SELECT * from t_csv;
1738+a
1739+1
1740+1
1741+DELETE FROM t_blackhole;
1742+INSERT INTO t_blackhole VALUES(0);
1743+UPDATE t_blackhole SET a = 1;
1744+REPLACE INTO t_blackhole VALUES(1);
1745+SELECT * from t_blackhole;
1746+a
1747+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
1748+CREATE TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
1749+CREATE TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
1750+CREATE TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
1751+CREATE TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
1752+CREATE TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
1753+DROP TABLE tt_innodb;
1754+DROP TABLE tt_myisam;
1755+DROP TABLE tt_memory;
1756+DROP TABLE tt_csv;
1757+DROP TABLE tt_blackhole;
1758+DROP TABLE tt_archive;
1759+DROP TABLE non_existing;
1760+ERROR 42S02: Unknown table 'test.non_existing'
1761+TRUNCATE TABLE t_innodb;
1762+TRUNCATE TABLE t_myisam;
1763+TRUNCATE TABLE t_memory;
1764+TRUNCATE TABLE t_csv;
1765+TRUNCATE TABLE t_blackhole;
1766+RENAME TABLE t_innodb TO tmp, tmp TO t_innodb;
1767+RENAME TABLE t_myisam TO tmp, tmp TO t_myisam;
1768+RENAME TABLE t_memory TO tmp, tmp TO t_memory;
1769+RENAME TABLE t_csv TO tmp, tmp TO t_csv;
1770+RENAME TABLE t_blackhole TO tmp, tmp TO t_blackhole;
1771+RENAME TABLE t_archive TO tmp, tmp TO t_archive;
1772+ALTER TABLE t_innodb ADD COLUMN b CHAR(10) NOT NULL;
1773+ALTER TABLE t_innodb DROP COLUMN b;
1774+ALTER TABLE t_myisam ADD COLUMN b CHAR(10) NOT NULL;
1775+ALTER TABLE t_myisam DROP COLUMN b;
1776+ALTER TABLE t_memory ADD COLUMN b CHAR(10) NOT NULL;
1777+ALTER TABLE t_memory DROP COLUMN b;
1778+ALTER TABLE t_csv ADD COLUMN b CHAR(10) NOT NULL;
1779+ALTER TABLE t_csv DROP COLUMN b;
1780+ALTER TABLE t_blackhole ADD COLUMN b CHAR(10) NOT NULL;
1781+ALTER TABLE t_blackhole DROP COLUMN b;
1782+ALTER TABLE t_archive ADD COLUMN b CHAR(10) NOT NULL;
1783+ALTER TABLE t_archive DROP COLUMN b;
1784+ALTER TABLE t_innodb ADD KEY tmp (a);
1785+Warnings:
1786+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_innodb'. This is deprecated and will be disallowed in a future release.
1787+ALTER TABLE t_innodb DROP KEY tmp;
1788+ALTER TABLE t_myisam ADD KEY tmp (a);
1789+Warnings:
1790+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_myisam'. This is deprecated and will be disallowed in a future release.
1791+ALTER TABLE t_myisam DROP KEY tmp;
1792+ALTER TABLE t_memory ADD KEY tmp (a);
1793+Warnings:
1794+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_memory'. This is deprecated and will be disallowed in a future release.
1795+ALTER TABLE t_memory DROP KEY tmp;
1796+ALTER TABLE t_blackhole ADD KEY tmp (a);
1797+Warnings:
1798+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_blackhole'. This is deprecated and will be disallowed in a future release.
1799+ALTER TABLE t_blackhole DROP KEY tmp;
1800+CREATE DATABASE test1;
1801+DROP DATABASE test1;
1802+CREATE PROCEDURE p1()
1803+BEGIN
1804+SELECT 1;
1805+END|
1806+DROP PROCEDURE p1|
1807+CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
1808+BEGIN
1809+RETURN 1;
1810+END|
1811+DROP FUNCTION f1|
1812+CREATE VIEW v1 AS SELECT * FROM t_innodb;
1813+DROP VIEW v1;
1814+INSERT INTO v_innodb VALUES(1);
1815+INSERT INTO v_blackhole VALUES(1);
1816+INSERT INTO v_myisam VALUES(1);
1817+INSERT INTO v_csv VALUES(1);
1818+INSERT INTO v_memory VALUES(1);
1819+INSERT INTO v_archive VALUES(1);
1820+# connection default
1821+UNLOCK BINLOG;
1822+SET @old_general_log = @@general_log;
1823+SET @old_slow_query_log = @@slow_query_log;
1824+SET @old_log_output = @@log_output;
1825+SET GLOBAL log_output = 'TABLE';
1826+SET GLOBAL general_log = ON;
1827+SET GLOBAL slow_query_log = ON;
1828+LOCK TABLES FOR BACKUP;
1829+# connection con1
1830+SET @old_long_query_time = @@SESSION.long_query_time;
1831+SET SESSION long_query_time = 0;
1832+SELECT 1;
1833+1
1834+1
1835+# connection default
1836+LOCK BINLOG FOR BACKUP;
1837+SELECT 1;
1838+1
1839+1
1840+# connection con1
1841+SET SESSION long_query_time = @old_long_query_time;
1842+# connection default
1843+UNLOCK BINLOG;
1844+UNLOCK TABLES;
1845+SET GLOBAL log_output = @old_log_output;
1846+SET GLOBAL slow_query_log = @old_slow_query_log;
1847+SET GLOBAL general_log = @old_general_log;
1848+#-----------------------------------------------------------------------
1849+# Cleanup
1850+#-----------------------------------------------------------------------
1851+SET GLOBAL lock_wait_timeout=default;
1852+DROP USER user@localhost;
1853+DROP VIEW v_innodb, v_myisam, v_memory, v_csv, v_blackhole, v_archive;
1854+DROP TABLE t_innodb, t_myisam, t_memory, t_csv, t_blackhole, t_archive;
1855
1856=== added file 'mysql-test/r/backup_locks_binlog_mixed.result'
1857--- mysql-test/r/backup_locks_binlog_mixed.result 1970-01-01 00:00:00 +0000
1858+++ mysql-test/r/backup_locks_binlog_mixed.result 2014-02-25 07:31:10 +0000
1859@@ -0,0 +1,573 @@
1860+SET @old_binlog_format=@@binlog_format;
1861+SET GLOBAL binlog_format='MIXED';
1862+SET SESSION binlog_format='MIXED';
1863+SELECT @@binlog_format;
1864+@@binlog_format
1865+MIXED
1866+RESET MASTER;
1867+SHOW VARIABLES LIKE 'have_backup_locks';
1868+Variable_name Value
1869+have_backup_locks YES
1870+#-----------------------------------------------------------------------
1871+# Setup
1872+#-----------------------------------------------------------------------
1873+CREATE TABLE t_innodb(a INT NOT NULL, KEY (a)) ENGINE=InnoDB;
1874+CREATE TABLE t_myisam(a INT NOT NULL, KEY (a)) ENGINE=MyISAM;
1875+CREATE TABLE t_memory(a INT NOT NULL, KEY (a)) ENGINE=MEMORY;
1876+CREATE TABLE t_csv(a INT NOT NULL) ENGINE=CSV;
1877+CREATE TABLE t_blackhole(a INT NOT NULL, KEY (a)) ENGINE=BLACKHOLE;
1878+CREATE TABLE t_archive(a INT NOT NULL) ENGINE=ARCHIVE;
1879+CREATE VIEW v_innodb AS SELECT * FROM t_innodb;
1880+CREATE VIEW v_myisam AS SELECT * FROM t_myisam;
1881+CREATE VIEW v_memory AS SELECT * FROM t_memory;
1882+CREATE VIEW v_csv AS SELECT * FROM t_csv;
1883+CREATE VIEW v_blackhole AS SELECT * FROM t_blackhole;
1884+CREATE VIEW v_archive AS SELECT * FROM t_archive;
1885+#-----------------------------------------------------------------------
1886+# Single-threaded tests
1887+#-----------------------------------------------------------------------
1888+LOCK BINLOG FOR BACKUP;
1889+DELETE FROM t_innodb;
1890+INSERT INTO t_innodb VALUES(0);
1891+UPDATE t_innodb SET a = 1;
1892+REPLACE INTO t_innodb VALUES(1);
1893+SELECT * from t_innodb;
1894+a
1895+1
1896+1
1897+HANDLER t_innodb OPEN;
1898+HANDLER t_innodb READ a FIRST;
1899+a
1900+1
1901+HANDLER t_innodb CLOSE;
1902+DELETE FROM t_myisam;
1903+INSERT INTO t_myisam VALUES(0);
1904+UPDATE t_myisam SET a = 1;
1905+REPLACE INTO t_myisam VALUES(1);
1906+SELECT * from t_myisam;
1907+a
1908+1
1909+1
1910+HANDLER t_myisam OPEN;
1911+HANDLER t_myisam READ a FIRST;
1912+a
1913+1
1914+HANDLER t_myisam CLOSE;
1915+DELETE FROM t_memory;
1916+INSERT INTO t_memory VALUES(0);
1917+UPDATE t_memory SET a = 1;
1918+REPLACE INTO t_memory VALUES(1);
1919+SELECT * from t_memory;
1920+a
1921+1
1922+1
1923+DELETE FROM t_archive;
1924+INSERT INTO t_archive VALUES(0);
1925+SELECT * from t_archive;
1926+a
1927+0
1928+DELETE FROM t_csv;
1929+INSERT INTO t_csv VALUES(0);
1930+UPDATE t_csv SET a = 1;
1931+REPLACE INTO t_csv VALUES(1);
1932+SELECT * from t_csv;
1933+a
1934+1
1935+1
1936+DELETE FROM t_blackhole;
1937+INSERT INTO t_blackhole VALUES(0);
1938+UPDATE t_blackhole SET a = 1;
1939+REPLACE INTO t_blackhole VALUES(1);
1940+SELECT * from t_blackhole;
1941+a
1942+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
1943+CREATE TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
1944+CREATE TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
1945+CREATE TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
1946+CREATE TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
1947+CREATE TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
1948+DROP TABLE tt_innodb;
1949+DROP TABLE tt_myisam;
1950+DROP TABLE tt_memory;
1951+DROP TABLE tt_csv;
1952+DROP TABLE tt_blackhole;
1953+DROP TABLE tt_archive;
1954+DROP TABLE non_existing;
1955+ERROR 42S02: Unknown table 'test.non_existing'
1956+TRUNCATE TABLE t_innodb;
1957+TRUNCATE TABLE t_myisam;
1958+TRUNCATE TABLE t_memory;
1959+TRUNCATE TABLE t_csv;
1960+TRUNCATE TABLE t_blackhole;
1961+RENAME TABLE t_innodb TO tmp, tmp TO t_innodb;
1962+RENAME TABLE t_myisam TO tmp, tmp TO t_myisam;
1963+RENAME TABLE t_memory TO tmp, tmp TO t_memory;
1964+RENAME TABLE t_csv TO tmp, tmp TO t_csv;
1965+RENAME TABLE t_blackhole TO tmp, tmp TO t_blackhole;
1966+RENAME TABLE t_archive TO tmp, tmp TO t_archive;
1967+ALTER TABLE t_innodb ADD COLUMN b CHAR(10) NOT NULL;
1968+ALTER TABLE t_innodb DROP COLUMN b;
1969+ALTER TABLE t_myisam ADD COLUMN b CHAR(10) NOT NULL;
1970+ALTER TABLE t_myisam DROP COLUMN b;
1971+ALTER TABLE t_memory ADD COLUMN b CHAR(10) NOT NULL;
1972+ALTER TABLE t_memory DROP COLUMN b;
1973+ALTER TABLE t_csv ADD COLUMN b CHAR(10) NOT NULL;
1974+ALTER TABLE t_csv DROP COLUMN b;
1975+ALTER TABLE t_blackhole ADD COLUMN b CHAR(10) NOT NULL;
1976+ALTER TABLE t_blackhole DROP COLUMN b;
1977+ALTER TABLE t_archive ADD COLUMN b CHAR(10) NOT NULL;
1978+ALTER TABLE t_archive DROP COLUMN b;
1979+ALTER TABLE t_innodb ADD KEY tmp (a);
1980+Warnings:
1981+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_innodb'. This is deprecated and will be disallowed in a future release.
1982+ALTER TABLE t_innodb DROP KEY tmp;
1983+ALTER TABLE t_myisam ADD KEY tmp (a);
1984+Warnings:
1985+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_myisam'. This is deprecated and will be disallowed in a future release.
1986+ALTER TABLE t_myisam DROP KEY tmp;
1987+ALTER TABLE t_memory ADD KEY tmp (a);
1988+Warnings:
1989+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_memory'. This is deprecated and will be disallowed in a future release.
1990+ALTER TABLE t_memory DROP KEY tmp;
1991+ALTER TABLE t_blackhole ADD KEY tmp (a);
1992+Warnings:
1993+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_blackhole'. This is deprecated and will be disallowed in a future release.
1994+ALTER TABLE t_blackhole DROP KEY tmp;
1995+CREATE DATABASE test1;
1996+DROP DATABASE test1;
1997+CREATE PROCEDURE p1()
1998+BEGIN
1999+SELECT 1;
2000+END|
2001+DROP PROCEDURE p1|
2002+CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
2003+BEGIN
2004+RETURN 1;
2005+END|
2006+DROP FUNCTION f1|
2007+CREATE VIEW v1 AS SELECT * FROM t_innodb;
2008+DROP VIEW v1;
2009+INSERT INTO v_innodb VALUES(1);
2010+INSERT INTO v_blackhole VALUES(1);
2011+INSERT INTO v_myisam VALUES(1);
2012+INSERT INTO v_csv VALUES(1);
2013+INSERT INTO v_memory VALUES(1);
2014+INSERT INTO v_archive VALUES(1);
2015+UNLOCK BINLOG;
2016+SELECT @@delay_key_write;
2017+@@delay_key_write
2018+ON
2019+SET GLOBAL delay_key_write=ALL;
2020+LOCK TABLES FOR BACKUP;
2021+ERROR HY000: The MySQL server is running with the delay_key_write=ALL option so it cannot execute this statement
2022+SET GLOBAL delay_key_write=default;
2023+SELECT @@delay_key_write;
2024+@@delay_key_write
2025+ON
2026+SET GLOBAL read_only=1;
2027+INSERT INTO t_innodb VALUES(0);
2028+INSERT INTO t_myisam VALUES(0);
2029+LOCK TABLES FOR BACKUP;
2030+INSERT INTO t_innodb VALUES(0);
2031+INSERT INTO t_myisam VALUES(0);
2032+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
2033+UNLOCK TABLES;
2034+INSERT INTO t_innodb VALUES(0);
2035+INSERT INTO t_myisam VALUES(0);
2036+SET GLOBAL read_only=0;
2037+LOCK TABLES FOR BACKUP;
2038+CREATE TEMPORARY TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
2039+CREATE TEMPORARY TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
2040+CREATE TEMPORARY TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
2041+CREATE TEMPORARY TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
2042+CREATE TEMPORARY TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
2043+CREATE TEMPORARY TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
2044+INSERT INTO tt_innodb VALUES(5);
2045+INSERT INTO tt_myisam VALUES(5);
2046+INSERT INTO tt_memory VALUES(5);
2047+INSERT INTO tt_csv VALUES(5);
2048+INSERT INTO tt_blackhole VALUES(5);
2049+INSERT INTO tt_archive VALUES(5);
2050+LOCK BINLOG FOR BACKUP;
2051+START TRANSACTION;
2052+SELECT * FROM tt_archive;
2053+a
2054+5
2055+SELECT * FROM tt_blackhole;
2056+a
2057+SELECT * FROM tt_memory;
2058+a
2059+5
2060+SELECT * FROM tt_innodb;
2061+a
2062+5
2063+SELECT * FROM tt_myisam;
2064+a
2065+5
2066+INSERT INTO tt_innodb VALUES(6);
2067+INSERT INTO tt_myisam VALUES(6);
2068+INSERT INTO tt_memory VALUES(6);
2069+INSERT INTO tt_csv VALUES(6);
2070+INSERT INTO tt_blackhole VALUES(6);
2071+INSERT INTO tt_archive VALUES(6);
2072+COMMIT;
2073+SELECT * FROM tt_archive;
2074+a
2075+5
2076+6
2077+SELECT * FROM tt_blackhole;
2078+a
2079+SELECT * FROM tt_memory;
2080+a
2081+5
2082+6
2083+SELECT * FROM tt_innodb;
2084+a
2085+5
2086+6
2087+SELECT * FROM tt_myisam;
2088+a
2089+5
2090+6
2091+DROP TEMPORARY TABLE tt_innodb;
2092+DROP TEMPORARY TABLE tt_myisam;
2093+DROP TEMPORARY TABLE tt_memory;
2094+DROP TEMPORARY TABLE tt_csv;
2095+DROP TEMPORARY TABLE tt_blackhole;
2096+DROP TEMPORARY TABLE tt_archive;
2097+UNLOCK BINLOG;
2098+UNLOCK TABLES;
2099+SELECT @@log_bin;
2100+@@log_bin
2101+1
2102+LOCK BINLOG FOR BACKUP;
2103+INSERT INTO t_innodb VALUES(1);
2104+INSERT INTO t_myisam VALUES(1);
2105+UNLOCK BINLOG;
2106+SET @old_general_log = @@general_log;
2107+SET @old_slow_query_log = @@slow_query_log;
2108+SET @old_log_output = @@log_output;
2109+SET @old_long_query_time = @@SESSION.long_query_time;
2110+SET SESSION long_query_time = 0;
2111+SET GLOBAL log_output = 'TABLE';
2112+SET GLOBAL general_log = ON;
2113+SET GLOBAL slow_query_log = ON;
2114+LOCK TABLES FOR BACKUP;
2115+SELECT 1;
2116+1
2117+1
2118+LOCK BINLOG FOR BACKUP;
2119+SELECT 1;
2120+1
2121+1
2122+UNLOCK BINLOG;
2123+UNLOCK TABLES;
2124+SET SESSION long_query_time = @old_long_query_time;
2125+SET GLOBAL log_output = @old_log_output;
2126+SET GLOBAL slow_query_log = @old_slow_query_log;
2127+SET GLOBAL general_log = @old_general_log;
2128+#-----------------------------------------------------------------------
2129+# Multi-threaded tests
2130+#-----------------------------------------------------------------------
2131+# connection default
2132+CREATE USER user@localhost;
2133+GRANT ALL PRIVILEGES ON test.* TO user@localhost;
2134+LOCK TABLES FOR BACKUP;
2135+# connection con1
2136+SET SESSION lock_wait_timeout = 1;
2137+SET GLOBAL delay_key_write=ALL;
2138+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2139+SET SESSION lock_wait_timeout = DEFAULT;
2140+# connection default
2141+UNLOCK TABLES;
2142+# connection con2
2143+START TRANSACTION;
2144+INSERT INTO t_innodb VALUES(0);
2145+# connection default
2146+SET GLOBAL read_only=1;
2147+# connection con2
2148+COMMIT;
2149+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2150+INSERT INTO t_innodb VALUES(0);
2151+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2152+INSERT INTO t_myisam VALUES(0);
2153+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2154+# connection con1
2155+LOCK TABLES FOR BACKUP;
2156+# connection con2
2157+INSERT INTO t_innodb VALUES(0);
2158+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2159+INSERT INTO t_myisam VALUES(0);
2160+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2161+# connection default
2162+SET GLOBAL read_only=0;
2163+# connection con2
2164+SET SESSION lock_wait_timeout = 1;
2165+INSERT INTO t_innodb VALUES(0);
2166+INSERT INTO t_myisam VALUES(0);
2167+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2168+SET SESSION lock_wait_timeout = 0;
2169+Warnings:
2170+Warning 1292 Truncated incorrect lock_wait_timeout value: '0'
2171+# connection default
2172+SET GLOBAL read_only=1;
2173+# connection con2
2174+INSERT INTO t_innodb VALUES(0);
2175+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2176+INSERT INTO t_myisam VALUES(0);
2177+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2178+# connection con1
2179+UNLOCK TABLES;
2180+# connection con2
2181+INSERT INTO t_innodb VALUES(0);
2182+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2183+INSERT INTO t_myisam VALUES(0);
2184+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2185+# connection default
2186+SET GLOBAL read_only=0;
2187+# connection default
2188+LOCK TABLES FOR BACKUP;
2189+# connection con1
2190+CREATE TEMPORARY TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
2191+CREATE TEMPORARY TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
2192+CREATE TEMPORARY TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
2193+CREATE TEMPORARY TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
2194+CREATE TEMPORARY TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
2195+CREATE TEMPORARY TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
2196+INSERT INTO tt_innodb VALUES(5);
2197+INSERT INTO tt_myisam VALUES(5);
2198+INSERT INTO tt_memory VALUES(5);
2199+INSERT INTO tt_csv VALUES(5);
2200+INSERT INTO tt_blackhole VALUES(5);
2201+INSERT INTO tt_archive VALUES(5);
2202+# connection default
2203+LOCK BINLOG FOR BACKUP;
2204+# connection con1
2205+SET SESSION lock_wait_timeout = 1;
2206+START TRANSACTION;
2207+INSERT INTO tt_myisam VALUES(6);
2208+INSERT INTO tt_innodb VALUES(6);
2209+SELECT * FROM tt_archive;
2210+a
2211+5
2212+SELECT * FROM tt_blackhole;
2213+a
2214+SELECT * FROM tt_memory;
2215+a
2216+5
2217+SELECT * FROM tt_innodb;
2218+a
2219+5
2220+6
2221+SELECT * FROM tt_myisam;
2222+a
2223+5
2224+6
2225+SELECT * FROM tt_csv;
2226+a
2227+5
2228+# connection default
2229+must_be_1
2230+1
2231+UNLOCK BINLOG;
2232+UNLOCK TABLES;
2233+# connection con1
2234+COMMIT;
2235+DROP TEMPORARY TABLE tt_innodb;
2236+DROP TEMPORARY TABLE tt_myisam;
2237+DROP TEMPORARY TABLE tt_memory;
2238+DROP TEMPORARY TABLE tt_csv;
2239+DROP TEMPORARY TABLE tt_blackhole;
2240+DROP TEMPORARY TABLE tt_archive;
2241+# connection default
2242+LOCK BINLOG FOR BACKUP;
2243+# connection con1
2244+SET SESSION lock_wait_timeout = 1;
2245+INSERT INTO t_innodb VALUES(1);
2246+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2247+INSERT INTO t_myisam VALUES(1);
2248+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2249+SET SESSION lock_wait_timeout = DEFAULT;
2250+# connection default
2251+must_be_1
2252+1
2253+UNLOCK BINLOG;
2254+# connection default
2255+LOCK BINLOG FOR BACKUP;
2256+# connection con1
2257+SET SESSION lock_wait_timeout = 1;
2258+DELETE FROM t_innodb;
2259+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2260+INSERT INTO t_innodb VALUES(0);
2261+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2262+UPDATE t_innodb SET a = 1;
2263+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2264+REPLACE INTO t_innodb VALUES(1);
2265+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2266+SELECT * from t_innodb;
2267+a
2268+0
2269+0
2270+0
2271+0
2272+1
2273+1
2274+HANDLER t_innodb OPEN;
2275+HANDLER t_innodb READ a FIRST;
2276+a
2277+0
2278+HANDLER t_innodb CLOSE;
2279+START TRANSACTION;
2280+SELECT * from t_innodb;
2281+a
2282+0
2283+0
2284+0
2285+0
2286+1
2287+1
2288+DELETE FROM t_innodb;
2289+INSERT INTO t_innodb VALUES(0);
2290+UPDATE t_innodb SET a = 1;
2291+REPLACE INTO t_innodb VALUES(1);
2292+COMMIT;
2293+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2294+SELECT * FROM t_innodb;
2295+a
2296+0
2297+0
2298+0
2299+0
2300+1
2301+1
2302+COMMIT;
2303+START TRANSACTION;
2304+INSERT INTO t_myisam VALUES(1);
2305+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2306+COMMIT;
2307+INSERT INTO t_myisam VALUES(0);
2308+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2309+UPDATE t_myisam SET a = 1;
2310+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2311+SELECT * FROM t_myisam;
2312+a
2313+1
2314+1
2315+1
2316+1
2317+1
2318+1
2319+1
2320+HANDLER t_myisam OPEN;
2321+HANDLER t_myisam READ a FIRST;
2322+a
2323+1
2324+HANDLER t_myisam CLOSE;
2325+DELETE FROM t_blackhole;
2326+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2327+INSERT INTO t_blackhole VALUES(0);
2328+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2329+UPDATE t_blackhole SET a = 1;
2330+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2331+REPLACE INTO t_blackhole VALUES(1);
2332+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2333+SELECT * FROM t_blackhole;
2334+a
2335+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
2336+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2337+DROP TABLE tt_innodb;
2338+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2339+DROP TABLE non_existing;
2340+ERROR 42S02: Unknown table 'test.non_existing'
2341+CREATE TABLE t_innodb(a INT NOT NULL) ENGINE=InnoDB;
2342+ERROR 42S01: Table 't_innodb' already exists
2343+TRUNCATE TABLE t_innodb;
2344+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2345+RENAME TABLE t_innodb TO tmp, tmp to t_innodb;
2346+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2347+ALTER TABLE t_innodb ADD COLUMN b CHAR(10);
2348+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2349+ALTER TABLE t_innodb ADD KEY (a);
2350+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2351+CREATE DATABASE test1;
2352+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2353+DROP DATABASE test1;
2354+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2355+CREATE PROCEDURE p1() SELECT 1;
2356+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2357+DROP PROCEDURE p1;
2358+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2359+CREATE VIEW v1 AS SELECT * FROM t_innodb;
2360+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2361+DROP VIEW v1;
2362+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2363+INSERT INTO v_innodb VALUES(1);
2364+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2365+# connection default
2366+must_be_1
2367+1
2368+UNLOCK BINLOG;
2369+# connection con1
2370+SHOW CREATE TABLE t_innodb;
2371+Table Create Table
2372+t_innodb CREATE TABLE `t_innodb` (
2373+ `a` int(11) NOT NULL,
2374+ `b` char(10) DEFAULT NULL,
2375+ KEY `a` (`a`),
2376+ KEY `a_2` (`a`)
2377+) ENGINE=InnoDB DEFAULT CHARSET=latin1
2378+DROP TABLE t_innodb;
2379+CREATE TABLE t_innodb(a INT NOT NULL) ENGINE=InnoDB;
2380+# connection default
2381+LOCK BINLOG FOR BACKUP;
2382+# connection con1
2383+INSERT DELAYED INTO t_myisam VALUES(0);
2384+Warnings:
2385+Warning 1287 'INSERT DELAYED' is deprecated and will be removed in a future release. Please use INSERT instead
2386+# connection default
2387+must_be_1
2388+1
2389+UNLOCK BINLOG;
2390+SELECT * FROm t_myisam;
2391+a
2392+0
2393+1
2394+1
2395+1
2396+1
2397+1
2398+1
2399+1
2400+SET @old_general_log = @@general_log;
2401+SET @old_slow_query_log = @@slow_query_log;
2402+SET @old_log_output = @@log_output;
2403+SET GLOBAL log_output = 'TABLE';
2404+SET GLOBAL general_log = ON;
2405+SET GLOBAL slow_query_log = ON;
2406+LOCK BINLOG FOR BACKUP;
2407+# connection con1
2408+SET @old_long_query_time = @@SESSION.long_query_time;
2409+SET SESSION long_query_time = 0;
2410+SELECT 1;
2411+1
2412+1
2413+# connection default
2414+SELECT 1;
2415+1
2416+1
2417+# connection con1
2418+SET SESSION long_query_time = @old_long_query_time;
2419+# connection default
2420+must_be_1
2421+1
2422+UNLOCK BINLOG;
2423+SET GLOBAL log_output = @old_log_output;
2424+SET GLOBAL slow_query_log = @old_slow_query_log;
2425+SET GLOBAL general_log = @old_general_log;
2426+#-----------------------------------------------------------------------
2427+# Cleanup
2428+#-----------------------------------------------------------------------
2429+DROP USER user@localhost;
2430+DROP VIEW v_innodb, v_myisam, v_memory, v_csv, v_blackhole, v_archive;
2431+DROP TABLE t_innodb, t_myisam, t_memory, t_csv, t_blackhole, t_archive;
2432+SET GLOBAL binlog_format = @old_binlog_format;
2433
2434=== added file 'mysql-test/r/backup_locks_binlog_row.result'
2435--- mysql-test/r/backup_locks_binlog_row.result 1970-01-01 00:00:00 +0000
2436+++ mysql-test/r/backup_locks_binlog_row.result 2014-02-25 07:31:10 +0000
2437@@ -0,0 +1,579 @@
2438+SET @old_binlog_format=@@binlog_format;
2439+SET GLOBAL binlog_format='ROW';
2440+SET SESSION binlog_format='ROW';
2441+SELECT @@binlog_format;
2442+@@binlog_format
2443+ROW
2444+RESET MASTER;
2445+SHOW VARIABLES LIKE 'have_backup_locks';
2446+Variable_name Value
2447+have_backup_locks YES
2448+#-----------------------------------------------------------------------
2449+# Setup
2450+#-----------------------------------------------------------------------
2451+CREATE TABLE t_innodb(a INT NOT NULL, KEY (a)) ENGINE=InnoDB;
2452+CREATE TABLE t_myisam(a INT NOT NULL, KEY (a)) ENGINE=MyISAM;
2453+CREATE TABLE t_memory(a INT NOT NULL, KEY (a)) ENGINE=MEMORY;
2454+CREATE TABLE t_csv(a INT NOT NULL) ENGINE=CSV;
2455+CREATE TABLE t_blackhole(a INT NOT NULL, KEY (a)) ENGINE=BLACKHOLE;
2456+CREATE TABLE t_archive(a INT NOT NULL) ENGINE=ARCHIVE;
2457+CREATE VIEW v_innodb AS SELECT * FROM t_innodb;
2458+CREATE VIEW v_myisam AS SELECT * FROM t_myisam;
2459+CREATE VIEW v_memory AS SELECT * FROM t_memory;
2460+CREATE VIEW v_csv AS SELECT * FROM t_csv;
2461+CREATE VIEW v_blackhole AS SELECT * FROM t_blackhole;
2462+CREATE VIEW v_archive AS SELECT * FROM t_archive;
2463+#-----------------------------------------------------------------------
2464+# Single-threaded tests
2465+#-----------------------------------------------------------------------
2466+LOCK BINLOG FOR BACKUP;
2467+DELETE FROM t_innodb;
2468+INSERT INTO t_innodb VALUES(0);
2469+UPDATE t_innodb SET a = 1;
2470+REPLACE INTO t_innodb VALUES(1);
2471+SELECT * from t_innodb;
2472+a
2473+1
2474+1
2475+HANDLER t_innodb OPEN;
2476+HANDLER t_innodb READ a FIRST;
2477+a
2478+1
2479+HANDLER t_innodb CLOSE;
2480+DELETE FROM t_myisam;
2481+INSERT INTO t_myisam VALUES(0);
2482+UPDATE t_myisam SET a = 1;
2483+REPLACE INTO t_myisam VALUES(1);
2484+SELECT * from t_myisam;
2485+a
2486+1
2487+1
2488+HANDLER t_myisam OPEN;
2489+HANDLER t_myisam READ a FIRST;
2490+a
2491+1
2492+HANDLER t_myisam CLOSE;
2493+DELETE FROM t_memory;
2494+INSERT INTO t_memory VALUES(0);
2495+UPDATE t_memory SET a = 1;
2496+REPLACE INTO t_memory VALUES(1);
2497+SELECT * from t_memory;
2498+a
2499+1
2500+1
2501+DELETE FROM t_archive;
2502+INSERT INTO t_archive VALUES(0);
2503+SELECT * from t_archive;
2504+a
2505+0
2506+DELETE FROM t_csv;
2507+INSERT INTO t_csv VALUES(0);
2508+UPDATE t_csv SET a = 1;
2509+REPLACE INTO t_csv VALUES(1);
2510+SELECT * from t_csv;
2511+a
2512+1
2513+1
2514+DELETE FROM t_blackhole;
2515+Warnings:
2516+Warning 1870 Row events are not logged for DELETE statements that modify BLACKHOLE tables in row format. Table(s): 't_blackhole.'
2517+INSERT INTO t_blackhole VALUES(0);
2518+UPDATE t_blackhole SET a = 1;
2519+Warnings:
2520+Warning 1870 Row events are not logged for UPDATE statements that modify BLACKHOLE tables in row format. Table(s): 't_blackhole.'
2521+REPLACE INTO t_blackhole VALUES(1);
2522+SELECT * from t_blackhole;
2523+a
2524+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
2525+CREATE TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
2526+CREATE TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
2527+CREATE TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
2528+CREATE TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
2529+CREATE TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
2530+DROP TABLE tt_innodb;
2531+DROP TABLE tt_myisam;
2532+DROP TABLE tt_memory;
2533+DROP TABLE tt_csv;
2534+DROP TABLE tt_blackhole;
2535+DROP TABLE tt_archive;
2536+DROP TABLE non_existing;
2537+ERROR 42S02: Unknown table 'test.non_existing'
2538+TRUNCATE TABLE t_innodb;
2539+TRUNCATE TABLE t_myisam;
2540+TRUNCATE TABLE t_memory;
2541+TRUNCATE TABLE t_csv;
2542+TRUNCATE TABLE t_blackhole;
2543+RENAME TABLE t_innodb TO tmp, tmp TO t_innodb;
2544+RENAME TABLE t_myisam TO tmp, tmp TO t_myisam;
2545+RENAME TABLE t_memory TO tmp, tmp TO t_memory;
2546+RENAME TABLE t_csv TO tmp, tmp TO t_csv;
2547+RENAME TABLE t_blackhole TO tmp, tmp TO t_blackhole;
2548+RENAME TABLE t_archive TO tmp, tmp TO t_archive;
2549+ALTER TABLE t_innodb ADD COLUMN b CHAR(10) NOT NULL;
2550+ALTER TABLE t_innodb DROP COLUMN b;
2551+ALTER TABLE t_myisam ADD COLUMN b CHAR(10) NOT NULL;
2552+ALTER TABLE t_myisam DROP COLUMN b;
2553+ALTER TABLE t_memory ADD COLUMN b CHAR(10) NOT NULL;
2554+ALTER TABLE t_memory DROP COLUMN b;
2555+ALTER TABLE t_csv ADD COLUMN b CHAR(10) NOT NULL;
2556+ALTER TABLE t_csv DROP COLUMN b;
2557+ALTER TABLE t_blackhole ADD COLUMN b CHAR(10) NOT NULL;
2558+ALTER TABLE t_blackhole DROP COLUMN b;
2559+ALTER TABLE t_archive ADD COLUMN b CHAR(10) NOT NULL;
2560+ALTER TABLE t_archive DROP COLUMN b;
2561+ALTER TABLE t_innodb ADD KEY tmp (a);
2562+Warnings:
2563+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_innodb'. This is deprecated and will be disallowed in a future release.
2564+ALTER TABLE t_innodb DROP KEY tmp;
2565+ALTER TABLE t_myisam ADD KEY tmp (a);
2566+Warnings:
2567+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_myisam'. This is deprecated and will be disallowed in a future release.
2568+ALTER TABLE t_myisam DROP KEY tmp;
2569+ALTER TABLE t_memory ADD KEY tmp (a);
2570+Warnings:
2571+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_memory'. This is deprecated and will be disallowed in a future release.
2572+ALTER TABLE t_memory DROP KEY tmp;
2573+ALTER TABLE t_blackhole ADD KEY tmp (a);
2574+Warnings:
2575+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_blackhole'. This is deprecated and will be disallowed in a future release.
2576+ALTER TABLE t_blackhole DROP KEY tmp;
2577+CREATE DATABASE test1;
2578+DROP DATABASE test1;
2579+CREATE PROCEDURE p1()
2580+BEGIN
2581+SELECT 1;
2582+END|
2583+DROP PROCEDURE p1|
2584+CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
2585+BEGIN
2586+RETURN 1;
2587+END|
2588+DROP FUNCTION f1|
2589+CREATE VIEW v1 AS SELECT * FROM t_innodb;
2590+DROP VIEW v1;
2591+INSERT INTO v_innodb VALUES(1);
2592+INSERT INTO v_blackhole VALUES(1);
2593+INSERT INTO v_myisam VALUES(1);
2594+INSERT INTO v_csv VALUES(1);
2595+INSERT INTO v_memory VALUES(1);
2596+INSERT INTO v_archive VALUES(1);
2597+UNLOCK BINLOG;
2598+SELECT @@delay_key_write;
2599+@@delay_key_write
2600+ON
2601+SET GLOBAL delay_key_write=ALL;
2602+LOCK TABLES FOR BACKUP;
2603+ERROR HY000: The MySQL server is running with the delay_key_write=ALL option so it cannot execute this statement
2604+SET GLOBAL delay_key_write=default;
2605+SELECT @@delay_key_write;
2606+@@delay_key_write
2607+ON
2608+SET GLOBAL read_only=1;
2609+INSERT INTO t_innodb VALUES(0);
2610+INSERT INTO t_myisam VALUES(0);
2611+LOCK TABLES FOR BACKUP;
2612+INSERT INTO t_innodb VALUES(0);
2613+INSERT INTO t_myisam VALUES(0);
2614+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
2615+UNLOCK TABLES;
2616+INSERT INTO t_innodb VALUES(0);
2617+INSERT INTO t_myisam VALUES(0);
2618+SET GLOBAL read_only=0;
2619+LOCK TABLES FOR BACKUP;
2620+CREATE TEMPORARY TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
2621+CREATE TEMPORARY TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
2622+CREATE TEMPORARY TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
2623+CREATE TEMPORARY TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
2624+CREATE TEMPORARY TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
2625+CREATE TEMPORARY TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
2626+INSERT INTO tt_innodb VALUES(5);
2627+INSERT INTO tt_myisam VALUES(5);
2628+INSERT INTO tt_memory VALUES(5);
2629+INSERT INTO tt_csv VALUES(5);
2630+INSERT INTO tt_blackhole VALUES(5);
2631+INSERT INTO tt_archive VALUES(5);
2632+LOCK BINLOG FOR BACKUP;
2633+START TRANSACTION;
2634+SELECT * FROM tt_archive;
2635+a
2636+5
2637+SELECT * FROM tt_blackhole;
2638+a
2639+SELECT * FROM tt_memory;
2640+a
2641+5
2642+SELECT * FROM tt_innodb;
2643+a
2644+5
2645+SELECT * FROM tt_myisam;
2646+a
2647+5
2648+INSERT INTO tt_innodb VALUES(6);
2649+INSERT INTO tt_myisam VALUES(6);
2650+INSERT INTO tt_memory VALUES(6);
2651+INSERT INTO tt_csv VALUES(6);
2652+INSERT INTO tt_blackhole VALUES(6);
2653+INSERT INTO tt_archive VALUES(6);
2654+COMMIT;
2655+SELECT * FROM tt_archive;
2656+a
2657+5
2658+6
2659+SELECT * FROM tt_blackhole;
2660+a
2661+SELECT * FROM tt_memory;
2662+a
2663+5
2664+6
2665+SELECT * FROM tt_innodb;
2666+a
2667+5
2668+6
2669+SELECT * FROM tt_myisam;
2670+a
2671+5
2672+6
2673+DROP TEMPORARY TABLE tt_innodb;
2674+DROP TEMPORARY TABLE tt_myisam;
2675+DROP TEMPORARY TABLE tt_memory;
2676+DROP TEMPORARY TABLE tt_csv;
2677+DROP TEMPORARY TABLE tt_blackhole;
2678+DROP TEMPORARY TABLE tt_archive;
2679+UNLOCK BINLOG;
2680+UNLOCK TABLES;
2681+SELECT @@log_bin;
2682+@@log_bin
2683+1
2684+LOCK BINLOG FOR BACKUP;
2685+INSERT INTO t_innodb VALUES(1);
2686+INSERT INTO t_myisam VALUES(1);
2687+UNLOCK BINLOG;
2688+SET @old_general_log = @@general_log;
2689+SET @old_slow_query_log = @@slow_query_log;
2690+SET @old_log_output = @@log_output;
2691+SET @old_long_query_time = @@SESSION.long_query_time;
2692+SET SESSION long_query_time = 0;
2693+SET GLOBAL log_output = 'TABLE';
2694+SET GLOBAL general_log = ON;
2695+SET GLOBAL slow_query_log = ON;
2696+LOCK TABLES FOR BACKUP;
2697+SELECT 1;
2698+1
2699+1
2700+LOCK BINLOG FOR BACKUP;
2701+SELECT 1;
2702+1
2703+1
2704+UNLOCK BINLOG;
2705+UNLOCK TABLES;
2706+SET SESSION long_query_time = @old_long_query_time;
2707+SET GLOBAL log_output = @old_log_output;
2708+SET GLOBAL slow_query_log = @old_slow_query_log;
2709+SET GLOBAL general_log = @old_general_log;
2710+#-----------------------------------------------------------------------
2711+# Multi-threaded tests
2712+#-----------------------------------------------------------------------
2713+# connection default
2714+CREATE USER user@localhost;
2715+GRANT ALL PRIVILEGES ON test.* TO user@localhost;
2716+LOCK TABLES FOR BACKUP;
2717+# connection con1
2718+SET SESSION lock_wait_timeout = 1;
2719+SET GLOBAL delay_key_write=ALL;
2720+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2721+SET SESSION lock_wait_timeout = DEFAULT;
2722+# connection default
2723+UNLOCK TABLES;
2724+# connection con2
2725+START TRANSACTION;
2726+INSERT INTO t_innodb VALUES(0);
2727+# connection default
2728+SET GLOBAL read_only=1;
2729+# connection con2
2730+COMMIT;
2731+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2732+INSERT INTO t_innodb VALUES(0);
2733+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2734+INSERT INTO t_myisam VALUES(0);
2735+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2736+# connection con1
2737+LOCK TABLES FOR BACKUP;
2738+# connection con2
2739+INSERT INTO t_innodb VALUES(0);
2740+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2741+INSERT INTO t_myisam VALUES(0);
2742+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2743+# connection default
2744+SET GLOBAL read_only=0;
2745+# connection con2
2746+SET SESSION lock_wait_timeout = 1;
2747+INSERT INTO t_innodb VALUES(0);
2748+INSERT INTO t_myisam VALUES(0);
2749+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2750+SET SESSION lock_wait_timeout = 0;
2751+Warnings:
2752+Warning 1292 Truncated incorrect lock_wait_timeout value: '0'
2753+# connection default
2754+SET GLOBAL read_only=1;
2755+# connection con2
2756+INSERT INTO t_innodb VALUES(0);
2757+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2758+INSERT INTO t_myisam VALUES(0);
2759+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2760+# connection con1
2761+UNLOCK TABLES;
2762+# connection con2
2763+INSERT INTO t_innodb VALUES(0);
2764+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2765+INSERT INTO t_myisam VALUES(0);
2766+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
2767+# connection default
2768+SET GLOBAL read_only=0;
2769+# connection default
2770+LOCK TABLES FOR BACKUP;
2771+# connection con1
2772+CREATE TEMPORARY TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
2773+CREATE TEMPORARY TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
2774+CREATE TEMPORARY TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
2775+CREATE TEMPORARY TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
2776+CREATE TEMPORARY TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
2777+CREATE TEMPORARY TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
2778+INSERT INTO tt_innodb VALUES(5);
2779+INSERT INTO tt_myisam VALUES(5);
2780+INSERT INTO tt_memory VALUES(5);
2781+INSERT INTO tt_csv VALUES(5);
2782+INSERT INTO tt_blackhole VALUES(5);
2783+INSERT INTO tt_archive VALUES(5);
2784+# connection default
2785+LOCK BINLOG FOR BACKUP;
2786+# connection con1
2787+SET SESSION lock_wait_timeout = 1;
2788+START TRANSACTION;
2789+INSERT INTO tt_myisam VALUES(6);
2790+INSERT INTO tt_innodb VALUES(6);
2791+SELECT * FROM tt_archive;
2792+a
2793+5
2794+SELECT * FROM tt_blackhole;
2795+a
2796+SELECT * FROM tt_memory;
2797+a
2798+5
2799+SELECT * FROM tt_innodb;
2800+a
2801+5
2802+6
2803+SELECT * FROM tt_myisam;
2804+a
2805+5
2806+6
2807+SELECT * FROM tt_csv;
2808+a
2809+5
2810+# connection default
2811+must_be_1
2812+1
2813+UNLOCK BINLOG;
2814+UNLOCK TABLES;
2815+# connection con1
2816+COMMIT;
2817+DROP TEMPORARY TABLE tt_innodb;
2818+DROP TEMPORARY TABLE tt_myisam;
2819+DROP TEMPORARY TABLE tt_memory;
2820+DROP TEMPORARY TABLE tt_csv;
2821+DROP TEMPORARY TABLE tt_blackhole;
2822+DROP TEMPORARY TABLE tt_archive;
2823+# connection default
2824+LOCK BINLOG FOR BACKUP;
2825+# connection con1
2826+SET SESSION lock_wait_timeout = 1;
2827+INSERT INTO t_innodb VALUES(1);
2828+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2829+INSERT INTO t_myisam VALUES(1);
2830+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2831+SET SESSION lock_wait_timeout = DEFAULT;
2832+# connection default
2833+must_be_1
2834+1
2835+UNLOCK BINLOG;
2836+# connection default
2837+LOCK BINLOG FOR BACKUP;
2838+# connection con1
2839+SET SESSION lock_wait_timeout = 1;
2840+DELETE FROM t_innodb;
2841+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2842+INSERT INTO t_innodb VALUES(0);
2843+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2844+UPDATE t_innodb SET a = 1;
2845+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2846+REPLACE INTO t_innodb VALUES(1);
2847+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2848+SELECT * from t_innodb;
2849+a
2850+0
2851+0
2852+0
2853+0
2854+1
2855+1
2856+HANDLER t_innodb OPEN;
2857+HANDLER t_innodb READ a FIRST;
2858+a
2859+0
2860+HANDLER t_innodb CLOSE;
2861+START TRANSACTION;
2862+SELECT * from t_innodb;
2863+a
2864+0
2865+0
2866+0
2867+0
2868+1
2869+1
2870+DELETE FROM t_innodb;
2871+INSERT INTO t_innodb VALUES(0);
2872+UPDATE t_innodb SET a = 1;
2873+REPLACE INTO t_innodb VALUES(1);
2874+COMMIT;
2875+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2876+SELECT * FROM t_innodb;
2877+a
2878+0
2879+0
2880+0
2881+0
2882+1
2883+1
2884+COMMIT;
2885+START TRANSACTION;
2886+INSERT INTO t_myisam VALUES(1);
2887+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2888+COMMIT;
2889+INSERT INTO t_myisam VALUES(0);
2890+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2891+UPDATE t_myisam SET a = 1;
2892+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2893+SELECT * FROM t_myisam;
2894+a
2895+1
2896+1
2897+1
2898+1
2899+1
2900+1
2901+1
2902+HANDLER t_myisam OPEN;
2903+HANDLER t_myisam READ a FIRST;
2904+a
2905+1
2906+HANDLER t_myisam CLOSE;
2907+DELETE FROM t_blackhole;
2908+Warnings:
2909+Warning 1870 Row events are not logged for DELETE statements that modify BLACKHOLE tables in row format. Table(s): 't_blackhole.'
2910+INSERT INTO t_blackhole VALUES(0);
2911+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2912+UPDATE t_blackhole SET a = 1;
2913+Warnings:
2914+Warning 1870 Row events are not logged for UPDATE statements that modify BLACKHOLE tables in row format. Table(s): 't_blackhole.'
2915+REPLACE INTO t_blackhole VALUES(1);
2916+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2917+SELECT * FROM t_blackhole;
2918+a
2919+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
2920+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2921+DROP TABLE tt_innodb;
2922+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2923+DROP TABLE non_existing;
2924+ERROR 42S02: Unknown table 'test.non_existing'
2925+CREATE TABLE t_innodb(a INT NOT NULL) ENGINE=InnoDB;
2926+ERROR 42S01: Table 't_innodb' already exists
2927+TRUNCATE TABLE t_innodb;
2928+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2929+RENAME TABLE t_innodb TO tmp, tmp to t_innodb;
2930+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2931+ALTER TABLE t_innodb ADD COLUMN b CHAR(10);
2932+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2933+ALTER TABLE t_innodb ADD KEY (a);
2934+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2935+CREATE DATABASE test1;
2936+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2937+DROP DATABASE test1;
2938+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2939+CREATE PROCEDURE p1() SELECT 1;
2940+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2941+DROP PROCEDURE p1;
2942+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2943+CREATE VIEW v1 AS SELECT * FROM t_innodb;
2944+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2945+DROP VIEW v1;
2946+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2947+INSERT INTO v_innodb VALUES(1);
2948+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
2949+# connection default
2950+must_be_1
2951+1
2952+UNLOCK BINLOG;
2953+# connection con1
2954+SHOW CREATE TABLE t_innodb;
2955+Table Create Table
2956+t_innodb CREATE TABLE `t_innodb` (
2957+ `a` int(11) NOT NULL,
2958+ `b` char(10) DEFAULT NULL,
2959+ KEY `a` (`a`),
2960+ KEY `a_2` (`a`)
2961+) ENGINE=InnoDB DEFAULT CHARSET=latin1
2962+DROP TABLE t_innodb;
2963+CREATE TABLE t_innodb(a INT NOT NULL) ENGINE=InnoDB;
2964+# connection default
2965+LOCK BINLOG FOR BACKUP;
2966+# connection con1
2967+INSERT DELAYED INTO t_myisam VALUES(0);
2968+Warnings:
2969+Warning 1287 'INSERT DELAYED' is deprecated and will be removed in a future release. Please use INSERT instead
2970+# connection default
2971+must_be_1
2972+1
2973+UNLOCK BINLOG;
2974+SELECT * FROm t_myisam;
2975+a
2976+0
2977+1
2978+1
2979+1
2980+1
2981+1
2982+1
2983+1
2984+SET @old_general_log = @@general_log;
2985+SET @old_slow_query_log = @@slow_query_log;
2986+SET @old_log_output = @@log_output;
2987+SET GLOBAL log_output = 'TABLE';
2988+SET GLOBAL general_log = ON;
2989+SET GLOBAL slow_query_log = ON;
2990+LOCK BINLOG FOR BACKUP;
2991+# connection con1
2992+SET @old_long_query_time = @@SESSION.long_query_time;
2993+SET SESSION long_query_time = 0;
2994+SELECT 1;
2995+1
2996+1
2997+# connection default
2998+SELECT 1;
2999+1
3000+1
3001+# connection con1
3002+SET SESSION long_query_time = @old_long_query_time;
3003+# connection default
3004+must_be_1
3005+1
3006+UNLOCK BINLOG;
3007+SET GLOBAL log_output = @old_log_output;
3008+SET GLOBAL slow_query_log = @old_slow_query_log;
3009+SET GLOBAL general_log = @old_general_log;
3010+#-----------------------------------------------------------------------
3011+# Cleanup
3012+#-----------------------------------------------------------------------
3013+DROP USER user@localhost;
3014+DROP VIEW v_innodb, v_myisam, v_memory, v_csv, v_blackhole, v_archive;
3015+DROP TABLE t_innodb, t_myisam, t_memory, t_csv, t_blackhole, t_archive;
3016+SET GLOBAL binlog_format = @old_binlog_format;
3017
3018=== added file 'mysql-test/r/backup_locks_binlog_stmt.result'
3019--- mysql-test/r/backup_locks_binlog_stmt.result 1970-01-01 00:00:00 +0000
3020+++ mysql-test/r/backup_locks_binlog_stmt.result 2014-02-25 07:31:10 +0000
3021@@ -0,0 +1,575 @@
3022+SET @old_binlog_format=@@binlog_format;
3023+SET GLOBAL binlog_format='STATEMENT';
3024+SET SESSION binlog_format='STATEMENT';
3025+SELECT @@binlog_format;
3026+@@binlog_format
3027+STATEMENT
3028+RESET MASTER;
3029+SHOW VARIABLES LIKE 'have_backup_locks';
3030+Variable_name Value
3031+have_backup_locks YES
3032+#-----------------------------------------------------------------------
3033+# Setup
3034+#-----------------------------------------------------------------------
3035+CREATE TABLE t_innodb(a INT NOT NULL, KEY (a)) ENGINE=InnoDB;
3036+CREATE TABLE t_myisam(a INT NOT NULL, KEY (a)) ENGINE=MyISAM;
3037+CREATE TABLE t_memory(a INT NOT NULL, KEY (a)) ENGINE=MEMORY;
3038+CREATE TABLE t_csv(a INT NOT NULL) ENGINE=CSV;
3039+CREATE TABLE t_blackhole(a INT NOT NULL, KEY (a)) ENGINE=BLACKHOLE;
3040+CREATE TABLE t_archive(a INT NOT NULL) ENGINE=ARCHIVE;
3041+CREATE VIEW v_innodb AS SELECT * FROM t_innodb;
3042+CREATE VIEW v_myisam AS SELECT * FROM t_myisam;
3043+CREATE VIEW v_memory AS SELECT * FROM t_memory;
3044+CREATE VIEW v_csv AS SELECT * FROM t_csv;
3045+CREATE VIEW v_blackhole AS SELECT * FROM t_blackhole;
3046+CREATE VIEW v_archive AS SELECT * FROM t_archive;
3047+#-----------------------------------------------------------------------
3048+# Single-threaded tests
3049+#-----------------------------------------------------------------------
3050+LOCK BINLOG FOR BACKUP;
3051+DELETE FROM t_innodb;
3052+INSERT INTO t_innodb VALUES(0);
3053+UPDATE t_innodb SET a = 1;
3054+REPLACE INTO t_innodb VALUES(1);
3055+SELECT * from t_innodb;
3056+a
3057+1
3058+1
3059+HANDLER t_innodb OPEN;
3060+HANDLER t_innodb READ a FIRST;
3061+a
3062+1
3063+HANDLER t_innodb CLOSE;
3064+DELETE FROM t_myisam;
3065+INSERT INTO t_myisam VALUES(0);
3066+UPDATE t_myisam SET a = 1;
3067+REPLACE INTO t_myisam VALUES(1);
3068+SELECT * from t_myisam;
3069+a
3070+1
3071+1
3072+HANDLER t_myisam OPEN;
3073+HANDLER t_myisam READ a FIRST;
3074+a
3075+1
3076+HANDLER t_myisam CLOSE;
3077+DELETE FROM t_memory;
3078+INSERT INTO t_memory VALUES(0);
3079+UPDATE t_memory SET a = 1;
3080+REPLACE INTO t_memory VALUES(1);
3081+SELECT * from t_memory;
3082+a
3083+1
3084+1
3085+DELETE FROM t_archive;
3086+INSERT INTO t_archive VALUES(0);
3087+SELECT * from t_archive;
3088+a
3089+0
3090+DELETE FROM t_csv;
3091+INSERT INTO t_csv VALUES(0);
3092+UPDATE t_csv SET a = 1;
3093+REPLACE INTO t_csv VALUES(1);
3094+SELECT * from t_csv;
3095+a
3096+1
3097+1
3098+DELETE FROM t_blackhole;
3099+INSERT INTO t_blackhole VALUES(0);
3100+UPDATE t_blackhole SET a = 1;
3101+REPLACE INTO t_blackhole VALUES(1);
3102+SELECT * from t_blackhole;
3103+a
3104+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
3105+CREATE TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
3106+CREATE TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
3107+CREATE TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
3108+CREATE TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
3109+CREATE TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
3110+DROP TABLE tt_innodb;
3111+DROP TABLE tt_myisam;
3112+DROP TABLE tt_memory;
3113+DROP TABLE tt_csv;
3114+DROP TABLE tt_blackhole;
3115+DROP TABLE tt_archive;
3116+DROP TABLE non_existing;
3117+ERROR 42S02: Unknown table 'test.non_existing'
3118+TRUNCATE TABLE t_innodb;
3119+TRUNCATE TABLE t_myisam;
3120+TRUNCATE TABLE t_memory;
3121+TRUNCATE TABLE t_csv;
3122+TRUNCATE TABLE t_blackhole;
3123+RENAME TABLE t_innodb TO tmp, tmp TO t_innodb;
3124+RENAME TABLE t_myisam TO tmp, tmp TO t_myisam;
3125+RENAME TABLE t_memory TO tmp, tmp TO t_memory;
3126+RENAME TABLE t_csv TO tmp, tmp TO t_csv;
3127+RENAME TABLE t_blackhole TO tmp, tmp TO t_blackhole;
3128+RENAME TABLE t_archive TO tmp, tmp TO t_archive;
3129+ALTER TABLE t_innodb ADD COLUMN b CHAR(10) NOT NULL;
3130+ALTER TABLE t_innodb DROP COLUMN b;
3131+ALTER TABLE t_myisam ADD COLUMN b CHAR(10) NOT NULL;
3132+ALTER TABLE t_myisam DROP COLUMN b;
3133+ALTER TABLE t_memory ADD COLUMN b CHAR(10) NOT NULL;
3134+ALTER TABLE t_memory DROP COLUMN b;
3135+ALTER TABLE t_csv ADD COLUMN b CHAR(10) NOT NULL;
3136+ALTER TABLE t_csv DROP COLUMN b;
3137+ALTER TABLE t_blackhole ADD COLUMN b CHAR(10) NOT NULL;
3138+ALTER TABLE t_blackhole DROP COLUMN b;
3139+ALTER TABLE t_archive ADD COLUMN b CHAR(10) NOT NULL;
3140+ALTER TABLE t_archive DROP COLUMN b;
3141+ALTER TABLE t_innodb ADD KEY tmp (a);
3142+Warnings:
3143+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_innodb'. This is deprecated and will be disallowed in a future release.
3144+ALTER TABLE t_innodb DROP KEY tmp;
3145+ALTER TABLE t_myisam ADD KEY tmp (a);
3146+Warnings:
3147+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_myisam'. This is deprecated and will be disallowed in a future release.
3148+ALTER TABLE t_myisam DROP KEY tmp;
3149+ALTER TABLE t_memory ADD KEY tmp (a);
3150+Warnings:
3151+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_memory'. This is deprecated and will be disallowed in a future release.
3152+ALTER TABLE t_memory DROP KEY tmp;
3153+ALTER TABLE t_blackhole ADD KEY tmp (a);
3154+Warnings:
3155+Note 1831 Duplicate index 'tmp' defined on the table 'test.t_blackhole'. This is deprecated and will be disallowed in a future release.
3156+ALTER TABLE t_blackhole DROP KEY tmp;
3157+CREATE DATABASE test1;
3158+DROP DATABASE test1;
3159+CREATE PROCEDURE p1()
3160+BEGIN
3161+SELECT 1;
3162+END|
3163+DROP PROCEDURE p1|
3164+CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
3165+BEGIN
3166+RETURN 1;
3167+END|
3168+DROP FUNCTION f1|
3169+CREATE VIEW v1 AS SELECT * FROM t_innodb;
3170+DROP VIEW v1;
3171+INSERT INTO v_innodb VALUES(1);
3172+INSERT INTO v_blackhole VALUES(1);
3173+INSERT INTO v_myisam VALUES(1);
3174+INSERT INTO v_csv VALUES(1);
3175+INSERT INTO v_memory VALUES(1);
3176+INSERT INTO v_archive VALUES(1);
3177+UNLOCK BINLOG;
3178+SELECT @@delay_key_write;
3179+@@delay_key_write
3180+ON
3181+SET GLOBAL delay_key_write=ALL;
3182+LOCK TABLES FOR BACKUP;
3183+ERROR HY000: The MySQL server is running with the delay_key_write=ALL option so it cannot execute this statement
3184+SET GLOBAL delay_key_write=default;
3185+SELECT @@delay_key_write;
3186+@@delay_key_write
3187+ON
3188+SET GLOBAL read_only=1;
3189+INSERT INTO t_innodb VALUES(0);
3190+INSERT INTO t_myisam VALUES(0);
3191+LOCK TABLES FOR BACKUP;
3192+INSERT INTO t_innodb VALUES(0);
3193+INSERT INTO t_myisam VALUES(0);
3194+ERROR HY000: Can’t execute the query because you have a conflicting backup lock
3195+UNLOCK TABLES;
3196+INSERT INTO t_innodb VALUES(0);
3197+INSERT INTO t_myisam VALUES(0);
3198+SET GLOBAL read_only=0;
3199+LOCK TABLES FOR BACKUP;
3200+CREATE TEMPORARY TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
3201+CREATE TEMPORARY TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
3202+CREATE TEMPORARY TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
3203+CREATE TEMPORARY TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
3204+CREATE TEMPORARY TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
3205+CREATE TEMPORARY TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
3206+INSERT INTO tt_innodb VALUES(5);
3207+INSERT INTO tt_myisam VALUES(5);
3208+INSERT INTO tt_memory VALUES(5);
3209+INSERT INTO tt_csv VALUES(5);
3210+INSERT INTO tt_blackhole VALUES(5);
3211+INSERT INTO tt_archive VALUES(5);
3212+LOCK BINLOG FOR BACKUP;
3213+START TRANSACTION;
3214+SELECT * FROM tt_archive;
3215+a
3216+5
3217+SELECT * FROM tt_blackhole;
3218+a
3219+SELECT * FROM tt_memory;
3220+a
3221+5
3222+SELECT * FROM tt_innodb;
3223+a
3224+5
3225+SELECT * FROM tt_myisam;
3226+a
3227+5
3228+INSERT INTO tt_innodb VALUES(6);
3229+INSERT INTO tt_myisam VALUES(6);
3230+INSERT INTO tt_memory VALUES(6);
3231+INSERT INTO tt_csv VALUES(6);
3232+INSERT INTO tt_blackhole VALUES(6);
3233+INSERT INTO tt_archive VALUES(6);
3234+COMMIT;
3235+SELECT * FROM tt_archive;
3236+a
3237+5
3238+6
3239+SELECT * FROM tt_blackhole;
3240+a
3241+SELECT * FROM tt_memory;
3242+a
3243+5
3244+6
3245+SELECT * FROM tt_innodb;
3246+a
3247+5
3248+6
3249+SELECT * FROM tt_myisam;
3250+a
3251+5
3252+6
3253+DROP TEMPORARY TABLE tt_innodb;
3254+DROP TEMPORARY TABLE tt_myisam;
3255+DROP TEMPORARY TABLE tt_memory;
3256+DROP TEMPORARY TABLE tt_csv;
3257+DROP TEMPORARY TABLE tt_blackhole;
3258+DROP TEMPORARY TABLE tt_archive;
3259+UNLOCK BINLOG;
3260+UNLOCK TABLES;
3261+SELECT @@log_bin;
3262+@@log_bin
3263+1
3264+LOCK BINLOG FOR BACKUP;
3265+INSERT INTO t_innodb VALUES(1);
3266+INSERT INTO t_myisam VALUES(1);
3267+UNLOCK BINLOG;
3268+SET @old_general_log = @@general_log;
3269+SET @old_slow_query_log = @@slow_query_log;
3270+SET @old_log_output = @@log_output;
3271+SET @old_long_query_time = @@SESSION.long_query_time;
3272+SET SESSION long_query_time = 0;
3273+SET GLOBAL log_output = 'TABLE';
3274+SET GLOBAL general_log = ON;
3275+SET GLOBAL slow_query_log = ON;
3276+LOCK TABLES FOR BACKUP;
3277+SELECT 1;
3278+1
3279+1
3280+LOCK BINLOG FOR BACKUP;
3281+SELECT 1;
3282+1
3283+1
3284+UNLOCK BINLOG;
3285+UNLOCK TABLES;
3286+SET SESSION long_query_time = @old_long_query_time;
3287+SET GLOBAL log_output = @old_log_output;
3288+SET GLOBAL slow_query_log = @old_slow_query_log;
3289+SET GLOBAL general_log = @old_general_log;
3290+#-----------------------------------------------------------------------
3291+# Multi-threaded tests
3292+#-----------------------------------------------------------------------
3293+# connection default
3294+CREATE USER user@localhost;
3295+GRANT ALL PRIVILEGES ON test.* TO user@localhost;
3296+LOCK TABLES FOR BACKUP;
3297+# connection con1
3298+SET SESSION lock_wait_timeout = 1;
3299+SET GLOBAL delay_key_write=ALL;
3300+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3301+SET SESSION lock_wait_timeout = DEFAULT;
3302+# connection default
3303+UNLOCK TABLES;
3304+# connection con2
3305+START TRANSACTION;
3306+INSERT INTO t_innodb VALUES(0);
3307+# connection default
3308+SET GLOBAL read_only=1;
3309+# connection con2
3310+COMMIT;
3311+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
3312+INSERT INTO t_innodb VALUES(0);
3313+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
3314+INSERT INTO t_myisam VALUES(0);
3315+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
3316+# connection con1
3317+LOCK TABLES FOR BACKUP;
3318+# connection con2
3319+INSERT INTO t_innodb VALUES(0);
3320+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
3321+INSERT INTO t_myisam VALUES(0);
3322+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
3323+# connection default
3324+SET GLOBAL read_only=0;
3325+# connection con2
3326+SET SESSION lock_wait_timeout = 1;
3327+INSERT INTO t_innodb VALUES(0);
3328+INSERT INTO t_myisam VALUES(0);
3329+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3330+SET SESSION lock_wait_timeout = 0;
3331+Warnings:
3332+Warning 1292 Truncated incorrect lock_wait_timeout value: '0'
3333+# connection default
3334+SET GLOBAL read_only=1;
3335+# connection con2
3336+INSERT INTO t_innodb VALUES(0);
3337+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
3338+INSERT INTO t_myisam VALUES(0);
3339+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
3340+# connection con1
3341+UNLOCK TABLES;
3342+# connection con2
3343+INSERT INTO t_innodb VALUES(0);
3344+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
3345+INSERT INTO t_myisam VALUES(0);
3346+ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement
3347+# connection default
3348+SET GLOBAL read_only=0;
3349+# connection default
3350+LOCK TABLES FOR BACKUP;
3351+# connection con1
3352+CREATE TEMPORARY TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
3353+CREATE TEMPORARY TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
3354+CREATE TEMPORARY TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
3355+CREATE TEMPORARY TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
3356+CREATE TEMPORARY TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
3357+CREATE TEMPORARY TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
3358+INSERT INTO tt_innodb VALUES(5);
3359+INSERT INTO tt_myisam VALUES(5);
3360+INSERT INTO tt_memory VALUES(5);
3361+INSERT INTO tt_csv VALUES(5);
3362+INSERT INTO tt_blackhole VALUES(5);
3363+INSERT INTO tt_archive VALUES(5);
3364+# connection default
3365+LOCK BINLOG FOR BACKUP;
3366+# connection con1
3367+SET SESSION lock_wait_timeout = 1;
3368+START TRANSACTION;
3369+INSERT INTO tt_myisam VALUES(6);
3370+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3371+INSERT INTO tt_innodb VALUES(6);
3372+SELECT * FROM tt_archive;
3373+a
3374+5
3375+SELECT * FROM tt_blackhole;
3376+a
3377+SELECT * FROM tt_memory;
3378+a
3379+5
3380+SELECT * FROM tt_innodb;
3381+a
3382+5
3383+6
3384+SELECT * FROM tt_myisam;
3385+a
3386+5
3387+6
3388+SELECT * FROM tt_csv;
3389+a
3390+5
3391+COMMIT;
3392+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3393+# connection default
3394+must_be_1
3395+1
3396+UNLOCK BINLOG;
3397+UNLOCK TABLES;
3398+# connection con1
3399+COMMIT;
3400+DROP TEMPORARY TABLE tt_innodb;
3401+DROP TEMPORARY TABLE tt_myisam;
3402+DROP TEMPORARY TABLE tt_memory;
3403+DROP TEMPORARY TABLE tt_csv;
3404+DROP TEMPORARY TABLE tt_blackhole;
3405+DROP TEMPORARY TABLE tt_archive;
3406+# connection default
3407+LOCK BINLOG FOR BACKUP;
3408+# connection con1
3409+SET SESSION lock_wait_timeout = 1;
3410+INSERT INTO t_innodb VALUES(1);
3411+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3412+INSERT INTO t_myisam VALUES(1);
3413+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3414+SET SESSION lock_wait_timeout = DEFAULT;
3415+# connection default
3416+must_be_1
3417+1
3418+UNLOCK BINLOG;
3419+# connection default
3420+LOCK BINLOG FOR BACKUP;
3421+# connection con1
3422+SET SESSION lock_wait_timeout = 1;
3423+DELETE FROM t_innodb;
3424+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3425+INSERT INTO t_innodb VALUES(0);
3426+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3427+UPDATE t_innodb SET a = 1;
3428+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3429+REPLACE INTO t_innodb VALUES(1);
3430+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3431+SELECT * from t_innodb;
3432+a
3433+0
3434+0
3435+0
3436+0
3437+1
3438+1
3439+HANDLER t_innodb OPEN;
3440+HANDLER t_innodb READ a FIRST;
3441+a
3442+0
3443+HANDLER t_innodb CLOSE;
3444+START TRANSACTION;
3445+SELECT * from t_innodb;
3446+a
3447+0
3448+0
3449+0
3450+0
3451+1
3452+1
3453+DELETE FROM t_innodb;
3454+INSERT INTO t_innodb VALUES(0);
3455+UPDATE t_innodb SET a = 1;
3456+REPLACE INTO t_innodb VALUES(1);
3457+COMMIT;
3458+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3459+SELECT * FROM t_innodb;
3460+a
3461+0
3462+0
3463+0
3464+0
3465+1
3466+1
3467+COMMIT;
3468+START TRANSACTION;
3469+INSERT INTO t_myisam VALUES(1);
3470+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3471+COMMIT;
3472+INSERT INTO t_myisam VALUES(0);
3473+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3474+UPDATE t_myisam SET a = 1;
3475+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3476+SELECT * FROM t_myisam;
3477+a
3478+1
3479+1
3480+1
3481+1
3482+1
3483+1
3484+1
3485+HANDLER t_myisam OPEN;
3486+HANDLER t_myisam READ a FIRST;
3487+a
3488+1
3489+HANDLER t_myisam CLOSE;
3490+DELETE FROM t_blackhole;
3491+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3492+INSERT INTO t_blackhole VALUES(0);
3493+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3494+UPDATE t_blackhole SET a = 1;
3495+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3496+REPLACE INTO t_blackhole VALUES(1);
3497+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3498+SELECT * FROM t_blackhole;
3499+a
3500+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
3501+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3502+DROP TABLE tt_innodb;
3503+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3504+DROP TABLE non_existing;
3505+ERROR 42S02: Unknown table 'test.non_existing'
3506+CREATE TABLE t_innodb(a INT NOT NULL) ENGINE=InnoDB;
3507+ERROR 42S01: Table 't_innodb' already exists
3508+TRUNCATE TABLE t_innodb;
3509+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3510+RENAME TABLE t_innodb TO tmp, tmp to t_innodb;
3511+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3512+ALTER TABLE t_innodb ADD COLUMN b CHAR(10);
3513+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3514+ALTER TABLE t_innodb ADD KEY (a);
3515+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3516+CREATE DATABASE test1;
3517+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3518+DROP DATABASE test1;
3519+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3520+CREATE PROCEDURE p1() SELECT 1;
3521+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3522+DROP PROCEDURE p1;
3523+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3524+CREATE VIEW v1 AS SELECT * FROM t_innodb;
3525+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3526+DROP VIEW v1;
3527+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3528+INSERT INTO v_innodb VALUES(1);
3529+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3530+# connection default
3531+must_be_1
3532+1
3533+UNLOCK BINLOG;
3534+# connection con1
3535+SHOW CREATE TABLE t_innodb;
3536+Table Create Table
3537+t_innodb CREATE TABLE `t_innodb` (
3538+ `a` int(11) NOT NULL,
3539+ `b` char(10) DEFAULT NULL,
3540+ KEY `a` (`a`),
3541+ KEY `a_2` (`a`)
3542+) ENGINE=InnoDB DEFAULT CHARSET=latin1
3543+DROP TABLE t_innodb;
3544+CREATE TABLE t_innodb(a INT NOT NULL) ENGINE=InnoDB;
3545+# connection default
3546+LOCK BINLOG FOR BACKUP;
3547+# connection con1
3548+INSERT DELAYED INTO t_myisam VALUES(0);
3549+ERROR HY000: Lock wait timeout exceeded; try restarting transaction
3550+# connection default
3551+must_be_1
3552+1
3553+UNLOCK BINLOG;
3554+SELECT * FROm t_myisam;
3555+a
3556+0
3557+1
3558+1
3559+1
3560+1
3561+1
3562+1
3563+1
3564+SET @old_general_log = @@general_log;
3565+SET @old_slow_query_log = @@slow_query_log;
3566+SET @old_log_output = @@log_output;
3567+SET GLOBAL log_output = 'TABLE';
3568+SET GLOBAL general_log = ON;
3569+SET GLOBAL slow_query_log = ON;
3570+LOCK BINLOG FOR BACKUP;
3571+# connection con1
3572+SET @old_long_query_time = @@SESSION.long_query_time;
3573+SET SESSION long_query_time = 0;
3574+SELECT 1;
3575+1
3576+1
3577+# connection default
3578+SELECT 1;
3579+1
3580+1
3581+# connection con1
3582+SET SESSION long_query_time = @old_long_query_time;
3583+# connection default
3584+must_be_1
3585+1
3586+UNLOCK BINLOG;
3587+SET GLOBAL log_output = @old_log_output;
3588+SET GLOBAL slow_query_log = @old_slow_query_log;
3589+SET GLOBAL general_log = @old_general_log;
3590+#-----------------------------------------------------------------------
3591+# Cleanup
3592+#-----------------------------------------------------------------------
3593+DROP USER user@localhost;
3594+DROP VIEW v_innodb, v_myisam, v_memory, v_csv, v_blackhole, v_archive;
3595+DROP TABLE t_innodb, t_myisam, t_memory, t_csv, t_blackhole, t_archive;
3596+SET GLOBAL binlog_format = @old_binlog_format;
3597
3598=== added file 'mysql-test/r/backup_locks_mysqldump.result'
3599--- mysql-test/r/backup_locks_mysqldump.result 1970-01-01 00:00:00 +0000
3600+++ mysql-test/r/backup_locks_mysqldump.result 2014-02-25 07:31:10 +0000
3601@@ -0,0 +1,143 @@
3602+SHOW VARIABLES LIKE 'have_backup_locks';
3603+Variable_name Value
3604+have_backup_locks YES
3605+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
3606+CREATE TABLE t2 (a INT) ENGINE=MyISAM;
3607+SET @old_general_log = @@general_log;
3608+SET @old_log_output = @@log_output;
3609+TRUNCATE TABLE mysql.general_log;
3610+SET GLOBAL log_output = 'TABLE';
3611+SET GLOBAL general_log = ON;
3612+# Check that --lock-for-backup is converted to --lock-all-tables if
3613+# --single-transaction is not specified
3614+SELECT argument FROM mysql.general_log WHERE argument != '';
3615+argument
3616+SET GLOBAL general_log = ON
3617+root@localhost on
3618+/*!40100 SET @@SQL_MODE='' */
3619+/*!40103 SET TIME_ZONE='+00:00' */
3620+FLUSH TABLES
3621+FLUSH TABLES WITH READ LOCK
3622+SHOW VARIABLES LIKE 'gtid\_mode'
3623+SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IN (SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('test'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE ORDER BY LOGFILE_GROUP_NAME
3624+SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('test')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME
3625+SHOW VARIABLES LIKE 'ndbinfo\_version'
3626+test
3627+show tables
3628+show table status like 't1'
3629+SET SQL_QUOTE_SHOW_CREATE=1
3630+SET SESSION character_set_results = 'binary'
3631+show create table `t1`
3632+SET SESSION character_set_results = 'utf8'
3633+show fields from `t1`
3634+SELECT /*!40001 SQL_NO_CACHE */ * FROM `t1`
3635+SET SESSION character_set_results = 'binary'
3636+use `test`
3637+select @@collation_database
3638+SHOW TRIGGERS LIKE 't1'
3639+SET SESSION character_set_results = 'utf8'
3640+show table status like 't2'
3641+SET SQL_QUOTE_SHOW_CREATE=1
3642+SET SESSION character_set_results = 'binary'
3643+show create table `t2`
3644+SET SESSION character_set_results = 'utf8'
3645+show fields from `t2`
3646+SELECT /*!40001 SQL_NO_CACHE */ * FROM `t2`
3647+SET SESSION character_set_results = 'binary'
3648+use `test`
3649+select @@collation_database
3650+SHOW TRIGGERS LIKE 't2'
3651+SET SESSION character_set_results = 'utf8'
3652+SELECT argument FROM mysql.general_log WHERE argument != ''
3653+TRUNCATE TABLE mysql.general_log;
3654+# Check that --lock-for-backup --single-transaction uses LOCK TABLES FOR
3655+# BACKUP
3656+SELECT argument FROM mysql.general_log WHERE argument != '';
3657+argument
3658+root@localhost on
3659+/*!40100 SET @@SQL_MODE='' */
3660+/*!40103 SET TIME_ZONE='+00:00' */
3661+SHOW VARIABLES LIKE 'have_backup_locks'
3662+LOCK TABLES FOR BACKUP
3663+SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
3664+START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
3665+SHOW VARIABLES LIKE 'gtid\_mode'
3666+SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IN (SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('test'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE ORDER BY LOGFILE_GROUP_NAME
3667+SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('test')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME
3668+SHOW VARIABLES LIKE 'ndbinfo\_version'
3669+test
3670+show tables
3671+show table status like 't1'
3672+SET SQL_QUOTE_SHOW_CREATE=1
3673+SET SESSION character_set_results = 'binary'
3674+show create table `t1`
3675+SET SESSION character_set_results = 'utf8'
3676+show fields from `t1`
3677+SELECT /*!40001 SQL_NO_CACHE */ * FROM `t1`
3678+SET SESSION character_set_results = 'binary'
3679+use `test`
3680+select @@collation_database
3681+SHOW TRIGGERS LIKE 't1'
3682+SET SESSION character_set_results = 'utf8'
3683+show table status like 't2'
3684+SET SQL_QUOTE_SHOW_CREATE=1
3685+SET SESSION character_set_results = 'binary'
3686+show create table `t2`
3687+SET SESSION character_set_results = 'utf8'
3688+show fields from `t2`
3689+SELECT /*!40001 SQL_NO_CACHE */ * FROM `t2`
3690+SET SESSION character_set_results = 'binary'
3691+use `test`
3692+select @@collation_database
3693+SHOW TRIGGERS LIKE 't2'
3694+SET SESSION character_set_results = 'utf8'
3695+SELECT argument FROM mysql.general_log WHERE argument != ''
3696+TRUNCATE TABLE mysql.general_log;
3697+# Check that --master-data disables --lock-for-backup
3698+SELECT argument FROM mysql.general_log WHERE argument != '';
3699+argument
3700+root@localhost on
3701+/*!40100 SET @@SQL_MODE='' */
3702+/*!40103 SET TIME_ZONE='+00:00' */
3703+SHOW VARIABLES LIKE 'have_backup_locks'
3704+FLUSH /*!40101 LOCAL */ TABLES
3705+FLUSH TABLES WITH READ LOCK
3706+SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
3707+START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
3708+SHOW VARIABLES LIKE 'gtid\_mode'
3709+SHOW MASTER STATUS
3710+UNLOCK TABLES
3711+SELECT LOGFILE_GROUP_NAME, FILE_NAME, TOTAL_EXTENTS, INITIAL_SIZE, ENGINE, EXTRA FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'UNDO LOG' AND FILE_NAME IS NOT NULL AND LOGFILE_GROUP_NAME IN (SELECT DISTINCT LOGFILE_GROUP_NAME FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('test'))) GROUP BY LOGFILE_GROUP_NAME, FILE_NAME, ENGINE ORDER BY LOGFILE_GROUP_NAME
3712+SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('test')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME
3713+SHOW VARIABLES LIKE 'ndbinfo\_version'
3714+test
3715+show tables
3716+show table status like 't1'
3717+SET SQL_QUOTE_SHOW_CREATE=1
3718+SET SESSION character_set_results = 'binary'
3719+show create table `t1`
3720+SET SESSION character_set_results = 'utf8'
3721+show fields from `t1`
3722+SELECT /*!40001 SQL_NO_CACHE */ * FROM `t1`
3723+SET SESSION character_set_results = 'binary'
3724+use `test`
3725+select @@collation_database
3726+SHOW TRIGGERS LIKE 't1'
3727+SET SESSION character_set_results = 'utf8'
3728+show table status like 't2'
3729+SET SQL_QUOTE_SHOW_CREATE=1
3730+SET SESSION character_set_results = 'binary'
3731+show create table `t2`
3732+SET SESSION character_set_results = 'utf8'
3733+show fields from `t2`
3734+SELECT /*!40001 SQL_NO_CACHE */ * FROM `t2`
3735+SET SESSION character_set_results = 'binary'
3736+use `test`
3737+select @@collation_database
3738+SHOW TRIGGERS LIKE 't2'
3739+SET SESSION character_set_results = 'utf8'
3740+SELECT argument FROM mysql.general_log WHERE argument != ''
3741+TRUNCATE TABLE mysql.general_log;
3742+SET GLOBAL log_output = @old_log_output;
3743+SET GLOBAL general_log = @old_general_log;
3744+DROP TABLE t1, t2;
3745
3746=== modified file 'mysql-test/suite/funcs_1/r/storedproc.result'
3747--- mysql-test/suite/funcs_1/r/storedproc.result 2013-05-10 09:39:17 +0000
3748+++ mysql-test/suite/funcs_1/r/storedproc.result 2014-02-25 07:31:10 +0000
3749@@ -5522,7 +5522,9 @@
3750 unlock:BEGIN
3751 SELECT @x;
3752 END//
3753-ERROR 0A000: UNLOCK is not allowed in stored procedures
3754+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':BEGIN
3755+SELECT @x;
3756+END' at line 2
3757 DROP PROCEDURE IF EXISTS sp1;
3758 CREATE PROCEDURE sp1()
3759 unsigned:BEGIN
3760
3761=== modified file 'mysql-test/suite/funcs_1/t/storedproc.test'
3762--- mysql-test/suite/funcs_1/t/storedproc.test 2011-12-09 21:08:37 +0000
3763+++ mysql-test/suite/funcs_1/t/storedproc.test 2014-02-25 07:31:10 +0000
3764@@ -5226,7 +5226,7 @@
3765 DROP PROCEDURE IF EXISTS sp1;
3766
3767 delimiter //;
3768---error ER_SP_BADSTATEMENT
3769+--error ER_PARSE_ERROR
3770 CREATE PROCEDURE sp1()
3771 unlock:BEGIN
3772 SELECT @x;
3773
3774=== added file 'mysql-test/suite/rpl/r/rpl_backup_locks.result'
3775--- mysql-test/suite/rpl/r/rpl_backup_locks.result 1970-01-01 00:00:00 +0000
3776+++ mysql-test/suite/rpl/r/rpl_backup_locks.result 2014-02-25 07:31:10 +0000
3777@@ -0,0 +1,34 @@
3778+include/master-slave.inc
3779+Warnings:
3780+Note #### Sending passwords in plain text without SSL/TLS is extremely insecure.
3781+Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
3782+[connection master]
3783+CREATE TABLE t_innodb (a INT) ENGINE=InnoDB;
3784+CREATE TABLE t_myisam (a INT) ENGINE=MyISAM;
3785+STOP SLAVE;
3786+include/wait_for_slave_to_stop.inc
3787+# connection master
3788+INSERT INTO t_innodb VALUES (0);
3789+# connection slave
3790+LOCK TABLES FOR BACKUP;
3791+LOCK BINLOG FOR BACKUP;
3792+START SLAVE;
3793+include/wait_for_slave_to_start.inc
3794+include/check_slave_param.inc [Exec_Master_Log_Pos]
3795+UNLOCK BINLOG;
3796+UNLOCK TABLES;
3797+# connection master
3798+# connection slave
3799+STOP SLAVE;
3800+# connection master
3801+INSERT INTO t_myisam VALUES (0);
3802+# connection slave
3803+LOCK TABLES FOR BACKUP;
3804+START SLAVE;
3805+LOCK BINLOG FOR BACKUP;
3806+UNLOCK TABLES;
3807+include/check_slave_param.inc [Exec_Master_Log_Pos]
3808+UNLOCK BINLOG;
3809+# connection master
3810+DROP TABLE t_innodb, t_myisam;
3811+include/rpl_end.inc
3812
3813=== added file 'mysql-test/suite/rpl/t/rpl_backup_locks.test'
3814--- mysql-test/suite/rpl/t/rpl_backup_locks.test 1970-01-01 00:00:00 +0000
3815+++ mysql-test/suite/rpl/t/rpl_backup_locks.test 2014-02-25 07:31:10 +0000
3816@@ -0,0 +1,95 @@
3817+########################################################################
3818+# Replication-related tests for backup locks
3819+########################################################################
3820+
3821+--source include/have_innodb.inc
3822+--source include/master-slave.inc
3823+
3824+CREATE TABLE t_innodb (a INT) ENGINE=InnoDB;
3825+CREATE TABLE t_myisam (a INT) ENGINE=MyISAM;
3826+
3827+sync_slave_with_master;
3828+
3829+STOP SLAVE;
3830+--source include/wait_for_slave_to_stop.inc
3831+
3832+--connection master
3833+--echo # connection master
3834+
3835+INSERT INTO t_innodb VALUES (0);
3836+
3837+--connection slave
3838+--echo # connection slave
3839+
3840+--let $master_log_pos= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1)
3841+
3842+LOCK TABLES FOR BACKUP;
3843+LOCK BINLOG FOR BACKUP;
3844+
3845+START SLAVE;
3846+--source include/wait_for_slave_to_start.inc
3847+
3848+let $wait_condition=
3849+ SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST
3850+ WHERE STATE = "Waiting for binlog lock" AND
3851+ (INFO = "INSERT INTO t_innodb VALUES (0)" OR INFO IS NULL);
3852+--source include/wait_condition.inc
3853+
3854+--let $slave_param= Exec_Master_Log_Pos
3855+--let $slave_param_value= $master_log_pos
3856+--source include/check_slave_param.inc
3857+
3858+UNLOCK BINLOG;
3859+UNLOCK TABLES;
3860+
3861+--connection master
3862+--echo # connection master
3863+sync_slave_with_master;
3864+
3865+
3866+--connection slave
3867+--echo # connection slave
3868+STOP SLAVE;
3869+
3870+--connection master
3871+--echo # connection master
3872+
3873+INSERT INTO t_myisam VALUES (0);
3874+
3875+--connection slave
3876+--echo # connection slave
3877+
3878+--let $master_log_pos= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1)
3879+
3880+LOCK TABLES FOR BACKUP;
3881+
3882+START SLAVE;
3883+
3884+let $wait_condition=
3885+ SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST
3886+ WHERE STATE = "Waiting for backup lock" AND
3887+ (INFO = "INSERT INTO t_myisam VALUES (0)" OR INFO IS NULL);
3888+--source include/wait_condition.inc
3889+
3890+LOCK BINLOG FOR BACKUP;
3891+UNLOCK TABLES;
3892+
3893+let $wait_condition=
3894+ SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST
3895+ WHERE STATE = "Waiting for binlog lock" AND
3896+ (INFO = "INSERT INTO t_myisam VALUES (0)" OR INFO IS NULL);
3897+--source include/wait_condition.inc
3898+
3899+--let $slave_param= Exec_Master_Log_Pos
3900+--let $slave_param_value= $master_log_pos
3901+--source include/check_slave_param.inc
3902+
3903+UNLOCK BINLOG;
3904+
3905+--connection master
3906+--echo # connection master
3907+
3908+DROP TABLE t_innodb, t_myisam;
3909+sync_slave_with_master;
3910+
3911+--source include/rpl_end.inc
3912
3913=== added file 'mysql-test/suite/sys_vars/r/have_backup_locks_basic.result'
3914--- mysql-test/suite/sys_vars/r/have_backup_locks_basic.result 1970-01-01 00:00:00 +0000
3915+++ mysql-test/suite/sys_vars/r/have_backup_locks_basic.result 2014-02-25 07:31:10 +0000
3916@@ -0,0 +1,11 @@
3917+SELECT @@GLOBAL.have_backup_locks="YES";
3918+@@GLOBAL.have_backup_locks="YES"
3919+1
3920+SELECT @@SESSION.have_backup_locks;
3921+ERROR HY000: Variable 'have_backup_locks' is a GLOBAL variable
3922+SHOW GLOBAL VARIABLES LIKE 'have_backup_locks';
3923+Variable_name Value
3924+have_backup_locks YES
3925+SHOW SESSION VARIABLES LIKE 'have_backup_locks';
3926+Variable_name Value
3927+have_backup_locks YES
3928
3929=== added file 'mysql-test/suite/sys_vars/t/have_backup_locks_basic.test'
3930--- mysql-test/suite/sys_vars/t/have_backup_locks_basic.test 1970-01-01 00:00:00 +0000
3931+++ mysql-test/suite/sys_vars/t/have_backup_locks_basic.test 2014-02-25 07:31:10 +0000
3932@@ -0,0 +1,7 @@
3933+SELECT @@GLOBAL.have_backup_locks="YES";
3934+--error ER_INCORRECT_GLOBAL_LOCAL_VAR
3935+SELECT @@SESSION.have_backup_locks;
3936+
3937+SHOW GLOBAL VARIABLES LIKE 'have_backup_locks';
3938+
3939+SHOW SESSION VARIABLES LIKE 'have_backup_locks';
3940
3941=== added file 'mysql-test/t/backup_locks.test'
3942--- mysql-test/t/backup_locks.test 1970-01-01 00:00:00 +0000
3943+++ mysql-test/t/backup_locks.test 2014-02-25 07:31:10 +0000
3944@@ -0,0 +1,1091 @@
3945+########################################################################
3946+# Tests for LOCK TABLES FOR BACKUP and LOCK BINLOG FOR BACKUP
3947+########################################################################
3948+
3949+--source include/have_innodb.inc
3950+--source include/not_embedded.inc
3951+--source include/have_archive.inc
3952+--source include/have_csv.inc
3953+--source include/have_blackhole.inc
3954+
3955+SHOW VARIABLES LIKE 'have_backup_locks';
3956+
3957+--echo #-----------------------------------------------------------------------
3958+--echo # Setup
3959+--echo #-----------------------------------------------------------------------
3960+
3961+# Save the initial number of concurrent sessions.
3962+--source include/count_sessions.inc
3963+
3964+CREATE TABLE t_innodb(a INT NOT NULL, KEY (a)) ENGINE=InnoDB;
3965+CREATE TABLE t_myisam(a INT NOT NULL, KEY (a)) ENGINE=MyISAM;
3966+CREATE TABLE t_memory(a INT NOT NULL, KEY (a)) ENGINE=MEMORY;
3967+CREATE TABLE t_csv(a INT NOT NULL) ENGINE=CSV;
3968+CREATE TABLE t_blackhole(a INT NOT NULL, KEY (a)) ENGINE=BLACKHOLE;
3969+CREATE TABLE t_archive(a INT NOT NULL) ENGINE=ARCHIVE;
3970+
3971+CREATE VIEW v_innodb AS SELECT * FROM t_innodb;
3972+CREATE VIEW v_myisam AS SELECT * FROM t_myisam;
3973+CREATE VIEW v_memory AS SELECT * FROM t_memory;
3974+CREATE VIEW v_csv AS SELECT * FROM t_csv;
3975+CREATE VIEW v_blackhole AS SELECT * FROM t_blackhole;
3976+CREATE VIEW v_archive AS SELECT * FROM t_archive;
3977+
3978+--echo #-----------------------------------------------------------------------
3979+--echo # Basic syntax checks
3980+--echo #-----------------------------------------------------------------------
3981+
3982+--error ER_PARSE_ERROR
3983+LOCK TABLES t_innodb FOR BACKUP;
3984+--error ER_PARSE_ERROR
3985+LOCK TABLES t_innodb READ FOR BACKUP;
3986+--error ER_PARSE_ERROR
3987+LOCK TABLES t_innodb FOR BACKUP READ;
3988+--error ER_PARSE_ERROR
3989+LOCK BINLOG t_innodb FOR BACKUP;
3990+--error ER_PARSE_ERROR
3991+LOCK BINLOG t_innodb READ FOR BACKUP;
3992+--error ER_PARSE_ERROR
3993+LOCK BINLOG t_innodb FOR BACKUP READ;
3994+
3995+LOCK TABLES FOR BACKUP;
3996+UNLOCK TABLES;
3997+
3998+LOCK BINLOG FOR BACKUP;
3999+UNLOCK BINLOG;
4000+
4001+--echo #-----------------------------------------------------------------------
4002+--echo # No backup locks are allowed in stored routines
4003+--echo #-----------------------------------------------------------------------
4004+
4005+delimiter |;
4006+--error ER_SP_BADSTATEMENT
4007+CREATE PROCEDURE p1()
4008+BEGIN
4009+ LOCK TABLES FOR BACKUP;
4010+END|
4011+
4012+--error ER_SP_BADSTATEMENT
4013+CREATE PROCEDURE p2()
4014+BEGIN
4015+ LOCK BINLOG FOR BACKUP;
4016+END|
4017+
4018+--error ER_SP_BADSTATEMENT
4019+CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
4020+BEGIN
4021+ LOCK TABLES FOR BACKUP;
4022+ RETURN 1;
4023+END|
4024+
4025+--error ER_SP_BADSTATEMENT
4026+CREATE FUNCTION f2() RETURNS INT DETERMINISTIC
4027+BEGIN
4028+ LOCK BINLOG FOR BACKUP;
4029+ RETURN 1;
4030+END|
4031+
4032+delimiter ;|
4033+
4034+--echo #-----------------------------------------------------------------------
4035+--echo # Single-threaded tests
4036+--echo #-----------------------------------------------------------------------
4037+
4038+SET SESSION lock_wait_timeout=1;
4039+
4040+FLUSH STATUS;
4041+
4042+#
4043+# Multiple TFB locks in the same connection
4044+#
4045+LOCK TABLES FOR BACKUP;
4046+LOCK TABLES FOR BACKUP;
4047+SHOW STATUS LIKE 'Com_lock_tables_for_backup';
4048+
4049+UNLOCK TABLES;
4050+SHOW STATUS LIKE 'Com_unlock_tables';
4051+
4052+#
4053+# Multiple BFB locks in the same connection
4054+#
4055+LOCK BINLOG FOR BACKUP;
4056+LOCK BINLOG FOR BACKUP;
4057+
4058+SHOW STATUS LIKE 'Com_lock_binlog_for_backup';
4059+
4060+UNLOCK BINLOG;
4061+SHOW STATUS LIKE 'Com_unlock_binlog';
4062+
4063+#
4064+# LTFB + DDL / DML in the same connection
4065+#
4066+
4067+LOCK TABLES FOR BACKUP;
4068+
4069+DELETE FROM t_innodb;
4070+INSERT INTO t_innodb VALUES(0);
4071+UPDATE t_innodb SET a = 1;
4072+REPLACE INTO t_innodb VALUES(1);
4073+SELECT * FROM t_innodb;
4074+HANDLER t_innodb OPEN;
4075+HANDLER t_innodb READ a FIRST;
4076+HANDLER t_innodb CLOSE;
4077+
4078+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4079+DELETE FROM t_myisam;
4080+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4081+INSERT INTO t_myisam VALUES(0);
4082+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4083+INSERT DELAYED INTO t_myisam VALUES(0);
4084+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4085+UPDATE t_myisam SET a = 1;
4086+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4087+REPLACE INTO t_myisam VALUES(1);
4088+SELECT * FROM t_myisam;
4089+HANDLER t_myisam OPEN;
4090+HANDLER t_myisam READ a FIRST;
4091+HANDLER t_myisam CLOSE;
4092+
4093+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4094+DELETE FROM t_memory;
4095+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4096+INSERT INTO t_memory VALUES(0);
4097+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4098+INSERT DELAYED INTO t_memory VALUES(0);
4099+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4100+UPDATE t_memory SET a = 1;
4101+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4102+REPLACE INTO t_memory VALUES(1);
4103+SELECT * FROM t_memory;
4104+
4105+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4106+DELETE FROM t_archive;
4107+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4108+INSERT INTO t_archive VALUES(0);
4109+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4110+INSERT DELAYED INTO t_archive VALUES(0);
4111+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4112+UPDATE t_archive SET a = 1;
4113+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4114+REPLACE INTO t_archive VALUES(1);
4115+SELECT * FROM t_archive;
4116+
4117+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4118+DELETE FROM t_csv;
4119+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4120+INSERT INTO t_csv VALUES(0);
4121+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4122+UPDATE t_csv SET a = 1;
4123+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4124+REPLACE INTO t_csv VALUES(1);
4125+SELECT * FROM t_csv;
4126+
4127+DELETE FROM t_blackhole;
4128+INSERT INTO t_blackhole VALUES(0);
4129+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4130+INSERT DELAYED INTO t_blackhole VALUES(0);
4131+UPDATE t_blackhole SET a = 1;
4132+REPLACE INTO t_blackhole VALUES(1);
4133+SELECT * FROM t_blackhole;
4134+
4135+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4136+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
4137+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4138+CREATE TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
4139+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4140+CREATE TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
4141+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4142+CREATE TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
4143+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4144+CREATE TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
4145+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4146+CREATE TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
4147+
4148+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4149+DROP TABLE t_innodb;
4150+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4151+DROP TABLE t_myisam;
4152+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4153+DROP TABLE t_memory;
4154+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4155+DROP TABLE t_csv;
4156+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4157+DROP TABLE t_blackhole;
4158+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4159+DROP TABLE t_archive;
4160+
4161+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4162+DROP TABLE non_existing;
4163+
4164+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4165+TRUNCATE TABLE t_innodb;
4166+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4167+TRUNCATE TABLE t_myisam;
4168+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4169+TRUNCATE TABLE t_memory;
4170+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4171+TRUNCATE TABLE t_csv;
4172+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4173+TRUNCATE TABLE t_blackhole;
4174+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4175+TRUNCATE TABLE t_archive;
4176+
4177+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4178+RENAME TABLE t_innodb TO tmp;
4179+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4180+RENAME TABLE t_myisam TO tmp;
4181+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4182+RENAME TABLE t_memory TO tmp;
4183+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4184+RENAME TABLE t_csv TO tmp;
4185+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4186+RENAME TABLE t_blackhole TO tmp;
4187+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4188+RENAME TABLE t_archive TO tmp;
4189+
4190+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4191+ALTER TABLE t_innodb ADD COLUMN b CHAR(10);
4192+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4193+ALTER TABLE t_myisam ADD COLUMN b CHAR(10);
4194+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4195+ALTER TABLE t_memory ADD COLUMN b CHAR(10);
4196+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4197+ALTER TABLE t_csv ADD COLUMN b CHAR(10);
4198+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4199+ALTER TABLE t_blackhole ADD COLUMN b CHAR(10);
4200+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4201+ALTER TABLE t_archive ADD COLUMN b CHAR(10);
4202+
4203+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4204+ALTER TABLE t_innodb ADD KEY (a);
4205+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4206+ALTER TABLE t_myisam ADD KEY (a);
4207+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4208+ALTER TABLE t_memory ADD KEY (a);
4209+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4210+ALTER TABLE t_csv ADD KEY (a);
4211+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4212+ALTER TABLE t_blackhole ADD KEY (a);
4213+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4214+ALTER TABLE t_archive ADD KEY (a);
4215+
4216+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4217+DROP DATABASE test;
4218+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4219+CREATE DATABASE test1;
4220+
4221+delimiter |;
4222+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4223+CREATE PROCEDURE p1()
4224+BEGIN
4225+ SELECT 1;
4226+END|
4227+
4228+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4229+CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
4230+BEGIN
4231+ RETURN 1;
4232+END|
4233+
4234+delimiter ;|
4235+
4236+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4237+CREATE VIEW v1 AS SELECT * FROM t_innodb;
4238+
4239+INSERT INTO v_innodb VALUES(1);
4240+INSERT INTO v_blackhole VALUES(1);
4241+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4242+INSERT INTO v_myisam VALUES(1);
4243+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4244+INSERT INTO v_csv VALUES(1);
4245+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4246+INSERT INTO v_memory VALUES(1);
4247+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4248+INSERT INTO v_archive VALUES(1);
4249+
4250+UNLOCK TABLES;
4251+
4252+#
4253+# LBFB + DML/DDL in the same connection (and binlog disabled)
4254+#
4255+
4256+LOCK BINLOG FOR BACKUP;
4257+
4258+DELETE FROM t_innodb;
4259+INSERT INTO t_innodb VALUES(0);
4260+UPDATE t_innodb SET a = 1;
4261+REPLACE INTO t_innodb VALUES(1);
4262+SELECT * from t_innodb;
4263+HANDLER t_innodb OPEN;
4264+HANDLER t_innodb READ a FIRST;
4265+HANDLER t_innodb CLOSE;
4266+
4267+DELETE FROM t_myisam;
4268+INSERT INTO t_myisam VALUES(0);
4269+UPDATE t_myisam SET a = 1;
4270+REPLACE INTO t_myisam VALUES(1);
4271+SELECT * from t_myisam;
4272+HANDLER t_myisam OPEN;
4273+HANDLER t_myisam READ a FIRST;
4274+HANDLER t_myisam CLOSE;
4275+
4276+DELETE FROM t_memory;
4277+INSERT INTO t_memory VALUES(0);
4278+UPDATE t_memory SET a = 1;
4279+REPLACE INTO t_memory VALUES(1);
4280+SELECT * from t_memory;
4281+
4282+DELETE FROM t_archive;
4283+INSERT INTO t_archive VALUES(0);
4284+SELECT * from t_archive;
4285+
4286+DELETE FROM t_csv;
4287+INSERT INTO t_csv VALUES(0);
4288+UPDATE t_csv SET a = 1;
4289+REPLACE INTO t_csv VALUES(1);
4290+SELECT * from t_csv;
4291+
4292+DELETE FROM t_blackhole;
4293+INSERT INTO t_blackhole VALUES(0);
4294+UPDATE t_blackhole SET a = 1;
4295+REPLACE INTO t_blackhole VALUES(1);
4296+SELECT * from t_blackhole;
4297+
4298+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
4299+CREATE TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
4300+CREATE TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
4301+CREATE TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
4302+CREATE TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
4303+CREATE TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
4304+
4305+DROP TABLE tt_innodb;
4306+DROP TABLE tt_myisam;
4307+DROP TABLE tt_memory;
4308+DROP TABLE tt_csv;
4309+DROP TABLE tt_blackhole;
4310+DROP TABLE tt_archive;
4311+
4312+--error ER_BAD_TABLE_ERROR
4313+DROP TABLE non_existing;
4314+
4315+TRUNCATE TABLE t_innodb;
4316+TRUNCATE TABLE t_myisam;
4317+TRUNCATE TABLE t_memory;
4318+TRUNCATE TABLE t_csv;
4319+TRUNCATE TABLE t_blackhole;
4320+
4321+RENAME TABLE t_innodb TO tmp, tmp TO t_innodb;
4322+RENAME TABLE t_myisam TO tmp, tmp TO t_myisam;
4323+RENAME TABLE t_memory TO tmp, tmp TO t_memory;
4324+RENAME TABLE t_csv TO tmp, tmp TO t_csv;
4325+RENAME TABLE t_blackhole TO tmp, tmp TO t_blackhole;
4326+RENAME TABLE t_archive TO tmp, tmp TO t_archive;
4327+
4328+ALTER TABLE t_innodb ADD COLUMN b CHAR(10) NOT NULL;
4329+ALTER TABLE t_innodb DROP COLUMN b;
4330+ALTER TABLE t_myisam ADD COLUMN b CHAR(10) NOT NULL;
4331+ALTER TABLE t_myisam DROP COLUMN b;
4332+ALTER TABLE t_memory ADD COLUMN b CHAR(10) NOT NULL;
4333+ALTER TABLE t_memory DROP COLUMN b;
4334+ALTER TABLE t_csv ADD COLUMN b CHAR(10) NOT NULL;
4335+ALTER TABLE t_csv DROP COLUMN b;
4336+ALTER TABLE t_blackhole ADD COLUMN b CHAR(10) NOT NULL;
4337+ALTER TABLE t_blackhole DROP COLUMN b;
4338+ALTER TABLE t_archive ADD COLUMN b CHAR(10) NOT NULL;
4339+ALTER TABLE t_archive DROP COLUMN b;
4340+
4341+ALTER TABLE t_innodb ADD KEY tmp (a);
4342+ALTER TABLE t_innodb DROP KEY tmp;
4343+ALTER TABLE t_myisam ADD KEY tmp (a);
4344+ALTER TABLE t_myisam DROP KEY tmp;
4345+ALTER TABLE t_memory ADD KEY tmp (a);
4346+ALTER TABLE t_memory DROP KEY tmp;
4347+ALTER TABLE t_blackhole ADD KEY tmp (a);
4348+ALTER TABLE t_blackhole DROP KEY tmp;
4349+
4350+CREATE DATABASE test1;
4351+DROP DATABASE test1;
4352+
4353+delimiter |;
4354+
4355+CREATE PROCEDURE p1()
4356+BEGIN
4357+ SELECT 1;
4358+END|
4359+
4360+DROP PROCEDURE p1|
4361+
4362+CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
4363+BEGIN
4364+ RETURN 1;
4365+END|
4366+
4367+DROP FUNCTION f1|
4368+
4369+delimiter ;|
4370+
4371+CREATE VIEW v1 AS SELECT * FROM t_innodb;
4372+DROP VIEW v1;
4373+
4374+INSERT INTO v_innodb VALUES(1);
4375+INSERT INTO v_blackhole VALUES(1);
4376+INSERT INTO v_myisam VALUES(1);
4377+INSERT INTO v_csv VALUES(1);
4378+INSERT INTO v_memory VALUES(1);
4379+INSERT INTO v_archive VALUES(1);
4380+
4381+UNLOCK BINLOG;
4382+
4383+#
4384+# Test incompatibility with delay_key_write=ALL
4385+#
4386+SELECT @@delay_key_write;
4387+
4388+SET GLOBAL delay_key_write=ALL;
4389+--error ER_OPTION_PREVENTS_STATEMENT
4390+LOCK TABLES FOR BACKUP;
4391+
4392+SET GLOBAL delay_key_write=default;
4393+SELECT @@delay_key_write;
4394+
4395+#
4396+# read-only=1 + backup locks
4397+#
4398+
4399+SET GLOBAL read_only=1;
4400+
4401+INSERT INTO t_innodb VALUES(0);
4402+INSERT INTO t_myisam VALUES(0);
4403+
4404+LOCK TABLES FOR BACKUP;
4405+
4406+INSERT INTO t_innodb VALUES(0);
4407+--error ER_CANT_EXECUTE_WITH_BACKUP_LOCK
4408+INSERT INTO t_myisam VALUES(0);
4409+
4410+UNLOCK TABLES;
4411+
4412+INSERT INTO t_innodb VALUES(0);
4413+INSERT INTO t_myisam VALUES(0);
4414+
4415+SET GLOBAL read_only=0;
4416+
4417+#
4418+# Test that temporary tables are not affected by backup locks
4419+#
4420+LOCK TABLES FOR BACKUP;
4421+CREATE TEMPORARY TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
4422+CREATE TEMPORARY TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
4423+CREATE TEMPORARY TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
4424+CREATE TEMPORARY TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
4425+CREATE TEMPORARY TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
4426+CREATE TEMPORARY TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
4427+
4428+INSERT INTO tt_innodb VALUES(5);
4429+INSERT INTO tt_myisam VALUES(5);
4430+INSERT INTO tt_memory VALUES(5);
4431+INSERT INTO tt_csv VALUES(5);
4432+INSERT INTO tt_blackhole VALUES(5);
4433+INSERT INTO tt_archive VALUES(5);
4434+
4435+LOCK BINLOG FOR BACKUP;
4436+
4437+START TRANSACTION;
4438+SELECT * FROM tt_archive;
4439+SELECT * FROM tt_blackhole;
4440+SELECT * FROM tt_memory;
4441+SELECT * FROM tt_innodb;
4442+SELECT * FROM tt_myisam;
4443+INSERT INTO tt_innodb VALUES(6);
4444+INSERT INTO tt_myisam VALUES(6);
4445+INSERT INTO tt_memory VALUES(6);
4446+INSERT INTO tt_csv VALUES(6);
4447+INSERT INTO tt_blackhole VALUES(6);
4448+INSERT INTO tt_archive VALUES(6);
4449+COMMIT;
4450+
4451+SELECT * FROM tt_archive;
4452+SELECT * FROM tt_blackhole;
4453+SELECT * FROM tt_memory;
4454+SELECT * FROM tt_innodb;
4455+SELECT * FROM tt_myisam;
4456+
4457+DROP TEMPORARY TABLE tt_innodb;
4458+DROP TEMPORARY TABLE tt_myisam;
4459+DROP TEMPORARY TABLE tt_memory;
4460+DROP TEMPORARY TABLE tt_csv;
4461+DROP TEMPORARY TABLE tt_blackhole;
4462+DROP TEMPORARY TABLE tt_archive;
4463+
4464+UNLOCK BINLOG;
4465+UNLOCK TABLES;
4466+
4467+#
4468+# test that AUTOCOMMIT updates succeed with a BINLOG lock in the same connection with binlog disabled
4469+#
4470+
4471+SELECT @@log_bin;
4472+
4473+LOCK BINLOG FOR BACKUP;
4474+
4475+INSERT INTO t_innodb VALUES(1);
4476+INSERT INTO t_myisam VALUES(1);
4477+
4478+UNLOCK BINLOG;
4479+
4480+#
4481+# Log tables
4482+#
4483+
4484+SET @old_general_log = @@general_log;
4485+SET @old_slow_query_log = @@slow_query_log;
4486+SET @old_log_output = @@log_output;
4487+SET @old_long_query_time = @@SESSION.long_query_time;
4488+
4489+SET SESSION long_query_time = 0;
4490+SET GLOBAL log_output = 'TABLE';
4491+SET GLOBAL general_log = ON;
4492+SET GLOBAL slow_query_log = ON;
4493+
4494+LOCK TABLES FOR BACKUP;
4495+
4496+SELECT 1;
4497+
4498+LOCK BINLOG FOR BACKUP;
4499+
4500+SELECT 1;
4501+
4502+UNLOCK BINLOG;
4503+
4504+UNLOCK TABLES;
4505+
4506+SET SESSION long_query_time = @old_long_query_time;
4507+SET GLOBAL log_output = @old_log_output;
4508+SET GLOBAL slow_query_log = @old_slow_query_log;
4509+SET GLOBAL general_log = @old_general_log;
4510+
4511+SET SESSION lock_wait_timeout=default;
4512+
4513+
4514+--echo #-----------------------------------------------------------------------
4515+--echo # Multi-threaded tests
4516+--echo #-----------------------------------------------------------------------
4517+
4518+--echo # connection default
4519+SET GLOBAL lock_wait_timeout=1;
4520+
4521+CREATE USER user@localhost;
4522+GRANT ALL PRIVILEGES ON test.* TO user@localhost;
4523+
4524+--connect(con1,localhost,root,,)
4525+
4526+--connect(con2,localhost,user,,)
4527+
4528+--connection default
4529+LOCK TABLES FOR BACKUP;
4530+
4531+--connection con1
4532+--echo # connection con1
4533+--error ER_LOCK_WAIT_TIMEOUT
4534+SET GLOBAL delay_key_write=ALL;
4535+
4536+--connection default
4537+--echo # connection default
4538+UNLOCK TABLES;
4539+
4540+#
4541+# read-only=1 + backup locks
4542+#
4543+
4544+--connection con2
4545+--echo # connection con2
4546+
4547+START TRANSACTION;
4548+INSERT INTO t_innodb VALUES(0);
4549+
4550+--connection default
4551+--echo # connection default
4552+
4553+SET GLOBAL read_only=1;
4554+
4555+--connection con2
4556+--echo # connection con2
4557+
4558+--error ER_OPTION_PREVENTS_STATEMENT
4559+COMMIT;
4560+
4561+--error ER_OPTION_PREVENTS_STATEMENT
4562+INSERT INTO t_innodb VALUES(0);
4563+--error ER_OPTION_PREVENTS_STATEMENT
4564+INSERT INTO t_myisam VALUES(0);
4565+
4566+--connection con1
4567+--echo # connection con1
4568+
4569+LOCK TABLES FOR BACKUP;
4570+
4571+--connection con2
4572+--echo # connection con2
4573+
4574+--error ER_OPTION_PREVENTS_STATEMENT
4575+INSERT INTO t_innodb VALUES(0);
4576+--error ER_OPTION_PREVENTS_STATEMENT
4577+INSERT INTO t_myisam VALUES(0);
4578+
4579+--connection default
4580+--echo # connection default
4581+
4582+SET GLOBAL read_only=0;
4583+
4584+--connection con2
4585+--echo # connection con2
4586+INSERT INTO t_innodb VALUES(0);
4587+--error ER_LOCK_WAIT_TIMEOUT
4588+INSERT INTO t_myisam VALUES(0);
4589+
4590+--connection default
4591+--echo # connection default
4592+
4593+SET GLOBAL read_only=1;
4594+
4595+--connection con2
4596+--echo # connection con2
4597+
4598+--error ER_OPTION_PREVENTS_STATEMENT
4599+INSERT INTO t_innodb VALUES(0);
4600+--error ER_OPTION_PREVENTS_STATEMENT
4601+INSERT INTO t_myisam VALUES(0);
4602+
4603+--connection con1
4604+--echo # connection con1
4605+
4606+UNLOCK TABLES;
4607+
4608+--connection con2
4609+--echo # connection con2
4610+
4611+--error ER_OPTION_PREVENTS_STATEMENT
4612+INSERT INTO t_innodb VALUES(0);
4613+--error ER_OPTION_PREVENTS_STATEMENT
4614+INSERT INTO t_myisam VALUES(0);
4615+
4616+--connection default
4617+--echo # connection default
4618+
4619+SET GLOBAL read_only=0;
4620+
4621+#
4622+# Test that temporary tables are not affected by backup locks
4623+#
4624+--connection default
4625+--echo # connection default
4626+LOCK TABLES FOR BACKUP;
4627+
4628+--connection con1
4629+--echo # connection con1
4630+
4631+CREATE TEMPORARY TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
4632+CREATE TEMPORARY TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
4633+CREATE TEMPORARY TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
4634+CREATE TEMPORARY TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
4635+CREATE TEMPORARY TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
4636+CREATE TEMPORARY TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
4637+
4638+INSERT INTO tt_innodb VALUES(5);
4639+INSERT INTO tt_myisam VALUES(5);
4640+INSERT INTO tt_memory VALUES(5);
4641+INSERT INTO tt_csv VALUES(5);
4642+INSERT INTO tt_blackhole VALUES(5);
4643+INSERT INTO tt_archive VALUES(5);
4644+
4645+--connection default
4646+--echo # connection default
4647+LOCK BINLOG FOR BACKUP;
4648+
4649+--connection con1
4650+--echo # connection con1
4651+
4652+START TRANSACTION;
4653+SELECT * FROM tt_archive;
4654+SELECT * FROM tt_blackhole;
4655+SELECT * FROM tt_memory;
4656+SELECT * FROM tt_innodb;
4657+SELECT * FROM tt_myisam;
4658+INSERT INTO tt_innodb VALUES(6);
4659+INSERT INTO tt_myisam VALUES(6);
4660+INSERT INTO tt_memory VALUES(6);
4661+INSERT INTO tt_csv VALUES(6);
4662+INSERT INTO tt_blackhole VALUES(6);
4663+INSERT INTO tt_archive VALUES(6);
4664+COMMIT;
4665+
4666+SELECT * FROM tt_archive;
4667+SELECT * FROM tt_blackhole;
4668+SELECT * FROM tt_memory;
4669+SELECT * FROM tt_innodb;
4670+SELECT * FROM tt_myisam;
4671+
4672+DROP TEMPORARY TABLE tt_innodb;
4673+DROP TEMPORARY TABLE tt_myisam;
4674+DROP TEMPORARY TABLE tt_memory;
4675+DROP TEMPORARY TABLE tt_csv;
4676+DROP TEMPORARY TABLE tt_blackhole;
4677+DROP TEMPORARY TABLE tt_archive;
4678+
4679+--connection default
4680+--echo # connection default
4681+
4682+UNLOCK BINLOG;
4683+UNLOCK TABLES;
4684+
4685+LOCK BINLOG FOR BACKUP;
4686+
4687+--connection con1
4688+--echo # connection con1
4689+
4690+#
4691+# test that AUTOCOMMIT updates are not blocked with a BINLOG lock in another
4692+# connection with binlog disabled
4693+#
4694+
4695+SELECT @@log_bin;
4696+
4697+INSERT INTO t_innodb VALUES(1);
4698+INSERT INTO t_myisam VALUES(1);
4699+
4700+--connection default
4701+--echo # connection default
4702+
4703+UNLOCK BINLOG;
4704+
4705+#
4706+# LTFB + DDL / DML in another connection
4707+#
4708+
4709+--connection default
4710+--echo # connection default
4711+
4712+LOCK TABLES FOR BACKUP;
4713+
4714+--connection con1
4715+--echo # connection con1
4716+
4717+DELETE FROM t_innodb;
4718+INSERT INTO t_innodb VALUES(0);
4719+UPDATE t_innodb SET a = 1;
4720+REPLACE INTO t_innodb VALUES(1);
4721+SELECT * from t_innodb;
4722+HANDLER t_innodb OPEN;
4723+HANDLER t_innodb READ a FIRST;
4724+HANDLER t_innodb CLOSE;
4725+
4726+--error ER_LOCK_WAIT_TIMEOUT
4727+INSERT INTO t_myisam VALUES(0);
4728+--error ER_LOCK_WAIT_TIMEOUT
4729+INSERT DELAYED INTO t_myisam VALUES(0);
4730+SELECT * FROM t_myisam;
4731+HANDLER t_myisam OPEN;
4732+HANDLER t_myisam READ a FIRST;
4733+HANDLER t_myisam CLOSE;
4734+
4735+--error ER_LOCK_WAIT_TIMEOUT
4736+INSERT INTO t_memory VALUES(0);
4737+SELECT * FROM t_memory;
4738+
4739+--error ER_LOCK_WAIT_TIMEOUT
4740+INSERT INTO t_archive VALUES(0);
4741+SELECT * FROM t_archive;
4742+
4743+--error ER_LOCK_WAIT_TIMEOUT
4744+INSERT INTO t_csv VALUES(0);
4745+SELECT * FROM t_csv;
4746+
4747+DELETE FROM t_blackhole;
4748+INSERT INTO t_blackhole VALUES(0);
4749+UPDATE t_blackhole SET a = 1;
4750+REPLACE INTO t_blackhole VALUES(1);
4751+SELECT * FROM t_blackhole;
4752+
4753+--error ER_LOCK_WAIT_TIMEOUT
4754+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
4755+
4756+--error ER_LOCK_WAIT_TIMEOUT
4757+DROP TABLE t_innodb;
4758+
4759+--error ER_LOCK_WAIT_TIMEOUT
4760+DROP TABLE non_existing;
4761+
4762+--error ER_LOCK_WAIT_TIMEOUT
4763+TRUNCATE TABLE t_innodb;
4764+
4765+--error ER_LOCK_WAIT_TIMEOUT
4766+RENAME TABLE t_innodb TO tmp;
4767+
4768+--error ER_LOCK_WAIT_TIMEOUT
4769+ALTER TABLE t_innodb ADD COLUMN b CHAR(10);
4770+
4771+--error ER_LOCK_WAIT_TIMEOUT
4772+ALTER TABLE t_innodb ADD KEY (a);
4773+
4774+--error ER_LOCK_WAIT_TIMEOUT
4775+DROP DATABASE test;
4776+--error ER_LOCK_WAIT_TIMEOUT
4777+CREATE DATABASE test1;
4778+
4779+# The server overrides lock_wait_timeout to 1 year when opening system
4780+# tables. So ER_LOCK_WAIT_TIMEOUT can't be used here.
4781+
4782+--let $id=`SELECT CONNECTION_ID()`
4783+
4784+--send CREATE PROCEDURE p1() SELECT 1
4785+
4786+--connection default
4787+--echo # connection default
4788+
4789+let $wait_condition=
4790+ SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST
4791+ WHERE STATE = "Waiting for backup lock" AND
4792+ INFO = "CREATE PROCEDURE p1() SELECT 1";
4793+--source include/wait_condition.inc
4794+
4795+--disable_query_log
4796+--echo KILL QUERY #;
4797+--eval KILL QUERY $id
4798+--enable_query_log
4799+
4800+--connection con1
4801+--echo # connection con1
4802+
4803+--error ER_QUERY_INTERRUPTED
4804+--reap
4805+
4806+--send CREATE FUNCTION f1() RETURNS INT DETERMINISTIC RETURN 1
4807+
4808+--connection default
4809+--echo # connection default
4810+
4811+let $wait_condition=
4812+ SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST
4813+ WHERE STATE = "Waiting for backup lock" AND
4814+ INFO = "CREATE FUNCTION f1() RETURNS INT DETERMINISTIC RETURN 1";
4815+--source include/wait_condition.inc
4816+
4817+--disable_query_log
4818+--echo KILL QUERY #;
4819+--eval KILL QUERY $id
4820+--enable_query_log
4821+
4822+--connection con1
4823+--echo # connection con1
4824+
4825+--error ER_QUERY_INTERRUPTED
4826+--reap
4827+
4828+--error ER_LOCK_WAIT_TIMEOUT
4829+CREATE VIEW v1 AS SELECT * FROM t_innodb;
4830+
4831+INSERT INTO v_innodb VALUES(1);
4832+INSERT INTO v_blackhole VALUES(1);
4833+--error ER_LOCK_WAIT_TIMEOUT
4834+INSERT INTO v_myisam VALUES(1);
4835+
4836+--connection default
4837+--echo # connection default
4838+
4839+UNLOCK TABLES;
4840+
4841+#
4842+# LBFB + DML/DDL in another connection (and binlog disabled)
4843+#
4844+
4845+LOCK BINLOG FOR BACKUP;
4846+
4847+--connection con1
4848+--echo # connection con1
4849+
4850+DELETE FROM t_innodb;
4851+INSERT INTO t_innodb VALUES(0);
4852+UPDATE t_innodb SET a = 1;
4853+REPLACE INTO t_innodb VALUES(1);
4854+SELECT * from t_innodb;
4855+HANDLER t_innodb OPEN;
4856+HANDLER t_innodb READ a FIRST;
4857+HANDLER t_innodb CLOSE;
4858+
4859+DELETE FROM t_myisam;
4860+INSERT INTO t_myisam VALUES(0);
4861+UPDATE t_myisam SET a = 1;
4862+REPLACE INTO t_myisam VALUES(1);
4863+SELECT * from t_myisam;
4864+HANDLER t_myisam OPEN;
4865+HANDLER t_myisam READ a FIRST;
4866+HANDLER t_myisam CLOSE;
4867+
4868+DELETE FROM t_memory;
4869+INSERT INTO t_memory VALUES(0);
4870+UPDATE t_memory SET a = 1;
4871+REPLACE INTO t_memory VALUES(1);
4872+SELECT * from t_memory;
4873+
4874+INSERT INTO t_archive VALUES(0);
4875+SELECT * from t_archive;
4876+
4877+DELETE FROM t_csv;
4878+INSERT INTO t_csv VALUES(0);
4879+UPDATE t_csv SET a = 1;
4880+REPLACE INTO t_csv VALUES(1);
4881+SELECT * from t_csv;
4882+
4883+DELETE FROM t_blackhole;
4884+INSERT INTO t_blackhole VALUES(0);
4885+UPDATE t_blackhole SET a = 1;
4886+REPLACE INTO t_blackhole VALUES(1);
4887+SELECT * from t_blackhole;
4888+
4889+CREATE TABLE tt_innodb(a INT NOT NULL) ENGINE=InnoDB;
4890+CREATE TABLE tt_myisam(a INT NOT NULL) ENGINE=MyISAM;
4891+CREATE TABLE tt_memory(a INT NOT NULL) ENGINE=MEMORY;
4892+CREATE TABLE tt_csv(a INT NOT NULL) ENGINE=CSV;
4893+CREATE TABLE tt_blackhole(a INT NOT NULL) ENGINE=BLACKHOLE;
4894+CREATE TABLE tt_archive(a INT NOT NULL) ENGINE=ARCHIVE;
4895+
4896+DROP TABLE tt_innodb;
4897+DROP TABLE tt_myisam;
4898+DROP TABLE tt_memory;
4899+DROP TABLE tt_csv;
4900+DROP TABLE tt_blackhole;
4901+DROP TABLE tt_archive;
4902+
4903+--error ER_BAD_TABLE_ERROR
4904+DROP TABLE non_existing;
4905+
4906+TRUNCATE TABLE t_innodb;
4907+TRUNCATE TABLE t_myisam;
4908+TRUNCATE TABLE t_memory;
4909+TRUNCATE TABLE t_csv;
4910+TRUNCATE TABLE t_blackhole;
4911+
4912+RENAME TABLE t_innodb TO tmp, tmp TO t_innodb;
4913+RENAME TABLE t_myisam TO tmp, tmp TO t_myisam;
4914+RENAME TABLE t_memory TO tmp, tmp TO t_memory;
4915+RENAME TABLE t_csv TO tmp, tmp TO t_csv;
4916+RENAME TABLE t_blackhole TO tmp, tmp TO t_blackhole;
4917+RENAME TABLE t_archive TO tmp, tmp TO t_archive;
4918+
4919+ALTER TABLE t_innodb ADD COLUMN b CHAR(10) NOT NULL;
4920+ALTER TABLE t_innodb DROP COLUMN b;
4921+ALTER TABLE t_myisam ADD COLUMN b CHAR(10) NOT NULL;
4922+ALTER TABLE t_myisam DROP COLUMN b;
4923+ALTER TABLE t_memory ADD COLUMN b CHAR(10) NOT NULL;
4924+ALTER TABLE t_memory DROP COLUMN b;
4925+ALTER TABLE t_csv ADD COLUMN b CHAR(10) NOT NULL;
4926+ALTER TABLE t_csv DROP COLUMN b;
4927+ALTER TABLE t_blackhole ADD COLUMN b CHAR(10) NOT NULL;
4928+ALTER TABLE t_blackhole DROP COLUMN b;
4929+ALTER TABLE t_archive ADD COLUMN b CHAR(10) NOT NULL;
4930+ALTER TABLE t_archive DROP COLUMN b;
4931+
4932+ALTER TABLE t_innodb ADD KEY tmp (a);
4933+ALTER TABLE t_innodb DROP KEY tmp;
4934+ALTER TABLE t_myisam ADD KEY tmp (a);
4935+ALTER TABLE t_myisam DROP KEY tmp;
4936+ALTER TABLE t_memory ADD KEY tmp (a);
4937+ALTER TABLE t_memory DROP KEY tmp;
4938+ALTER TABLE t_blackhole ADD KEY tmp (a);
4939+ALTER TABLE t_blackhole DROP KEY tmp;
4940+
4941+CREATE DATABASE test1;
4942+DROP DATABASE test1;
4943+
4944+delimiter |;
4945+
4946+CREATE PROCEDURE p1()
4947+BEGIN
4948+ SELECT 1;
4949+END|
4950+
4951+DROP PROCEDURE p1|
4952+
4953+CREATE FUNCTION f1() RETURNS INT DETERMINISTIC
4954+BEGIN
4955+ RETURN 1;
4956+END|
4957+
4958+DROP FUNCTION f1|
4959+
4960+delimiter ;|
4961+
4962+CREATE VIEW v1 AS SELECT * FROM t_innodb;
4963+DROP VIEW v1;
4964+
4965+INSERT INTO v_innodb VALUES(1);
4966+INSERT INTO v_blackhole VALUES(1);
4967+INSERT INTO v_myisam VALUES(1);
4968+INSERT INTO v_csv VALUES(1);
4969+INSERT INTO v_memory VALUES(1);
4970+INSERT INTO v_archive VALUES(1);
4971+
4972+--connection default
4973+--echo # connection default
4974+
4975+UNLOCK BINLOG;
4976+
4977+#
4978+# Log tables
4979+#
4980+
4981+SET @old_general_log = @@general_log;
4982+SET @old_slow_query_log = @@slow_query_log;
4983+SET @old_log_output = @@log_output;
4984+
4985+SET GLOBAL log_output = 'TABLE';
4986+SET GLOBAL general_log = ON;
4987+SET GLOBAL slow_query_log = ON;
4988+
4989+LOCK TABLES FOR BACKUP;
4990+
4991+--connection con1
4992+--echo # connection con1
4993+
4994+SET @old_long_query_time = @@SESSION.long_query_time;
4995+SET SESSION long_query_time = 0;
4996+
4997+SELECT 1;
4998+
4999+--connection default
5000+--echo # connection default
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches