summaryrefslogtreecommitdiffstats
path: root/mysql-dump-log-tables.patch
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-dump-log-tables.patch')
-rw-r--r--mysql-dump-log-tables.patch129
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");