summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2021-02-01 13:49:33 +0100
committerSergei Golubchik <serg@mariadb.org>2021-02-01 13:49:33 +0100
commit60ea09eae6f464e8ec483f4d31f7b910a8451c28 (patch)
tree7b79f55a96c8bc9dc3f0353cc08f43b825fe8707 /client
parent59eda73eff1a22ac0373d818bc802c05e82b5449 (diff)
parentff5186fd2b1ed06ed40fe3d817b41326e3f943d5 (diff)
downloadmariadb-git-60ea09eae6f464e8ec483f4d31f7b910a8451c28.tar.gz
Merge branch '10.2' into 10.3
Diffstat (limited to 'client')
-rw-r--r--client/mysqldump.c24
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;
}