mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-23052 mysql_install_db.exe can run on existing non-empty directory,
and remove it on error Disable existing non-empty datadir for mysql_install_db.exe
This commit is contained in:
@ -399,8 +399,8 @@ static int register_service()
|
|||||||
|
|
||||||
static void clean_directory(const char *dir)
|
static void clean_directory(const char *dir)
|
||||||
{
|
{
|
||||||
char dir2[MAX_PATH+2];
|
char dir2[MAX_PATH + 4]= {};
|
||||||
*(strmake_buf(dir2, dir)+1)= 0;
|
snprintf(dir2, MAX_PATH+2, "%s\\*", dir);
|
||||||
|
|
||||||
SHFILEOPSTRUCT fileop;
|
SHFILEOPSTRUCT fileop;
|
||||||
fileop.hwnd= NULL; /* no status display */
|
fileop.hwnd= NULL; /* no status display */
|
||||||
@ -551,7 +551,7 @@ static int create_db_instance()
|
|||||||
DWORD cwd_len= MAX_PATH;
|
DWORD cwd_len= MAX_PATH;
|
||||||
char cmdline[3*MAX_PATH];
|
char cmdline[3*MAX_PATH];
|
||||||
FILE *in;
|
FILE *in;
|
||||||
bool cleanup_datadir= true;
|
bool created_datadir= false;
|
||||||
DWORD last_error;
|
DWORD last_error;
|
||||||
|
|
||||||
verbose("Running bootstrap");
|
verbose("Running bootstrap");
|
||||||
@ -560,7 +560,11 @@ static int create_db_instance()
|
|||||||
|
|
||||||
/* Create datadir and datadir/mysql, if they do not already exist. */
|
/* Create datadir and datadir/mysql, if they do not already exist. */
|
||||||
|
|
||||||
if (!CreateDirectory(opt_datadir, NULL) && (GetLastError() != ERROR_ALREADY_EXISTS))
|
if (CreateDirectory(opt_datadir, NULL))
|
||||||
|
{
|
||||||
|
created_datadir= true;
|
||||||
|
}
|
||||||
|
else if (GetLastError() != ERROR_ALREADY_EXISTS)
|
||||||
{
|
{
|
||||||
last_error = GetLastError();
|
last_error = GetLastError();
|
||||||
switch(last_error)
|
switch(last_error)
|
||||||
@ -597,9 +601,11 @@ static int create_db_instance()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PathIsDirectoryEmpty(opt_datadir))
|
if (!PathIsDirectoryEmpty(opt_datadir))
|
||||||
{
|
{
|
||||||
cleanup_datadir= false;
|
fprintf(stderr,"ERROR : Data directory %s is not empty."
|
||||||
|
" Only new or empty existing directories are accepted for --datadir\n",opt_datadir);
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!CreateDirectory("mysql",NULL))
|
if (!CreateDirectory("mysql",NULL))
|
||||||
@ -735,10 +741,12 @@ static int create_db_instance()
|
|||||||
}
|
}
|
||||||
|
|
||||||
end:
|
end:
|
||||||
if (ret && cleanup_datadir)
|
if (ret)
|
||||||
{
|
{
|
||||||
SetCurrentDirectory(cwd);
|
SetCurrentDirectory(cwd);
|
||||||
clean_directory(opt_datadir);
|
clean_directory(opt_datadir);
|
||||||
|
if (created_datadir)
|
||||||
|
RemoveDirectory(opt_datadir);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user