Hi Daogang,
Nice work, please see some comments!
Dao-Gang.Qu@stripped wrote:
> #At file:///home/daogangqu/mysql/bzrwork/wl5142/mysql-pe/ based on
> revid:jorgen.loland@stripped
>
> 3683 Dao-Gang.Qu@stripped 2009-11-24
> WL#5142 FLUSH LOGS should take optional arguments for which log(s) to flush
>
> Support to flush individual logs, so that meet user's requirement
> for flush specified logs and improve the response time.
>
..., so that user can selectively flush the logs and avoid necessary
flushes of logs.
> Flush individual logs as following:
> flush error logs
> flush engine logs
> flush general logs
> flush slow logs
> flush binary logs
> flush relay logs
>
> Flush various kinds of logs in one statement, as long as everyone
> is comma-separated as following:
I'd suggest:
Flush multiple logs separated by comma in one statement is also
supported as the following:
> flush slow logs, binary logs;
> flush error logs, engine logs, general logs, relay logs;
> @ mysql-test/suite/rpl/r/rpl_flush_logs.result
> Test result for WL#5142.
> @ mysql-test/suite/rpl/t/rpl_flush_logs.test
> Added the test file to verify if the 'flush separated log'
separated => individual
> statement works fine.
> @ sql/sql_parse.cc
> Added code to flush specified logs against the option.
> @ sql/sql_yacc.yy
> Added code to parse the 'flush * log' statement syntax and
> set its option to Lex->type.
>
> added:
> mysql-test/suite/rpl/r/rpl_flush_logs.result
> mysql-test/suite/rpl/t/rpl_flush_logs-master.opt
> mysql-test/suite/rpl/t/rpl_flush_logs.test
> modified:
> include/mysql_com.h
> sql/lex.h
> sql/sql_parse.cc
> sql/sql_yacc.yy
> === modified file 'include/mysql_com.h'
> --- a/include/mysql_com.h 2009-11-02 15:16:58 +0000
> +++ b/include/mysql_com.h 2009-11-24 04:56:28 +0000
> @@ -128,6 +128,12 @@ enum enum_server_command
> thread */
> #define REFRESH_MASTER 128 /* Remove all bin logs in the index
> and truncate the index */
> +#define REFRESH_ERROR_LOG 256 /* Rotate only the erorr log */
> +#define REFRESH_ENGINE_LOG 512 /* Flush all storage engine logs */
> +#define REFRESH_BINARY_LOG 1024 /* Flush the binary log */
> +#define REFRESH_RELAY_LOG 2048 /* Flush the relay log */
> +#define REFRESH_GENERAL_LOG 4096 /* Flush the general log */
> +#define REFRESH_SLOW_LOG 8192 /* Flush the slow query log */
>
> /* The following can't be set with mysql_refresh() */
> #define REFRESH_READ_LOCK 16384 /* Lock tables for read */
>
> === added file 'mysql-test/suite/rpl/r/rpl_flush_logs.result'
> --- a/mysql-test/suite/rpl/r/rpl_flush_logs.result 1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/r/rpl_flush_logs.result 2009-11-24 04:56:28 +0000
> @@ -0,0 +1,110 @@
> +stop slave;
> +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
> +reset master;
> +reset slave;
> +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
> +start slave;
> +CREATE TABLE t1(a INT);
> +insert into t1(a) values(1);
> +# Make sure the 'master_log.err-old' file does not
> +# exist before execute 'flush error logs' statement.
> +# Test if support 'flush error logs' statement.
> +flush error logs;
> +# Check the 'master_log.err-old' file is created
> +# after executed 'flush error logs' statement.
> +# Make sure binary logs was not be flushed
> +# after execute 'flush error logs' statement.
> +# Make sure relay logs was not be flushed
> +# after execute 'flush error logs' statement.
> +insert into t1(a) values(2);
> +insert into t1(a) values(3);
> +# Make sure the 'slave-relay-bin.000004' file does not
> +# exist before execute 'flush relay logs' statement.
> +# Test if support 'flush relay logs' statement.
> +flush relay logs;
> +# Check the 'slave-relay-bin.000004' file is created
> +# after executed 'flush relay logs' statement.
> +# Make sure binary logs was not be flushed
> +# after execute 'flush relay logs' statement.
> +insert into t1(a) values(4);
> +insert into t1(a) values(5);
> +insert into t1(a) values(6);
> +# Test if support 'flush slow logs' statement.
> +flush slow logs;
> +# Make sure binary logs was not be flushed
> +# after execute 'flush slow logs' statement.
> +insert into t1(a) values(7);
> +insert into t1(a) values(8);
> +# Test if support 'flush general logs' statement.
> +flush general logs;
> +# Make sure binary logs was not be flushed
> +# after execute 'flush general logs' statement.
> +insert into t1(a) values(9);
> +insert into t1(a) values(10);
> +# Test if support 'flush engine logs' statement.
> +flush engine logs;
> +# Make sure binary logs was not be flushed
> +# after execute 'flush engine logs' statement.
> +insert into t1(a) values(11);
> +# Make sure the 'master-bin.000002' file does not
> +# exist before execute 'flush binary logs' statement.
> +# Test if support 'flush binary logs' statement.
> +flush binary logs;
> +# Check the 'master-bin.000002' file is created
> +# after executed 'flush binary logs' statement.
> +insert into t1(a) values(12);
> +insert into t1(a) values(13);
> +# Make sure the 'slave-relay-bin.000007' file does not exist
> +# exist before execute 'flush error logs, relay logs' statement.
> +# Make sure the 'master_log.err-old' file does not exist
> +# before execute 'flush error logs, relay logs' statement.
> +# Test if support to combine all kinds of logs into one statement.
> +flush error logs, relay logs;
> +# Check the 'master_log.err-old' file is created
> +# after executed 'flush error logs, relay logs' statement.
> +# Make sure binary logs was not be flushed
> +# after execute 'flush error logs, relay logs' statement.
> +# Check the 'slave-relay-bin.000007' file is created after
> +# execute 'flush error logs, relay logs' statement.
> +# Make sure the 'slave-relay-bin.000008' and 'slave-relay-bin.000009'
> +# files do not exist before execute 'flush error logs, relay logs'
> +# statement.
> +# Make sure the 'master_log.err-old' file does not exist
> +# before execute 'flush logs' statement.
> +# Test if 'flush logs' statement works fine and flush all the logs.
> +flush logs;
> +# Check the 'master_log.err-old' file is created
> +# after executed 'flush logs' statement.
> +# Check 'master-bin.000003' is created
> +# after execute 'flush logs' statement.
> +# Check the 'slave-relay-bin.000008' and 'slave-relay-bin.000009'
> +# files are created after execute 'flush logs' statement.
> +select * from t1;
> +a
> +1
> +4
> +5
> +6
> +7
> +8
> +9
> +10
> +11
> +12
> +13
> +select * from t1;
> +a
> +1
> +2
> +3
> +4
> +5
> +6
> +7
> +8
> +9
> +10
> +11
> +12
> +13
> +drop table t1;
>
> === added file 'mysql-test/suite/rpl/t/rpl_flush_logs-master.opt'
> --- a/mysql-test/suite/rpl/t/rpl_flush_logs-master.opt 1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/t/rpl_flush_logs-master.opt 2009-11-24 04:56:28 +0000
> @@ -0,0 +1 @@
> +--log-error=$MYSQLTEST_VARDIR/tmp/master_log.err
>
> === added file 'mysql-test/suite/rpl/t/rpl_flush_logs.test'
> --- a/mysql-test/suite/rpl/t/rpl_flush_logs.test 1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/t/rpl_flush_logs.test 2009-11-24 04:56:28 +0000
> @@ -0,0 +1,210 @@
> +#
> +# WL#5124
> +# This test verifies if the 'flush separated logs' statement
> +# works fine.
> +#
> +
> +--source include/master-slave.inc
> +--source include/have_binlog_format_statement.inc
> +connection master;
> +CREATE TABLE t1(a INT);
> +insert into t1(a) values(1);
> +
Could you explain why you need the inserts here and below? I kind of
think that they are not necessary.
> +
> +# Test 'flush error logs' statement.
> +--echo # Make sure the 'master_log.err-old' file does not
> +--echo # exist before execute 'flush error logs' statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/tmp/master_log.err-old;
> +
> +--echo # Test if support 'flush error logs' statement.
> +flush error logs;
> +
> +--echo # Check the 'master_log.err-old' file is created
> +--echo # after executed 'flush error logs' statement.
> +file_exists $MYSQLTEST_VARDIR/tmp/master_log.err-old;
> +file_exists $MYSQLTEST_VARDIR/tmp/master_log.err;
> +
> +--echo # Make sure binary logs was not be flushed
> +--echo # after execute 'flush error logs' statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000002;
> +
> +sync_slave_with_master;
> +connection slave;
> +--echo # Make sure relay logs was not be flushed
> +--echo # after execute 'flush error logs' statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/mysqld.2/data/slave-relay-bin.000004;
> +
> +insert into t1(a) values(2);
> +insert into t1(a) values(3);
> +
> +
> +# Test 'flush relay logs' statement.
> +--echo # Make sure the 'slave-relay-bin.000004' file does not
> +--echo # exist before execute 'flush relay logs' statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/mysqld.2/data/slave-relay-bin.000004;
> +
> +connection master;
> +--echo # Test if support 'flush relay logs' statement.
> +flush relay logs;
> +
> +sync_slave_with_master;
> +connection slave;
> +--echo # Check the 'slave-relay-bin.000004' file is created
> +--echo # after executed 'flush relay logs' statement.
> +file_exists $MYSQLTEST_VARDIR/mysqld.2/data/slave-relay-bin.000004;
> +
> +connection master;
> +--echo # Make sure binary logs was not be flushed
> +--echo # after execute 'flush relay logs' statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000002;
> +
> +insert into t1(a) values(4);
> +insert into t1(a) values(5);
> +insert into t1(a) values(6);
> +
> +
> +# Test 'flush slow logs' statement.
> +--echo # Test if support 'flush slow logs' statement.
> +flush slow logs;
> +
> +--echo # Make sure binary logs was not be flushed
> +--echo # after execute 'flush slow logs' statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000002;
> +
> +insert into t1(a) values(7);
> +insert into t1(a) values(8);
> +
> +
> +# Test 'flush general logs' statement.
> +--echo # Test if support 'flush general logs' statement.
> +flush general logs;
> +
> +--echo # Make sure binary logs was not be flushed
> +--echo # after execute 'flush general logs' statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000002;
> +
> +insert into t1(a) values(9);
> +insert into t1(a) values(10);
> +
> +
> +# Test 'flush engine logs' statement.
> +--echo # Test if support 'flush engine logs' statement.
> +flush engine logs;
> +
> +--echo # Make sure binary logs was not be flushed
> +--echo # after execute 'flush engine logs' statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000002;
> +
> +insert into t1(a) values(11);
> +
> +
> +# Test 'flush binary logs' statement.
> +--echo # Make sure the 'master-bin.000002' file does not
> +--echo # exist before execute 'flush binary logs' statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000002;
> +
> +--echo # Test if support 'flush binary logs' statement.
> +flush binary logs;
> +
> +--echo # Check the 'master-bin.000002' file is created
> +--echo # after executed 'flush binary logs' statement.
> +file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000002;
> +file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000001;
> +
> +insert into t1(a) values(12);
> +insert into t1(a) values(13);
> +
> +
> +# Test 'flush error logs, relay logs' statement
> +sync_slave_with_master;
> +connection slave;
> +--echo # Make sure the 'slave-relay-bin.000007' file does not exist
> +--echo # exist before execute 'flush error logs, relay logs' statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/mysqld.2/data/slave-relay-bin.000007;
> +
> +connection master;
> +remove_file $MYSQLTEST_VARDIR/tmp/master_log.err-old;
> +
> +--echo # Make sure the 'master_log.err-old' file does not exist
> +--echo # before execute 'flush error logs, relay logs' statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/tmp/master_log.err-old;
> +
> +--echo # Test if support to combine all kinds of logs into one statement.
> +flush error logs, relay logs;
> +
> +--echo # Check the 'master_log.err-old' file is created
> +--echo # after executed 'flush error logs, relay logs' statement.
> +file_exists $MYSQLTEST_VARDIR/tmp/master_log.err-old;
> +file_exists $MYSQLTEST_VARDIR/tmp/master_log.err;
> +
> +--echo # Make sure binary logs was not be flushed
> +--echo # after execute 'flush error logs, relay logs' statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000003;
> +
> +sync_slave_with_master;
> +connection slave;
> +--echo # Check the 'slave-relay-bin.000007' file is created after
> +--echo # execute 'flush error logs, relay logs' statement.
> +file_exists $MYSQLTEST_VARDIR/mysqld.2/data/slave-relay-bin.000007;
> +
> +
> +# Test 'flush logs' statement
> +--echo # Make sure the 'slave-relay-bin.000008' and 'slave-relay-bin.000009'
> +--echo # files do not exist before execute 'flush error logs, relay logs'
> +--echo # statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/mysqld.2/data/slave-relay-bin.000008;
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/mysqld.2/data/slave-relay-bin.000009;
> +
> +connection master;
> +remove_file $MYSQLTEST_VARDIR/tmp/master_log.err-old;
> +
> +--echo # Make sure the 'master_log.err-old' file does not exist
> +--echo # before execute 'flush logs' statement.
> +--error 1
> +file_exists $MYSQLTEST_VARDIR/tmp/master_log.err-old;
> +
> +--echo # Test if 'flush logs' statement works fine and flush all the logs.
> +flush logs;
> +
> +--echo # Check the 'master_log.err-old' file is created
> +--echo # after executed 'flush logs' statement.
> +file_exists $MYSQLTEST_VARDIR/tmp/master_log.err-old;
> +file_exists $MYSQLTEST_VARDIR/tmp/master_log.err;
> +
> +--echo # Check 'master-bin.000003' is created
> +--echo # after execute 'flush logs' statement.
> +file_exists $MYSQLTEST_VARDIR/mysqld.1/data/master-bin.000003;
> +
> +sync_slave_with_master;
> +connection slave;
> +--echo # Check the 'slave-relay-bin.000008' and 'slave-relay-bin.000009'
> +--echo # files are created after execute 'flush logs' statement.
> +file_exists $MYSQLTEST_VARDIR/mysqld.2/data/slave-relay-bin.000008;
> +file_exists $MYSQLTEST_VARDIR/mysqld.2/data/slave-relay-bin.000009;
> +
> +
> +connection master;
> +select * from t1;
> +
> +sync_slave_with_master;
> +connection slave;
> +select * from t1;
> +
> +connection master;
> +drop table t1;
> +sync_slave_with_master;
> +
>
> === modified file 'sql/lex.h'
> --- a/sql/lex.h 2009-10-30 16:34:50 +0000
> +++ b/sql/lex.h 2009-11-24 04:56:28 +0000
> @@ -198,6 +198,7 @@ static SYMBOL symbols[] = {
> { "ENGINE", SYM(ENGINE_SYM)},
> { "ENGINES", SYM(ENGINES_SYM)},
> { "ENUM", SYM(ENUM)},
> + { "ERROR", SYM(ERROR_SYM)},
> { "ERRORS", SYM(ERRORS)},
> { "ESCAPE", SYM(ESCAPE_SYM)},
> { "ESCAPED", SYM(ESCAPED)},
> @@ -234,6 +235,7 @@ static SYMBOL symbols[] = {
> { "FULL", SYM(FULL)},
> { "FULLTEXT", SYM(FULLTEXT_SYM)},
> { "FUNCTION", SYM(FUNCTION_SYM)},
> + { "GENERAL", SYM(GENERAL)},
> { "GEOMETRY", SYM(GEOMETRY_SYM)},
> { "GEOMETRYCOLLECTION",SYM(GEOMETRYCOLLECTION)},
> { "GET_FORMAT", SYM(GET_FORMAT)},
> @@ -446,6 +448,7 @@ static SYMBOL symbols[] = {
> { "REDUNDANT", SYM(REDUNDANT_SYM)},
> { "REFERENCES", SYM(REFERENCES)},
> { "REGEXP", SYM(REGEXP)},
> + { "RELAY", SYM(RELAY)},
> { "RELAYLOG", SYM(RELAYLOG_SYM)},
> { "RELAY_LOG_FILE", SYM(RELAY_LOG_FILE_SYM)},
> { "RELAY_LOG_POS", SYM(RELAY_LOG_POS_SYM)},
> @@ -503,6 +506,7 @@ static SYMBOL symbols[] = {
> { "SIMPLE", SYM(SIMPLE_SYM)},
> { "SKIP_GAP_EVENT", SYM(SKIP_GAP_EVENT_SYM)},
> { "SLAVE", SYM(SLAVE)},
> + { "SLOW", SYM(SLOW)},
> { "SNAPSHOT", SYM(SNAPSHOT_SYM)},
> { "SMALLINT", SYM(SMALLINT)},
> { "SOCKET", SYM(SOCKET_SYM)},
>
> === modified file 'sql/sql_parse.cc'
> --- a/sql/sql_parse.cc 2009-11-03 09:42:49 +0000
> +++ b/sql/sql_parse.cc 2009-11-24 04:56:28 +0000
> @@ -6839,6 +6839,7 @@ bool reload_acl_and_cache(THD *thd, ulon
> reset_mqh((LEX_USER *)NULL, TRUE);
> }
> #endif
> +
Please avoid this.
> if (options & REFRESH_LOG)
> {
> /*
> @@ -6846,32 +6847,65 @@ bool reload_acl_and_cache(THD *thd, ulon
> the slow query log, the relay log (if it exists) and the log
> tables.
> */
> + options|= REFRESH_BINARY_LOG;
> + options|= REFRESH_RELAY_LOG;
> + options|= REFRESH_SLOW_LOG;
> + options|= REFRESH_GENERAL_LOG;
> + options|= REFRESH_ENGINE_LOG;
> + options|= REFRESH_ERROR_LOG;
> + }
>
> - /*
> - Writing this command to the binlog may result in infinite loops
> - when doing mysqlbinlog|mysql, and anyway it does not really make
> - sense to log it automatically (would cause more trouble to users
> - than it would help them)
> - */
> - tmp_write_to_binlog= 0;
tmp_write_to_binlog should be set to 0 if we are trying to flush the
binary log
> - if( mysql_bin_log.is_open() )
> + if (options & REFRESH_ERROR_LOG)
> + {
> + if (flush_error_log())
> + result= 1;
> + }
> +
> + if (options & REFRESH_SLOW_LOG)
> + {
> + MYSQL_QUERY_LOG *mysql_slow_log;
> +
> + if (opt_slow_log)
> + {
> + mysql_slow_log= logger.get_slow_log_file_handler();
> + mysql_slow_log->reopen_file();
> + }
> + }
> +
> + if (options & REFRESH_GENERAL_LOG)
> + {
> + MYSQL_QUERY_LOG *mysql_log;
> +
> + if (opt_log);
> + {
> + mysql_log= logger.get_log_file_handler();
> + mysql_log->reopen_file();
> + }
> + }
logger should be locked when trying to reopen the general log or slow
log.
I'd also suggest to add two new functions, LOGGER::flush_general_log()
LOGGER::flush_slow_log() to do the flush
> +
> + if (options & REFRESH_ENGINE_LOG)
> + {
> + if (ha_flush_logs(NULL))
> + result= 1;
> + }
> +
> + if (options & REFRESH_BINARY_LOG)
> + {
> + if ( mysql_bin_log.is_open() )
> {
> mysql_bin_log.rotate_and_purge(RP_FORCE_ROTATE);
> }
> + }
> +
> + if (options & REFRESH_RELAY_LOG)
> + {
> #ifdef HAVE_REPLICATION
> pthread_mutex_lock(&LOCK_active_mi);
> rotate_relay_log(active_mi);
> pthread_mutex_unlock(&LOCK_active_mi);
> #endif
> -
> - /* flush slow and general logs */
> - logger.flush_logs(thd);
> -
> - if (ha_flush_logs(NULL))
> - result=1;
> - if (flush_error_log())
> - result=1;
> }
> +
avoid this
> /*
> Added support for flushing backup logs.
> */
>
> === modified file 'sql/sql_yacc.yy'
> --- a/sql/sql_yacc.yy 2009-11-06 16:34:09 +0000
> +++ b/sql/sql_yacc.yy 2009-11-24 04:56:28 +0000
> @@ -782,6 +782,7 @@ bool my_yyoverflow(short **a, YYSTYPE **
> %token ENUM
> %token EQ /* OPERATOR */
> %token EQUAL_SYM /* OPERATOR */
> +%token ERROR_SYM
> %token ERRORS
> %token ESCAPED
> %token ESCAPE_SYM /* SQL-2003-R */
> @@ -817,6 +818,7 @@ bool my_yyoverflow(short **a, YYSTYPE **
> %token FULLTEXT_SYM
> %token FUNCTION_SYM /* SQL-2003-R */
> %token GE
> +%token GENERAL
> %token GEOMETRYCOLLECTION
> %token GEOMETRY_SYM
> %token GET_FORMAT /* MYSQL-FUNC */
> @@ -1040,6 +1042,7 @@ bool my_yyoverflow(short **a, YYSTYPE **
> %token REDUNDANT_SYM
> %token REFERENCES /* SQL-2003-R */
> %token REGEXP
> +%token RELAY
> %token RELAYLOG_SYM
> %token RELAY_LOG_FILE_SYM
> %token RELAY_LOG_POS_SYM
> @@ -1099,6 +1102,7 @@ bool my_yyoverflow(short **a, YYSTYPE **
> %token SIMPLE_SYM /* SQL-2003-N */
> %token SKIP_GAP_EVENT_SYM
> %token SLAVE
> +%token SLOW
> %token SMALLINT /* SQL-2003-R */
> %token SNAPSHOT_SYM
> %token SOCKET_SYM
> @@ -1444,6 +1448,7 @@ bool my_yyoverflow(short **a, YYSTYPE **
> server_def server_options_list server_option
> definer_opt no_definer definer opt_compression
> opt_compression_algorithm
> + logs
can be removed, see comments below.
> END_OF_INPUT
>
> %type <NONE> call sp_proc_stmts sp_proc_stmts1 sp_proc_stmt
> @@ -11122,6 +11127,10 @@ show_engine_param:
> { Lex->sql_command= SQLCOM_SHOW_ENGINE_LOGS; }
> ;
>
> +logs:
> + LOGS_SYM
> + ;
> +
This is not necessary, should be removed, you can use LOGS_SYM directly
in the places that currently use logs.
> master_or_binary:
> MASTER_SYM
> | BINARY
> @@ -11248,6 +11257,18 @@ flush_option:
> opt_table_list {}
> | TABLES WITH READ_SYM LOCK_SYM
> { Lex->type|= REFRESH_TABLES | REFRESH_READ_LOCK; }
> + | ERROR_SYM logs
use LOGS_SYM directly here and below
> + { Lex->type|= REFRESH_ERROR_LOG; }
> + | ENGINE_SYM logs
> + { Lex->type|= REFRESH_ENGINE_LOG; }
> + | GENERAL logs
> + { Lex->type|= REFRESH_GENERAL_LOG; }
> + | SLOW logs
> + { Lex->type|= REFRESH_SLOW_LOG; }
> + | BINARY logs
> + { Lex->type|= REFRESH_BINARY_LOG; }
> + | RELAY logs
> + { Lex->type|= REFRESH_RELAY_LOG; }
> | QUERY_SYM CACHE_SYM
> { Lex->type|= REFRESH_QUERY_CACHE_FREE; }
> | HOSTS_SYM
> @@ -12421,6 +12442,7 @@ keyword_sp:
> | ENUM {}
> | ENGINE_SYM {}
> | ENGINES_SYM {}
> + | ERROR_SYM {}
> | ERRORS {}
> | ESCAPE_SYM {}
> | EVENT_SYM {}
> @@ -12550,6 +12572,7 @@ keyword_sp:
> | REDO_BUFFER_SIZE_SYM {}
> | REDOFILE_SYM {}
> | REDUNDANT_SYM {}
> + | RELAY {}
> | RELAYLOG_SYM {}
> | RELAY_LOG_FILE_SYM {}
> | RELAY_LOG_POS_SYM {}
>