mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Bug #11754178 45740: MYSQLDUMP DOESN'T DUMP GENERAL_LOG AND SLOW_QUERY
CAUSES RESTORE PROBLEM Merging the fix from mysql-5.1 to mysql-5.5 mysql-test/t/mysqldump.test: There is a difference in the testcase which is added as part of this fix, when compared with mysql-5.1. In mysql-5.5 and mysql-5.6, "DROP mysql database" fails by enabling logging, hence removed those lines.
This commit is contained in:
@ -85,6 +85,15 @@
|
|||||||
#define IGNORE_DATA 0x01 /* don't dump data for this table */
|
#define IGNORE_DATA 0x01 /* don't dump data for this table */
|
||||||
#define IGNORE_INSERT_DELAYED 0x02 /* table doesn't support INSERT DELAYED */
|
#define IGNORE_INSERT_DELAYED 0x02 /* table doesn't support INSERT DELAYED */
|
||||||
|
|
||||||
|
/* general_log or slow_log tables under mysql database */
|
||||||
|
static inline my_bool general_log_or_slow_log_tables(const char *db,
|
||||||
|
const char *table)
|
||||||
|
{
|
||||||
|
return (strcmp(db, "mysql") == 0) &&
|
||||||
|
((strcmp(table, "general_log") == 0) ||
|
||||||
|
(strcmp(table, "slow_log") == 0));
|
||||||
|
}
|
||||||
|
|
||||||
static void add_load_option(DYNAMIC_STRING *str, const char *option,
|
static void add_load_option(DYNAMIC_STRING *str, const char *option,
|
||||||
const char *option_value);
|
const char *option_value);
|
||||||
static ulong find_set(TYPELIB *lib, const char *x, uint length,
|
static ulong find_set(TYPELIB *lib, const char *x, uint length,
|
||||||
@ -2451,6 +2460,7 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
"TABLE_SCHEMA = '%s' AND TABLE_NAME = '%s'";
|
"TABLE_SCHEMA = '%s' AND TABLE_NAME = '%s'";
|
||||||
FILE *sql_file= md_result_file;
|
FILE *sql_file= md_result_file;
|
||||||
int len;
|
int len;
|
||||||
|
my_bool is_log_table;
|
||||||
MYSQL_RES *result;
|
MYSQL_RES *result;
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
DBUG_ENTER("get_table_structure");
|
DBUG_ENTER("get_table_structure");
|
||||||
@ -2535,9 +2545,12 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
/*
|
/*
|
||||||
Even if the "table" is a view, we do a DROP TABLE here. The
|
Even if the "table" is a view, we do a DROP TABLE here. The
|
||||||
view-specific code below fills in the DROP VIEW.
|
view-specific code below fills in the DROP VIEW.
|
||||||
|
We will skip the DROP TABLE for general_log and slow_log, since
|
||||||
|
those stmts will fail, in case we apply dump by enabling logging.
|
||||||
*/
|
*/
|
||||||
fprintf(sql_file, "DROP TABLE IF EXISTS %s;\n",
|
if (!general_log_or_slow_log_tables(db, table))
|
||||||
opt_quoted_table);
|
fprintf(sql_file, "DROP TABLE IF EXISTS %s;\n",
|
||||||
|
opt_quoted_table);
|
||||||
check_io(sql_file);
|
check_io(sql_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2649,12 +2662,25 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
|||||||
|
|
||||||
row= mysql_fetch_row(result);
|
row= mysql_fetch_row(result);
|
||||||
|
|
||||||
fprintf(sql_file, (opt_compatible_mode & 3) ? "%s;\n" :
|
is_log_table= general_log_or_slow_log_tables(db, table);
|
||||||
"/*!40101 SET @saved_cs_client = @@character_set_client */;\n"
|
if (is_log_table)
|
||||||
"/*!40101 SET character_set_client = utf8 */;\n"
|
row[1]+= 13; /* strlen("CREATE TABLE ")= 13 */
|
||||||
"%s;\n"
|
if (opt_compatible_mode & 3)
|
||||||
"/*!40101 SET character_set_client = @saved_cs_client */;\n",
|
{
|
||||||
row[1]);
|
fprintf(sql_file,
|
||||||
|
is_log_table ? "CREATE TABLE IF NOT EXISTS %s;\n" : "%s;\n",
|
||||||
|
row[1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(sql_file,
|
||||||
|
"/*!40101 SET @saved_cs_client = @@character_set_client */;\n"
|
||||||
|
"/*!40101 SET character_set_client = utf8 */;\n"
|
||||||
|
"%s%s;\n"
|
||||||
|
"/*!40101 SET character_set_client = @saved_cs_client */;\n",
|
||||||
|
is_log_table ? "CREATE TABLE IF NOT EXISTS " : "",
|
||||||
|
row[1]);
|
||||||
|
}
|
||||||
|
|
||||||
check_io(sql_file);
|
check_io(sql_file);
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
@ -4263,6 +4289,22 @@ static int dump_all_tables_in_db(char *database)
|
|||||||
if (opt_xml)
|
if (opt_xml)
|
||||||
print_xml_tag(md_result_file, "", "\n", "database", "name=", database, NullS);
|
print_xml_tag(md_result_file, "", "\n", "database", "name=", database, NullS);
|
||||||
|
|
||||||
|
if (strcmp(database, "mysql") == 0)
|
||||||
|
{
|
||||||
|
char table_type[NAME_LEN];
|
||||||
|
char ignore_flag;
|
||||||
|
uint num_fields;
|
||||||
|
num_fields= get_table_structure((char *) "general_log",
|
||||||
|
database, table_type, &ignore_flag);
|
||||||
|
if (num_fields == 0)
|
||||||
|
verbose_msg("-- Warning: get_table_structure() failed with some internal "
|
||||||
|
"error for 'general_log' table\n");
|
||||||
|
num_fields= get_table_structure((char *) "slow_log",
|
||||||
|
database, table_type, &ignore_flag);
|
||||||
|
if (num_fields == 0)
|
||||||
|
verbose_msg("-- Warning: get_table_structure() failed with some internal "
|
||||||
|
"error for 'slow_log' table\n");
|
||||||
|
}
|
||||||
if (lock_tables)
|
if (lock_tables)
|
||||||
{
|
{
|
||||||
DYNAMIC_STRING query;
|
DYNAMIC_STRING query;
|
||||||
|
@ -5205,3 +5205,48 @@ DROP DATABASE b12809202_db;
|
|||||||
# Delete all existing binary logs.
|
# Delete all existing binary logs.
|
||||||
#
|
#
|
||||||
RESET MASTER;
|
RESET MASTER;
|
||||||
|
#
|
||||||
|
# Bug#45740 MYSQLDUMP DOESN'T DUMP GENERAL_LOG AND SLOW_QUERY CAUSES RESTORE PROBLEM
|
||||||
|
#
|
||||||
|
SET @old_log_output_state= @@global.log_output;
|
||||||
|
SET @old_general_log_state= @@global.general_log;
|
||||||
|
SET @old_slow_query_log_state= @@global.slow_query_log;
|
||||||
|
call mtr.add_suppression("Failed to write to mysql.general_log");
|
||||||
|
SET @@global.log_output="TABLE";
|
||||||
|
SET @@global.general_log='OFF';
|
||||||
|
SET @@global.slow_query_log='OFF';
|
||||||
|
DROP DATABASE mysql;
|
||||||
|
Warnings:
|
||||||
|
Error 1146 Table 'mysql.proc' doesn't exist
|
||||||
|
Error 1146 Table 'mysql.event' doesn't exist
|
||||||
|
SHOW CREATE TABLE mysql.general_log;
|
||||||
|
Table Create Table
|
||||||
|
general_log CREATE TABLE `general_log` (
|
||||||
|
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
`user_host` mediumtext NOT NULL,
|
||||||
|
`thread_id` int(11) NOT NULL,
|
||||||
|
`server_id` int(10) unsigned NOT NULL,
|
||||||
|
`command_type` varchar(64) NOT NULL,
|
||||||
|
`argument` mediumtext NOT NULL
|
||||||
|
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
|
||||||
|
SHOW CREATE TABLE mysql.slow_log;
|
||||||
|
Table Create Table
|
||||||
|
slow_log CREATE TABLE `slow_log` (
|
||||||
|
`start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
`user_host` mediumtext NOT NULL,
|
||||||
|
`query_time` time NOT NULL,
|
||||||
|
`lock_time` time NOT NULL,
|
||||||
|
`rows_sent` int(11) NOT NULL,
|
||||||
|
`rows_examined` int(11) NOT NULL,
|
||||||
|
`db` varchar(512) NOT NULL,
|
||||||
|
`last_insert_id` int(11) NOT NULL,
|
||||||
|
`insert_id` int(11) NOT NULL,
|
||||||
|
`server_id` int(10) unsigned NOT NULL,
|
||||||
|
`sql_text` mediumtext NOT NULL
|
||||||
|
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
|
||||||
|
SET @@global.log_output= @old_log_output_state;
|
||||||
|
SET @@global.slow_query_log= @old_slow_query_log_state;
|
||||||
|
SET @@global.general_log= @old_general_log_state;
|
||||||
|
#
|
||||||
|
# End of 5.1 tests
|
||||||
|
#
|
||||||
|
@ -2367,3 +2367,30 @@ RESET MASTER;
|
|||||||
|
|
||||||
# Wait till we reached the initial number of concurrent sessions
|
# Wait till we reached the initial number of concurrent sessions
|
||||||
--source include/wait_until_count_sessions.inc
|
--source include/wait_until_count_sessions.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#45740 MYSQLDUMP DOESN'T DUMP GENERAL_LOG AND SLOW_QUERY CAUSES RESTORE PROBLEM
|
||||||
|
--echo #
|
||||||
|
SET @old_log_output_state= @@global.log_output;
|
||||||
|
SET @old_general_log_state= @@global.general_log;
|
||||||
|
SET @old_slow_query_log_state= @@global.slow_query_log;
|
||||||
|
|
||||||
|
call mtr.add_suppression("Failed to write to mysql.general_log");
|
||||||
|
--exec $MYSQL_DUMP -uroot --all-databases > $MYSQLTEST_VARDIR/tmp/bug45740.sql
|
||||||
|
# Make log_output as table and disabling general_log and slow_log
|
||||||
|
SET @@global.log_output="TABLE";
|
||||||
|
SET @@global.general_log='OFF';
|
||||||
|
SET @@global.slow_query_log='OFF';
|
||||||
|
DROP DATABASE mysql;
|
||||||
|
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug45740.sql
|
||||||
|
SHOW CREATE TABLE mysql.general_log;
|
||||||
|
SHOW CREATE TABLE mysql.slow_log;
|
||||||
|
--remove_file $MYSQLTEST_VARDIR/tmp/bug45740.sql
|
||||||
|
|
||||||
|
SET @@global.log_output= @old_log_output_state;
|
||||||
|
SET @@global.slow_query_log= @old_slow_query_log_state;
|
||||||
|
SET @@global.general_log= @old_general_log_state;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # End of 5.1 tests
|
||||||
|
--echo #
|
||||||
|
Reference in New Issue
Block a user