mysqlmanagerc.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #define MANAGER_CLIENT_VERSION "1.4"
  14. #include <my_global.h>
  15. #include <mysql.h>
  16. #include <mysql_version.h>
  17. #include <mysqld_error.h>
  18. #include <my_sys.h>
  19. #include <m_string.h>
  20. #include <my_getopt.h>
  21. #include <stdarg.h>
  22. #include <sys/stat.h>
  23. #include <unistd.h>
  24. #ifndef MYSQL_MANAGER_PORT
  25. #define MYSQL_MANAGER_PORT 9305
  26. #endif
  27. static void die(const char* fmt, ...);
  28. const char* user="root",*host="localhost";
  29. char* pass=0;
  30. my_bool quiet=0;
  31. uint port=MYSQL_MANAGER_PORT;
  32. static const char *load_default_groups[]= { "mysqlmanagerc",0 };
  33. char** default_argv;
  34. MYSQL_MANAGER *manager;
  35. FILE* fp, *fp_out;
  36. static struct my_option my_long_options[] =
  37. {
  38.   {"host", 'h', "Connect to host.", (gptr*) &host, (gptr*) &host, 0,
  39.    GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
  40.   {"user", 'u', "User for login.", (gptr*) &user, (gptr*) &user, 0,
  41.    GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
  42.   {"password", 'p', "Password to use when connecting to server.",
  43.    0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
  44.   {"port", 'P', "Port number to use for connection.", (gptr*) &port,
  45.    (gptr*) &port, 0, GET_UINT, REQUIRED_ARG, MYSQL_MANAGER_PORT, 0, 0, 0, 0,
  46.    0},
  47.   {"help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG,
  48.    0, 0, 0, 0, 0, 0},
  49.   {"version", 'V', "Output version information and exit.",  0, 0, 0,
  50.    GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
  51.   {"quiet", 'q', "Suppress all normal output.", (gptr*) &quiet, (gptr*) &quiet,
  52.    0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
  53.   {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
  54. };
  55. static void die(const char* fmt, ...)
  56. {
  57.   va_list args;
  58.   DBUG_ENTER("die");
  59.   va_start(args, fmt);
  60.   if (fmt)
  61.   {
  62.     fprintf(stderr, "%s: ", my_progname);
  63.     vfprintf(stderr, fmt, args);
  64.     fprintf(stderr, "n");
  65.     fflush(stderr);
  66.   }
  67.   va_end(args);
  68.   exit(1);
  69. }
  70. static void print_version(void)
  71. {
  72.   printf("%s  Ver %s Distrib %s, for %s (%s)n",my_progname,
  73.  MANAGER_CLIENT_VERSION,
  74.  MYSQL_SERVER_VERSION,SYSTEM_TYPE,MACHINE_TYPE);
  75. }
  76. void usage()
  77. {
  78.   print_version();
  79.   printf("MySQL AB, by Sashan");
  80.   printf("This software comes with ABSOLUTELY NO WARRANTYnn");
  81.   printf("Command-line client for MySQL manager daemon.nn");
  82.   printf("Usage: %s [OPTIONS] < command_filen", my_progname);
  83.   my_print_help(my_long_options);
  84.   printf("  --no-defaults         Don't read default options from any options file.n");
  85.   my_print_variables(my_long_options);
  86. }
  87. static my_bool
  88. get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
  89.        char *argument)
  90. {
  91.   my_bool tty_password=0;
  92.   
  93.   switch (optid) {
  94.   case 'p':
  95.     if (argument)
  96.     {
  97.       my_free(pass, MYF(MY_ALLOW_ZERO_PTR));
  98.       pass= my_strdup(argument, MYF(MY_FAE));
  99.       while (*argument) *argument++= 'x'; /* Destroy argument */
  100.     }
  101.     else
  102.       tty_password=1;
  103.     break;
  104.   case 'V':
  105.     print_version();
  106.     exit(0);
  107.   case '?':
  108.     usage();
  109.     exit(0);
  110.   }
  111.   return 0;
  112. }
  113. int parse_args(int argc, char **argv)
  114. {
  115.   int ho_error;
  116.   load_defaults("my",load_default_groups,&argc,&argv);
  117.   default_argv= argv;
  118.   if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
  119.     exit(ho_error);
  120.   return 0;
  121. }
  122. int main(int argc, char** argv)
  123. {
  124.   MY_INIT(argv[0]);
  125.   fp=stdin;
  126.   fp_out=stdout;
  127.   parse_args(argc,argv);
  128.   if (!(manager=mysql_manager_init(0)))
  129.     die("Failed in mysql_manager_init()");
  130.   if (!mysql_manager_connect(manager,host,user,pass,port))
  131.     die("Could not connect to MySQL manager: %s (%d)",manager->last_error,
  132. manager->last_errno);
  133.   for (;!feof(fp);)
  134.   {
  135.     char buf[4096];
  136.     if (!fgets(buf,sizeof(buf),fp))
  137.       break;
  138.     if (!quiet)
  139.       fprintf(fp_out,"<<%s",buf);
  140.     if (mysql_manager_command(manager,buf,strlen(buf)))
  141.       die("Error in command: %s (%d)",manager->last_error,manager->last_errno);
  142.     while (!manager->eof)
  143.     {
  144.       if (mysql_manager_fetch_line(manager,buf,sizeof(buf)))
  145. die("Error fetching result line: %s (%d)", manager->last_error,
  146.     manager->last_errno);
  147.       if (!quiet)
  148.         fprintf(fp_out,">>%sn",buf);
  149.     }
  150.   }
  151.   mysql_manager_close(manager);
  152.   return 0;
  153. }