diff options
author | Sergei Golubchik <serg@mariadb.org> | 2021-02-01 13:49:33 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2021-02-01 13:49:33 +0100 |
commit | 60ea09eae6f464e8ec483f4d31f7b910a8451c28 (patch) | |
tree | 7b79f55a96c8bc9dc3f0353cc08f43b825fe8707 /client/mysqldump.c | |
parent | 59eda73eff1a22ac0373d818bc802c05e82b5449 (diff) | |
parent | ff5186fd2b1ed06ed40fe3d817b41326e3f943d5 (diff) | |
download | mariadb-git-60ea09eae6f464e8ec483f4d31f7b910a8451c28.tar.gz |
Merge branch '10.2' into 10.3
Diffstat (limited to 'client/mysqldump.c')
-rw-r--r-- | client/mysqldump.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c index e8601e5f7d5..20f8278c9c2 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -1080,6 +1080,20 @@ static int get_options(int *argc, char ***argv) if ((ho_error= handle_options(argc, argv, my_long_options, get_one_option))) return(ho_error); + /* + Dumping under --system=stats with --replace or --inser-ignore is safe and will not + retult into race condition. Otherwise dump only structure and ignore data by default + while dumping. + */ + if (!(opt_system & OPT_SYSTEM_STATS) && !(opt_ignore || opt_replace_into)) + { + if (my_hash_insert(&ignore_data, + (uchar*) my_strdup("mysql.innodb_index_stats", MYF(MY_WME))) || + my_hash_insert(&ignore_data, + (uchar*) my_strdup("mysql.innodb_table_stats", MYF(MY_WME)))) + return(EX_EOM); + } + if (opt_system & OPT_SYSTEM_ALL) opt_system|= ~0; @@ -4792,7 +4806,7 @@ static int dump_all_servers() static int dump_all_stats() { - my_bool prev_no_create_info; + my_bool prev_no_create_info, prev_opt_replace_into; if (mysql_select_db(mysql, "mysql")) { @@ -4800,6 +4814,8 @@ static int dump_all_stats() return 1; /* If --force */ } fprintf(md_result_file,"\nUSE mysql;\n"); + prev_opt_replace_into= opt_replace_into; + opt_replace_into|= !opt_ignore; prev_no_create_info= opt_no_create_info; opt_no_create_info= 1; /* don't overwrite recreate tables */ /* EITS added in 10.0.1 */ @@ -4818,6 +4834,7 @@ static int dump_all_stats() dump_table("innodb_table_stats", "mysql", NULL, 0); } opt_no_create_info= prev_no_create_info; + opt_replace_into= prev_opt_replace_into; return 0; } @@ -4828,12 +4845,14 @@ static int dump_all_stats() static int dump_all_timezones() { - my_bool opt_prev_no_create_info; + my_bool opt_prev_no_create_info, opt_prev_replace_into; if (mysql_select_db(mysql, "mysql")) { DB_error(mysql, "when selecting the database"); return 1; /* If --force */ } + opt_prev_replace_into= opt_replace_into; + opt_replace_into|= !opt_ignore; opt_prev_no_create_info= opt_no_create_info; opt_no_create_info= 1; fprintf(md_result_file,"\nUSE mysql;\n"); @@ -4843,6 +4862,7 @@ static int dump_all_timezones() dump_table("time_zone_transition", "mysql", NULL, 0); dump_table("time_zone_transition_type", "mysql", NULL, 0); opt_no_create_info= opt_prev_no_create_info; + opt_replace_into= opt_prev_replace_into; return 0; } |