diff options
-rw-r--r-- | VC++Files/client/mysql_upgrade.dsp | 71 | ||||
-rw-r--r-- | VC++Files/client/mysql_upgrade_ia64.dsp | 77 | ||||
-rw-r--r-- | VC++Files/mysql.dsw | 25 | ||||
-rw-r--r-- | VC++Files/mysql_ia64.dsw | 20 | ||||
-rw-r--r-- | client/Makefile.am | 7 | ||||
-rw-r--r-- | client/mysql_upgrade.c | 208 |
6 files changed, 406 insertions, 2 deletions
diff --git a/VC++Files/client/mysql_upgrade.dsp b/VC++Files/client/mysql_upgrade.dsp new file mode 100644 index 00000000000..a039098d639 --- /dev/null +++ b/VC++Files/client/mysql_upgrade.dsp @@ -0,0 +1,71 @@ +# Microsoft Developer Studio Project File - Name="mysql_upgrade" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=mysql_upgrade - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mysql_upgrade.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mysql_upgrade.mak" CFG="mysql_upgrade - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mysql_upgrade - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "mysql_upgrade___Win32_Release" +# PROP BASE Intermediate_Dir "mysql_upgrade___Win32_Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "mysql_upgrade___Win32_Release" +# PROP Intermediate_Dir "mysql_upgrade___Win32_Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /D "NDEBUG" /D "DBUG_OFF" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /Fp"Release/mysql_upgrade.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c +# ADD BASE RSC /l 0x416 /d "NDEBUG" +# ADD RSC /l 0x416 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib zlib.lib /nologo /subsystem:console /pdb:"release/mysql_upgrade.pdb" /machine:I386 /out:"../client_release/mysql_upgrade.exe" /libpath:"..\lib_release\\" +# SUBTRACT LINK32 /pdb:none +# Begin Target + +# Name "mysql_upgrade - Win32 Release" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\mysql_upgrade.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/VC++Files/client/mysql_upgrade_ia64.dsp b/VC++Files/client/mysql_upgrade_ia64.dsp new file mode 100644 index 00000000000..a116f3f06c3 --- /dev/null +++ b/VC++Files/client/mysql_upgrade_ia64.dsp @@ -0,0 +1,77 @@ +# Microsoft Developer Studio Project File - Name="mysql_upgrade" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=mysql_upgrade - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "mysql_upgrade.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "mysql_upgrade.mak" CFG="mysql_upgrade - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "mysql_upgrade - WinIA64 Release" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "mysql - WinIA64 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "mysql_upgrade___WinIA64_Release" +# PROP BASE Intermediate_Dir "mysql_upgrade___WinIA64_Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "mysql_upgrade___WinIA64_Release" +# PROP Intermediate_Dir "mysql_upgrade___WinIA64_Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN64" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /I "../include" /D"NDEBUG" /D"DBUG_OFF" /D"_CONSOLE" /D"_MBCS" /D"_WINDOWS" /Fp"Release/mysql_upgrade.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c /O2 /G2 /EHsc /D"_IA64_" /Zi /D"WIN64" /D"WIN32" /D"_AFX_NO_DAO_SUPPORT" /Wp64 /Zm600 +# ADD BASE RSC /l 0x416 /d "NDEBUG" +# ADD RSC /l 0x416 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:IA64 +# ADD LINK32 mysqlclient.lib wsock32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib zlib.lib /nologo /subsystem:console /pdb:"release/mysql_upgrade.pdb" /machine:IA64 /out:"../client_release/mysql_upgrade.exe" /libpath:"..\lib_release\\" /incremental:no +# SUBTRACT LINK32 + +!ENDIF + +# Begin Target + +# Name "mysql_upgrade - WinIA64 Release" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\mysql_upgrade.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/VC++Files/mysql.dsw b/VC++Files/mysql.dsw index 36e3e1ae10c..b31b0dd0d29 100644 --- a/VC++Files/mysql.dsw +++ b/VC++Files/mysql.dsw @@ -339,6 +339,27 @@ Package=<4> ############################################################################### +Project: "mysql_upgrade"=".\client\mysql_upgrade.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name mysqlclient + End Project Dependency + Begin Project Dependency + Project_Dep_Name zlib + End Project Dependency + Begin Project Dependency + Project_Dep_Name mysys + End Project Dependency +}}} + +############################################################################### + Project: "mysqlbinlog"=".\mysqlbinlog\mysqlbinlog.dsp" - Package Owner=<4> Package=<5> @@ -415,6 +436,8 @@ Package=<4> End Project Dependency Begin Project Dependency Project_Dep_Name mysqladmin + Begin Project Dependency + Project_Dep_Name myqsl_upgrade End Project Dependency Begin Project Dependency Project_Dep_Name mysqldump @@ -802,6 +825,8 @@ Package=<4> End Project Dependency Begin Project Dependency Project_Dep_Name mysqladmin + Begin Project Dependency + Project_Dep_Name mysql_upgrade End Project Dependency Begin Project Dependency Project_Dep_Name mysql_client_test diff --git a/VC++Files/mysql_ia64.dsw b/VC++Files/mysql_ia64.dsw index 1e441107c93..96878cd3651 100644 --- a/VC++Files/mysql_ia64.dsw +++ b/VC++Files/mysql_ia64.dsw @@ -436,6 +436,24 @@ Package=<4> ############################################################################### +Project: "mysql_upgrade"=".\client\mysql_upgrade_ia64.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ + Begin Project Dependency + Project_Dep_Name mysqlclient + End Project Dependency + Begin Project Dependency + Project_Dep_Name zlib + End Project Dependency +}}} + +############################################################################### + Project: "mysqlbinlog"=".\mysqlbinlog\mysqlbinlog_ia64.dsp" - Package Owner=<4> Package=<5> @@ -500,6 +518,8 @@ Package=<4> End Project Dependency Begin Project Dependency Project_Dep_Name mysqladmin_ia64 + Begin Project Dependency + Project_Dep_Name mysql_upgrade_ia64 End Project Dependency Begin Project Dependency Project_Dep_Name mysqldump diff --git a/client/Makefile.am b/client/Makefile.am index 970ca744146..66f0ce9ad6d 100644 --- a/client/Makefile.am +++ b/client/Makefile.am @@ -39,7 +39,7 @@ LDADD= @CLIENT_EXTRA_LDFLAGS@ $(CLIENT_THREAD_LIBS) \ bin_PROGRAMS = mysql mysqladmin mysqlcheck mysqlshow \ mysqldump mysqlimport mysqltest mysqlbinlog \ mysqltestmanagerc mysqltestmanager-pwgen \ - mysqlslap + mysqlslap mysql_upgrade noinst_HEADERS = sql_string.h completion_hash.h my_readline.h \ client_priv.h mysql_SOURCES = mysql.cc readline.cc sql_string.cc completion_hash.cc @@ -72,11 +72,14 @@ mysqlslap_SOURCES= mysqlslap.c \ mysqldump_SOURCES= mysqldump.c my_user.c $(yassl_dummy_link_fix) mysqlimport_SOURCES= mysqlimport.c \ $(yassl_dummy_link_fix) +mysql_upgrade_SOURCES= mysql_upgrade.c $(yassl_dummy_link_fix) sql_src=log_event.h mysql_priv.h log_event.cc my_decimal.h my_decimal.cc strings_src=decimal.c # Fix for mit-threads -DEFS = -DUNDEF_THREADS_HACK +DEFS = -DUNDEF_THREADS_HACK \ + -DDEFAULT_MYSQL_HOME="\"$(prefix)\"" \ + -DDATADIR="\"$(localstatedir)\"" EXTRA_DIST = get_password.c cmakelists.txt link_sources: diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c new file mode 100644 index 00000000000..d0a0a0cdcd2 --- /dev/null +++ b/client/mysql_upgrade.c @@ -0,0 +1,208 @@ +/* Copyright (C) 2000 MySQL AB + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include <stdlib.h> +#include "client_priv.h" +#include <my_dir.h> + +static my_bool opt_force=0, opt_verbose=0; +static char *user= (char*)"root", *basedir=0, *datadir=0; + +static struct my_option my_long_options[] = +{ + {"help", '?', "Display this help message and exit.", 0, 0, 0, GET_NO_ARG, + NO_ARG, 0, 0, 0, 0, 0, 0}, + {"basedir", 'b', "Specifies the directory where MySQL is installed", (gptr*) &basedir, + (gptr*) &basedir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"datadir", 'd', "Specifies the data directory", (gptr*) &datadir, + (gptr*) &datadir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"force", 'f', "Continue even if we get an sql-error.", + (gptr*) &opt_force, (gptr*) &opt_force, 0, GET_BOOL, NO_ARG, 0, 0, + 0, 0, 0, 0}, + {"user", 'u', "User for login if not current user.", (gptr*) &user, + (gptr*) &user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, + {"verbose", 'v', "Display more output about the process", 0, 0, 0, GET_NO_ARG, + NO_ARG, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} +}; +static const char *load_default_groups[] = { "mysql_upgrade", "client", 0 }; + +#include <help_end.h> + +static my_bool +get_one_option(int optid, const struct my_option *opt __attribute__((unused)), + char *argument __attribute__((unused))) +{ + switch(optid) { + case '?': + puts("MySQL utility script to upgrade database to the current server version\n"); + puts("\n"); + my_print_help(my_long_options); + exit(0); + case 'f': + opt_force= TRUE; + break; + case 'v': + opt_verbose= TRUE; + break; + default:; + }; + return 0; +} + + +static my_bool test_file_exists_res(const char *dir, const char *fname, char *buffer) +{ + MY_STAT stat_info; + + if (fname) + sprintf(buffer, "%s/%s", dir, fname); + else + strcpy(buffer, dir); + return my_stat(buffer, &stat_info, MYF(0)) != 0; +} + + +static my_bool test_file_exists(const char *dir, const char *fname) +{ + char path[1024]; + return test_file_exists_res(dir, fname, path); +} + + +int main(int argc, char **argv) +{ + char bindir[1024]; + char datadir_buf[1024]; + char mysqlcheck_line[1024]; + char check_file_name[1024]; + int check_file; + char fix_priv_tables_cmd[1024]; + char script_line[1024]; + int error; +#ifdef __NETWARE__ + setscreenmode(SCR_AUTOCLOSE_ON_EXIT); +#endif + + load_defaults("my", load_default_groups, &argc, &argv); + + if ((error= handle_options(&argc, &argv, my_long_options, get_one_option))) + exit(error); + + if (!basedir) + { + if (test_file_exists("./share/mysql/english", "errmsg.sys") + && (test_file_exists("./bin", "mysqld") || + test_file_exists("./libexec", "mysqld"))) + { + getcwd(bindir, sizeof(bindir)); + } + else + { + strcpy(bindir, DEFAULT_MYSQL_HOME); + } + } + else + { + strcpy(bindir, basedir); + } + + if (!datadir) + { + datadir= datadir_buf; + if (test_file_exists(bindir,"data/mysql")) + { + sprintf(datadir, "%s/data", bindir); + } + else if (test_file_exists(bindir, "var/mysql")) + { + sprintf(datadir, "%s/var", bindir); + } + else + strcpy(datadir, DATADIR); + } + + strcat(bindir, "/bin"); + + if (!test_file_exists(bindir, "mysqlcheck")) + { + printf("Can't find program '%s/mysqlcheck'\n", bindir); + puts("Please restart with --basedir=mysql-install-directory\n"); + exit(1); + } + + if (!test_file_exists(datadir, "mysql/user.frm")) + { + puts("Can't find data directory. Please restart with --datadir=path-to-data-dir\n"); + exit(1); + } + + if (test_file_exists_res(datadir, "mysql_upgrade_info", check_file_name) && !opt_force) + { + char chf_buffer[10]; + int b_read; + check_file= open(check_file_name, O_RDONLY); + b_read= read(check_file, chf_buffer, sizeof(chf_buffer)); + chf_buffer[b_read]= 0; + if (strcmp(chf_buffer, VERSION)) + { + if (opt_verbose) + puts("mysql_upgrade already done for this version\n"); + goto fix_priv_tables; + } + close(check_file); + } + + sprintf(mysqlcheck_line, + "%s/mysqlcheck --check-upgrade --all-databases --auto-repair --user=%s", + bindir, user); + if (opt_verbose) + printf("Running %s\n", mysqlcheck_line); + system(mysqlcheck_line); + + check_file= open(check_file_name, O_CREAT | O_WRONLY); + write(check_file, VERSION, strlen(VERSION)); + close(check_file); + +fix_priv_tables: + if (!test_file_exists(bindir, "mysql")) + { + puts("Could not find MySQL command-line client (mysql).\n"); + puts("Please use --basedir to specify the directory where MySQL is installed.\n"); + exit(1); + } + + if (!test_file_exists_res(basedir, + "support_files/mysql_fix_privilege_tables.sql", script_line) && + !test_file_exists_res(basedir, + "share/mysql_fix_privileges_tables.sql", script_line) && + !test_file_exists_res(basedir, + "share/mysql/mysql_fix_privilege_tables.sql", script_line) && + !test_file_exists_res(basedir, + "scripts/mysql_fix_privilege_tables.sql", script_line) && + !test_file_exists_res("/usr/local/mysql/share/mysql", + "mysql_fix_privilege_tables.sql", script_line)) + { + puts("Could not find file mysql_fix_privilege_tables.sql\n"); + puts("Please use --basedir to specify the directory where MySQL is installed\n"); + exit(1); + } + + sprintf(fix_priv_tables_cmd, "%s/mysql < %s", bindir, script_line); + system(fix_priv_tables_cmd); + + return error; +} /* main */ |