1
/* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
* Copyright (C) 2008 MySQL
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
/* maintaince of drizzle databases */
1
/* Copyright (C) 2000-2006 MySQL AB
3
This program is free software; you can redistribute it and/or modify
4
it under the terms of the GNU General Public License as published by
5
the Free Software Foundation; version 2 of the License.
7
This program is distributed in the hope that it will be useful,
8
but WITHOUT ANY WARRANTY; without even the implied warranty of
9
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
GNU General Public License for more details.
12
You should have received a copy of the GNU General Public License
13
along with this program; if not, write to the Free Software
14
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
16
/* maintaince of mysql databases */
23
18
#include "client_priv.h"
24
19
#include <signal.h>
25
#include <mysys/my_pthread.h> /* because of signal() */
20
#include <my_pthread.h> /* because of signal() */
26
21
#include <sys/stat.h>
28
/* Added this for string translation. */
29
#include <libdrizzle/gettext.h>
31
23
#define ADMIN_VERSION "8.42"
32
24
#define SHUTDOWN_DEF_TIMEOUT 3600 /* Wait for shutdown */
34
26
char *host= NULL, *user= NULL, *opt_password= NULL;
35
27
static bool interrupted= false, opt_verbose= false,tty_password= false;
28
static uint8_t opt_protocol= MYSQL_PROTOCOL_TCP;
36
29
static uint32_t tcp_port= 0, option_wait= 0, option_silent= 0;
37
30
static uint32_t my_end_arg;
38
31
static uint32_t opt_connect_timeout, opt_shutdown_timeout;
71
64
static struct my_option my_long_options[] =
73
{"help", '?', N_("Display this help and exit."), 0, 0, 0, GET_NO_ARG,
66
{"help", '?', "Display this help and exit.", 0, 0, 0, GET_NO_ARG,
74
67
NO_ARG, 0, 0, 0, 0, 0, 0},
75
{"host", 'h', N_("Connect to host."), (char**) &host, (char**) &host, 0, GET_STR,
68
{"host", 'h', "Connect to host.", (char**) &host, (char**) &host, 0, GET_STR,
76
69
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
78
N_("Password to use when connecting to server. If password is not given it's asked from the tty."),
71
"Password to use when connecting to server. If password is not given it's asked from the tty.",
79
72
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
80
{"port", 'P', N_("Port number to use for connection or 0 for default to, in "
81
"order of preference, my.cnf, $DRIZZLE_TCP_PORT, "
82
"built-in default (" STRINGIFY_ARG(DRIZZLE_PORT) ")."),
73
{"port", 'P', "Port number to use for connection or 0 for default to, in "
74
"order of preference, my.cnf, $MYSQL_TCP_PORT, "
75
#if MYSQL_PORT_DEFAULT == 0
78
"built-in default (" STRINGIFY_ARG(MYSQL_PORT) ").",
83
79
(char**) &tcp_port,
84
80
(char**) &tcp_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
85
{"silent", 's', N_("Silently exit if one can't connect to server."),
81
{"silent", 's', "Silently exit if one can't connect to server.",
86
82
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
87
83
#ifndef DONT_ALLOW_USER_CHANGE
88
{"user", 'u', N_("User for login if not current user."), (char**) &user,
84
{"user", 'u', "User for login if not current user.", (char**) &user,
89
85
(char**) &user, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
91
{"verbose", 'v', N_("Write more information."), (char**) &opt_verbose,
87
{"verbose", 'v', "Write more information.", (char**) &opt_verbose,
92
88
(char**) &opt_verbose, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
93
{"version", 'V', N_("Output version information and exit."), 0, 0, 0, GET_NO_ARG,
89
{"version", 'V', "Output version information and exit.", 0, 0, 0, GET_NO_ARG,
94
90
NO_ARG, 0, 0, 0, 0, 0, 0},
95
{"wait", 'w', N_("Wait and retry if connection is down."), 0, 0, 0, GET_UINT,
91
{"wait", 'w', "Wait and retry if connection is down.", 0, 0, 0, GET_UINT,
96
92
OPT_ARG, 0, 0, 0, 0, 0, 0},
97
93
{"connect_timeout", OPT_CONNECT_TIMEOUT, "", (char**) &opt_connect_timeout,
98
94
(char**) &opt_connect_timeout, 0, GET_ULONG, REQUIRED_ARG, 3600*12, 0,
183
179
if (tty_password)
184
opt_password = get_tty_password(NULL);
180
opt_password = get_tty_password(NullS);
186
signal(SIGINT,endprog); /* Here if abort */
187
signal(SIGTERM,endprog); /* Here if abort */
182
VOID(signal(SIGINT,endprog)); /* Here if abort */
183
VOID(signal(SIGTERM,endprog)); /* Here if abort */
189
185
if (opt_connect_timeout)
191
187
uint tmp=opt_connect_timeout;
192
drizzle_options(&drizzle,DRIZZLE_OPT_CONNECT_TIMEOUT, (char*) &tmp);
188
mysql_options(&mysql,MYSQL_OPT_CONNECT_TIMEOUT, (char*) &tmp);
190
/* force mysqladmin to use TCP */
191
mysql_options(&mysql, MYSQL_OPT_PROTOCOL, (char*)&opt_protocol);
195
193
error_flags= (myf)0;
197
if (sql_connect(&drizzle, option_wait))
195
if (sql_connect(&mysql, option_wait))
199
unsigned int err= drizzle_errno(&drizzle);
197
unsigned int err= mysql_errno(&mysql);
200
198
if (err >= CR_MIN_ERROR && err <= CR_MAX_ERROR)
217
error=execute_commands(&drizzle,argc,commands);
218
drizzle_close(&drizzle);
215
error=execute_commands(&mysql,argc,commands);
218
my_free(opt_password,MYF(MY_ALLOW_ZERO_PTR));
219
my_free(user,MYF(MY_ALLOW_ZERO_PTR));
222
220
free_defaults(save_argv);
223
221
my_end(my_end_arg);
224
222
exit(error ? 1 : 0);
227
RETSIGTYPE endprog(int signal_number __attribute__((unused)))
225
sig_handler endprog(int signal_number __attribute__((unused)))
232
static bool sql_connect(DRIZZLE *drizzle, uint wait)
230
static bool sql_connect(MYSQL *mysql, uint wait)
238
if (drizzle_connect(drizzle,host,user,opt_password,NULL,tcp_port,NULL,0))
236
if (mysql_real_connect(mysql,host,user,opt_password,NullS,tcp_port,NULL,0))
240
drizzle->reconnect= 1;
243
241
fputs("\n",stderr);
254
252
host= (char*) LOCAL_HOST;
256
my_printf_error(0,_("connect to server at '%s' failed\nerror: '%s'"),
257
error_flags, host, drizzle_error(drizzle));
254
my_printf_error(0,"connect to server at '%s' failed\nerror: '%s'",
255
error_flags, host, mysql_error(mysql));
259
if (drizzle_errno(drizzle) == CR_CONN_HOST_ERROR ||
260
drizzle_errno(drizzle) == CR_UNKNOWN_HOST)
257
if (mysql_errno(mysql) == CR_CONN_HOST_ERROR ||
258
mysql_errno(mysql) == CR_UNKNOWN_HOST)
262
fprintf(stderr,_("Check that drizzled is running on %s"),host);
263
fprintf(stderr,_(" and that the port is %d.\n"),
264
tcp_port ? tcp_port: drizzle_get_default_port());
265
fprintf(stderr,_("You can check this by doing 'telnet %s %d'\n"),
266
host, tcp_port ? tcp_port: drizzle_get_default_port());
260
fprintf(stderr,"Check that drizzled is running on %s",host);
261
fprintf(stderr," and that the port is %d.\n",
262
tcp_port ? tcp_port: mysql_port);
263
fprintf(stderr,"You can check this by doing 'telnet %s %d'\n",
264
host, tcp_port ? tcp_port: mysql_port);
271
if (wait != UINT32_MAX)
269
if (wait != (uint) ~0)
272
270
wait--; /* One less retry */
273
if ((drizzle_errno(drizzle) != CR_CONN_HOST_ERROR) &&
274
(drizzle_errno(drizzle) != CR_CONNECTION_ERROR))
271
if ((mysql_errno(mysql) != CR_CONN_HOST_ERROR) &&
272
(mysql_errno(mysql) != CR_CONNECTION_ERROR))
276
fprintf(stderr,_("Got error: %s\n"), drizzle_error(drizzle));
274
fprintf(stderr,"Got error: %s\n", mysql_error(mysql));
278
276
else if (!option_silent)
283
fputs(_("Waiting for Drizzle server to answer"),stderr);
281
fputs("Waiting for Drizzle server to answer",stderr);
284
282
(void) fflush(stderr);
313
311
case ADMIN_SHUTDOWN:
316
printf(_("shutting down drizzled...\n"));
314
printf("shutting down drizzled...\n");
318
if (drizzle_shutdown(drizzle))
316
if (mysql_shutdown(mysql, SHUTDOWN_DEFAULT))
320
my_printf_error(0, _("shutdown failed; error: '%s'"), error_flags,
321
drizzle_error(drizzle));
318
my_printf_error(0, "shutdown failed; error: '%s'", error_flags,
324
drizzle_close(drizzle); /* Close connection to avoid error messages */
322
mysql_close(mysql); /* Close connection to avoid error messages */
329
327
argc=1; /* Force SHUTDOWN to be the last command */
333
drizzle->reconnect=0; /* We want to know of reconnects */
334
if (!drizzle_ping(drizzle))
331
mysql->reconnect=0; /* We want to know of reconnects */
332
if (!mysql_ping(mysql))
336
334
if (option_silent < 2)
337
puts(_("drizzled is alive"));
335
puts("drizzled is alive");
341
if (drizzle_errno(drizzle) == CR_SERVER_GONE_ERROR)
339
if (mysql_errno(mysql) == CR_SERVER_GONE_ERROR)
343
drizzle->reconnect=1;
344
if (!drizzle_ping(drizzle))
345
puts(_("connection was down, but drizzled is now alive"));
342
if (!mysql_ping(mysql))
343
puts("connection was down, but drizzled is now alive");
349
my_printf_error(0,_("drizzled doesn't answer to ping, error: '%s'"),
350
error_flags, drizzle_error(drizzle));
347
my_printf_error(0,"drizzled doesn't answer to ping, error: '%s'",
348
error_flags, mysql_error(mysql));
354
drizzle->reconnect=1; /* Automatic reconnect is default */
352
mysql->reconnect=1; /* Automatic reconnect is default */
358
my_printf_error(0, _("Unknown command: '%-.60s'"), error_flags, argv[0]);
356
my_printf_error(0, "Unknown command: '%-.60s'", error_flags, argv[0]);
363
#include <help_start.h>
365
365
static void print_version(void)
367
printf(_("%s Ver %s Distrib %s, for %s on %s\n"),my_progname,ADMIN_VERSION,
368
drizzle_get_client_info(),SYSTEM_TYPE,MACHINE_TYPE);
367
printf("%s Ver %s Distrib %s, for %s on %s\n",my_progname,ADMIN_VERSION,
368
MYSQL_SERVER_VERSION,SYSTEM_TYPE,MACHINE_TYPE);
371
371
static void usage(void)
374
puts(_("Copyright (C) 2000-2008 MySQL AB"));
375
puts(_("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\nand you are welcome to modify and redistribute it under the GPL license\n"));
376
puts(_("Administration program for the drizzled daemon."));
377
printf(_("Usage: %s [OPTIONS] command command....\n"), my_progname);
374
puts("Copyright (C) 2000-2006 MySQL AB");
375
puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\nand you are welcome to modify and redistribute it under the GPL license\n");
376
puts("Administration program for the drizzled daemon.");
377
printf("Usage: %s [OPTIONS] command command....\n", my_progname);
378
378
my_print_help(my_long_options);
380
380
ping Check if server is down\n\
381
shutdown Take server down\n"));
381
shutdown Take server down\n");
384
#include <help_end.h>