From 93dea7da8302f2518b70175d3d4d8075b878f545 Mon Sep 17 00:00:00 2001 From: Julius Goryavsky Date: Tue, 12 May 2020 13:29:17 +0200 Subject: MDEV-20401: Server incorrectly auto-sets lower_case_file_system value Server auto-sets lower_case_file_system value based on default datadir's behavior instead of instead of using the directory specified by the user through the configuration file or command line options. This patch fixes this problem. --- sql/mysqld.cc | 8 +++++--- sql/sys_vars.cc | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 594f50b72f2..6a5162e2f03 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -4538,8 +4538,10 @@ static int init_common_variables() get corrupted if accesses with names of different case. */ DBUG_PRINT("info", ("lower_case_table_names: %d", lower_case_table_names)); + if(mysql_real_data_home_ptr == NULL || *mysql_real_data_home_ptr == 0) + mysql_real_data_home_ptr= mysql_real_data_home; SYSVAR_AUTOSIZE(lower_case_file_system, - test_if_case_insensitive(mysql_real_data_home)); + test_if_case_insensitive(mysql_real_data_home_ptr)); if (!lower_case_table_names && lower_case_file_system == 1) { if (lower_case_table_names_used) @@ -4556,7 +4558,7 @@ static int init_common_variables() { if (global_system_variables.log_warnings) sql_print_warning("Setting lower_case_table_names=2 because file " - "system for %s is case insensitive", mysql_real_data_home); + "system for %s is case insensitive", mysql_real_data_home_ptr); SYSVAR_AUTOSIZE(lower_case_table_names, 2); } } @@ -4567,7 +4569,7 @@ static int init_common_variables() sql_print_warning("lower_case_table_names was set to 2, even though your " "the file system '%s' is case sensitive. Now setting " "lower_case_table_names to 0 to avoid future problems.", - mysql_real_data_home); + mysql_real_data_home_ptr); SYSVAR_AUTOSIZE(lower_case_table_names, 0); } else diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 9f87c846fd0..9c1c7096460 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -818,7 +818,7 @@ static Sys_var_ulong Sys_connect_timeout( static Sys_var_charptr Sys_datadir( "datadir", "Path to the database root directory", - READ_ONLY GLOBAL_VAR(mysql_real_data_home_ptr), + PARSED_EARLY READ_ONLY GLOBAL_VAR(mysql_real_data_home_ptr), CMD_LINE(REQUIRED_ARG, 'h'), IN_FS_CHARSET, DEFAULT(mysql_real_data_home)); #ifndef DBUG_OFF -- cgit v1.2.1