diff options
Diffstat (limited to 'mysql-dump-log-tables.patch')
-rw-r--r-- | mysql-dump-log-tables.patch | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/mysql-dump-log-tables.patch b/mysql-dump-log-tables.patch new file mode 100644 index 0000000..b54162f --- /dev/null +++ b/mysql-dump-log-tables.patch @@ -0,0 +1,129 @@ +mysqldump assumed the existence of the general_log and slow_log +tables in the mysql database. It failed if invoked to dump tables +from an older server where these tables do not exist. + +Upstream bug report http://bugs.mysql.com/bug.php?id=65670 +RHBZ#877577 + +diff -up mysql-5.1.70/client/mysqldump.c.bug877557upstream mysql-5.1.70/client/mysqldump.c +--- mysql-5.1.70/client/mysqldump.c.bug877557upstream 2013-05-13 15:33:33.000000000 +0200 ++++ mysql-5.1.70/client/mysqldump.c 2013-08-01 12:38:12.225403859 +0200 +@@ -84,14 +84,6 @@ + #define IGNORE_DATA 0x01 /* don't dump data for this table */ + #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, + const char *option_value); +@@ -2432,6 +2424,15 @@ static uint dump_routines_for_db(char *d + DBUG_RETURN(0); + } + ++/* 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 (!my_strcasecmp(charset_info, db, "mysql")) && ++ (!my_strcasecmp(charset_info, table, "general_log") || ++ !my_strcasecmp(charset_info, table, "slow_log")); ++} ++ + /* + get_table_structure -- retrievs database structure, prints out corresponding + CREATE statement and fills out insert_pat if the table is the type we will +@@ -4282,7 +4283,8 @@ static int dump_all_tables_in_db(char *d + char table_buff[NAME_LEN*2+3]; + char hash_key[2*NAME_LEN+2]; /* "db.tablename" */ + char *afterdot; +- int using_mysql_db= my_strcasecmp(&my_charset_latin1, database, "mysql"); ++ my_bool general_log_table_exists= 0, slow_log_table_exists=0; ++ int using_mysql_db= !my_strcasecmp(charset_info, database, "mysql"); + DBUG_ENTER("dump_all_tables_in_db"); + + afterdot= strmov(hash_key, database); +@@ -4293,22 +4295,6 @@ static int dump_all_tables_in_db(char *d + if (opt_xml) + 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) + { + DYNAMIC_STRING query; +@@ -4352,6 +4338,26 @@ static int dump_all_tables_in_db(char *d + } + } + } ++ else ++ { ++ /* ++ If general_log and slow_log exists in the 'mysql' database, ++ we should dump the table structure. But we cannot ++ call get_table_structure() here as 'LOCK TABLES' query got executed ++ above on the session and that 'LOCK TABLES' query does not contain ++ 'general_log' and 'slow_log' tables. (you cannot acquire lock ++ on log tables). Hence mark the existence of these log tables here and ++ after 'UNLOCK TABLES' query is executed on the session, get the table ++ structure from server and dump it in the file. ++ */ ++ if (using_mysql_db) ++ { ++ if (!my_strcasecmp(charset_info, table, "general_log")) ++ general_log_table_exists= 1; ++ else if (!my_strcasecmp(charset_info, table, "slow_log")) ++ slow_log_table_exists= 1; ++ } ++ } + } + if (opt_events && mysql_get_server_version(mysql) >= 50106) + { +@@ -4370,7 +4376,26 @@ static int dump_all_tables_in_db(char *d + } + if (lock_tables) + VOID(mysql_query_with_error_report(mysql, 0, "UNLOCK TABLES")); +- if (flush_privileges && using_mysql_db == 0) ++ if (using_mysql_db) ++ { ++ char table_type[NAME_LEN]; ++ char ignore_flag; ++ if (general_log_table_exists) ++ { ++ if (!get_table_structure((char *) "general_log", ++ database, table_type, &ignore_flag) ) ++ verbose_msg("-- Warning: get_table_structure() failed with some internal " ++ "error for 'general_log' table\n"); ++ } ++ if (slow_log_table_exists) ++ { ++ if (!get_table_structure((char *) "slow_log", ++ database, table_type, &ignore_flag) ) ++ verbose_msg("-- Warning: get_table_structure() failed with some internal " ++ "error for 'slow_log' table\n"); ++ } ++ } ++ if (flush_privileges && using_mysql_db) + { + fprintf(md_result_file,"\n--\n-- Flush Grant Tables \n--\n"); + fprintf(md_result_file,"\n/*! FLUSH PRIVILEGES */;\n"); |