DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

mysql(1)





NAME

       mysql - the MySQL command-line tool


SYNOPSIS

       mysql [options] db_name


DESCRIPTION

       mysql is a simple SQL shell (with GNU readline
       capabilities). It supports interactive and non-interactive
       use. When used interactively, query results are presented
       in an ASCII-table format. When used non-interactively (for
       example, as a filter), the result is presented in
       tab-separated format. The output format can be changed
       using command options.

       If you have problems due to insufficient memory for large
       result sets, use the --quick option. This forces mysql to
       retrieve results from the server a row at a time rather
       than retrieving the entire result set and buffering it in
       memory before displaying it. This is done by returning the
       result set using the mysql_use_result() C API function in
       the client/server library rather than
       mysql_store_result().

       Using mysql is very easy. Invoke it from the prompt of
       your command interpreter as follows:

       shell> mysql db_name

       Or:

       shell> mysql --user=user_name --password=your_password db_name

       Then type an SQL statement, end it with `;', \g, or \G and
       press Enter.

       You can execute SQL statements in a script file (batch
       file) like this:

       shell> mysql db_name < script.sql > output.tab


FBMYSQLFR OPTIONS

       mysql supports the following options:

       o  --help, -?

          Display a help message and exit.

       o  --auto-rehash

          Enable automatic rehashing. This option is on by
          default, which enables table and column name
          completion. Use --skip-auto-rehash to disable
          rehashing. That causes mysql to start faster, but you
          must issue the rehash command if you want to use table
          and column name completion.

       o  --batch, -B

          Print results using tab as the column separator, with
          each row on a new line. With this option, mysql does
          not use the history file.

       o  --character-sets-dir=path

          The directory where character sets are installed. See
          Section 9.1, "The Character Set Used for Data and
          Sorting".

       o  --column-names

          Write column names in results.

       o  --compress, -C

          Compress all information sent between the client and
          the server if both support compression.

       o  --database=db_name, -D db_name

          The database to use. This is useful primarily in an
          option file.

       o  --debug[=debug_options], -# [debug_options]

          Write a debugging log. The debug_options string often
          is 'd:t:o,file_name'. The default is
          'd:t:o,/tmp/mysql.trace'.

       o  --debug-info, -T

          Print some debugging information when the program
          exits.

       o  --default-character-set=charset_name

          Use charset_name as the default character set. See
          Section 9.1, "The Character Set Used for Data and
          Sorting".

       o  --delimiter=str

          Set the statement delimiter. The default is the
          semicolon character (`;').

       o  --execute=statement, -e statement

          Execute the statement and quit. The default output
          format is like that produced with --batch. See
          Section 3.1, "Using Options on the Command Line", for
          some examples.

       o  --force, -f

          Continue even if an SQL error occurs.

       o  --host=host_name, -h host_name

          Connect to the MySQL server on the given host.

       o  --html, -H

          Produce HTML output.

       o  --ignore-spaces, -i

          Ignore spaces after function names. The effect of this
          is described in the discussion for the IGNORE_SPACE SQL
          mode (see the section called "THE SERVER SQL MODE").

       o  --line-numbers

          Write line numbers for errors. Disable this with
          --skip-line-numbers.

       o  --local-infile[={0|1}]

          Enable or disable LOCAL capability for LOAD DATA
          INFILE. With no value, the option enables LOCAL. The
          option may be given as --local-infile=0 or
          --local-infile=1 to explicitly disable or enable LOCAL.
          Enabling LOCAL has no effect if the server does not
          also support it.

       o  --named-commands, -G

          Enable named mysql commands. Long-format commands are
          allowed, not just short-format commands. For example,
          quit and \q both are recognized. Use
          --skip-named-commands to disable named commands. See
          the section called "\FBMYSQL\FR COMMANDS".

       o  --no-auto-rehash, -A

          Deprecated form of -skip-auto-rehash. See the
          description for --auto-rehash.

       o  --no-beep, -b

          Do not beep when errors occur.

       o  --no-named-commands, -g

          Disable named commands. Use the \* form only, or use
          named commands only at the beginning of a line ending
          with a semicolon (`;').  mysql starts with this option
          enabled by default. However, even with this option,
          long-format commands still work from the first line.
          See the section called "\FBMYSQL\FR COMMANDS".

       o  --no-pager

          Deprecated form of --skip-pager. See the --pager
          option.

       o  --no-tee

          Do not copy output to a file.  the section called
          "\FBMYSQL\FR COMMANDS", discusses tee files further.

       o  --one-database, -o

          Ignore statements except those for the default database
          named on the command line. This is useful for skipping
          updates to other databases in the binary log.

       o  --pager[=command]

          Use the given command for paging query output. If the
          command is omitted, the default pager is the value of
          your PAGER environment variable. Valid pagers are less,
          more, cat [> filename], and so forth. This option works
          only on Unix. It does not work in batch mode. To
          disable paging, use --skip-pager.  the section called
          "\FBMYSQL\FR COMMANDS", discusses output paging
          further.

       o  --password[=password], -p[password]

          The password to use when connecting to the server. If
          you use the short option form (-p), you cannot have a
          space between the option and the password. If you omit
          the password value following the --password or -p
          option on the command line, you are prompted for one.

          Specifying a password on the command line should be
          considered insecure. See Section 7.6, "Keeping Your
          Password Secure".

       o  --port=port_num, -P port_num

          The TCP/IP port number to use for the connection.

       o  --prompt=format_str

          Set the prompt to the specified format. The default is
          mysql>. The special sequences that the prompt can
          contain are described in the section called
          "\FBMYSQL\FR COMMANDS".

       o  --protocol={TCP|SOCKET|PIPE|MEMORY}

          The connection protocol to use.

       o  --quick, -q

          Do not cache each query result, print each row as it is
          received. This may slow down the server if the output
          is suspended. With this option, mysql does not use the
          history file.

       o  --raw, -r

          Write column values without escape conversion. Often
          used with the --batch option.

       o  --reconnect

          If the connection to the server is lost, automatically
          try to reconnect. A single reconnect attempt is made
          each time the connection is lost. To suppress
          reconnection behavior, use --skip-reconnect.

       o  --safe-updates, --i-am-a-dummy, -U

          Allow only those UPDATE and DELETE statements that
          specify which rows to modify by using key values. If
          you have set this option in an option file, you can
          override it by using --safe-updates on the command
          line. See the section called "\FBMYSQL\FR TIPS", for
          more information about this option.

       o  --secure-auth

          Do not send passwords to the server in old (pre-4.1.1)
          format. This prevents connections except for servers
          that use the newer password format.

       o  --show-warnings

          Cause warnings to be shown after each statement if
          there are any. This option applies to interactive and
          batch mode. This option was added in MySQL 5.0.6.

       o  --sigint-ignore

          Ignore SIGINT signals (typically the result of typing
          Control-C).

       o  --silent, -s

          Silent mode. Produce less output. This option can be
          given multiple times to produce less and less output.

       o  --skip-column-names, -N

          Do not write column names in results.

       o  --skip-line-numbers, -L

          Do not write line numbers for errors. Useful when you
          want to compare result files that include error
          messages.

       o  --socket=path, -S path

          For connections to localhost, the Unix socket file to
          use, or, on Windows, the name of the named pipe to use.

       o  --table, -t

          Display output in table format. This is the default for
          interactive use, but can be used to produce table
          output in batch mode.

       o  --tee=file_name

          Append a copy of output to the given file. This option
          does not work in batch mode. in the section called
          "\FBMYSQL\FR COMMANDS", discusses tee files further.

       o  --unbuffered, -n

          Flush the buffer after each query.

       o  --user=user_name, -u user_name

          The MySQL username to use when connecting to the
          server.

       o  --verbose, -v

          Verbose mode. Produce more output about what the
          program does. This option can be given multiple times
          to produce more and more output. (For example, -v -v -v
          produces table output format even in batch mode.)

       o  --version, -V

          Display version information and exit.

       o  --vertical, -E

          Print query output rows vertically (one line per
          coluumn value). Without this option, you can specify
          vertical output for individual statements by
          terminating them with \G.

       o  --wait, -w

          If the connection cannot be established, wait and retry
          instead of aborting.

       o  --xml, -X

          Produce XML output.

       You can also set the following variables by using
       --var_name=value syntax:

       o  connect_timeout

          The number of seconds before connection timeout.
          (Default value is 0.)

       o  max_allowed_packet

          The maximum packet length to send to or receive from
          the server. (Default value is 16MB.)

       o  max_join_size

          The automatic limit for rows in a join when using
          --safe-updates. (Default value is 1,000,000.)

       o  net_buffer_length

          The buffer size for TCP/IP and socket communication.
          (Default value is 16KB.)

       o  select_limit

          The automatic limit for SELECT statements when using
          --safe-updates. (Default value is 1,000.)

       It is also possible to set variables by using
       --set-variable=var_name=value or -O var_name=value syntax.
       This syntax is deprecated.

       On Unix, the mysql client writes a record of executed
       statements to a history file. By default, the history file
       is named and is created in your home directory. To specify
       a different file, set the value of the MYSQL_HISTFILE
       environment variable.

       If you do not want to maintain a history file, first
       remove if it exists, and then use either of the following
       techniques:

       o  Set the MYSQL_HISTFILE variable to /dev/null. To cause
          this setting to take effect each time you log in, put
          the setting in one of your shell's startup files.

       o  Create as a symbolic link to /dev/null:

          shell> ln -s /dev/null $HOME/.mysql_history
          You need do this only once.


FBMYSQLFR COMMANDS

       mysql sends each SQL statement that you issue to the
       server to be executed. There is also a set of commands
       that mysql itself interprets. For a list of these
       commands, type help or \h at the mysql> prompt:

       mysql> help
       List of all MySQL commands:
       Note that all text commands must be first on line and end with ';'
       ?         (\?) Synonym for `help'.
       clear     (\c) Clear command.
       connect   (\r) Reconnect to the server. Optional arguments are db and host.
       delimiter (\d) Set statement delimiter. NOTE: Takes the rest of the line as
                      new delimiter.
       edit      (\e) Edit command with $EDITOR.
       ego       (\G) Send command to mysql server, display result vertically.
       exit      (\q) Exit mysql. Same as quit.
       go        (\g) Send command to mysql server.
       help      (\h) Display this help.
       nopager   (\n) Disable pager, print to stdout.
       notee     (\t) Don't write into outfile.
       pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
       print     (\p) Print current command.
       prompt    (\R) Change your mysql prompt.
       quit      (\q) Quit mysql.
       rehash    (\#) Rebuild completion hash.
       source    (\.) Execute an SQL script file. Takes a file name as an argument.
       status    (\s) Get status information from the server.
       system    (\!) Execute a system shell command.
       tee       (\T) Set outfile [to_outfile]. Append everything into given
                      outfile.
       use       (\u) Use another database. Takes database name as argument.
       warnings  (\W) Show warnings after every statement.
       nowarning (\w) Don't show warnings after every statement.

       Each command has both a long and short form. The long form
       is not case sensitive; the short form is. The long form
       can be followed by an optional semicolon terminator, but
       the short form should not.

       In the delimiter command, you should avoid the use of the
       backslash (`\') character because that is the escape
       character for MySQL.

       The edit, nopager, pager, and system commands work only in
       Unix.

       The status command provides some information about the
       connection and the server you are using. If you are
       running in --safe-updates mode, status also prints the
       values for the mysql variables that affect your queries.

       To log queries and their output, use the tee command. All
       the data displayed on the screen is appended into a given
       file. This can be very useful for debugging purposes also.
       You can enable this feature on the command line with the
       --tee option, or interactively with the tee command. The
       tee file can be disabled interactively with the notee
       command. Executing tee again re-enables logging. Without a
       parameter, the previous file is used. Note that tee
       flushes query results to the file after each statement,
       just before mysql prints its next prompt.

       By using the --pager option, it is possible to browse or
       search query results in interactive mode with Unix
       programs such as less, more, or any other similar program.
       If you specify no value for the option, mysql checks the
       value of the PAGER environment variable and sets the pager
       to that. Output paging can be enabled interactively with
       the pager command and disabled with nopager. The command
       takes an optional argument; if given, the paging program
       is set to that. With no argument, the pager is set to the
       pager that was set on the command line, or stdout if no
       pager was specified.

       Output paging works only in Unix because it uses the
       popen() function, which does not exist on Windows. For
       Windows, the tee option can be used instead to save query
       output, although this is not as convenient as pager for
       browsing output in some situations.

       Here are a few tips about the pager command:

       o  You can use it to write to a file and the results go
          only to the file:

          mysql> pager cat > /tmp/log.txt
          You can also pass any options for the program that you
          want to use as your pager:

          mysql> pager less -n -i -S

       o  In the preceding example, note the -S option. You may
          find it very useful for browsing wide query results.
          Sometimes a very wide result set is difficult to read
          on the screen. The -S option to less can make the
          result set much more readable because you can scroll it
          horizontally using the left-arrow and right-arrow keys.
          You can also use -S interactively within less to switch
          the horizontal-browse mode on and off. For more
          information, read the less manual page:

          shell> man less

       o  You can specify very complex pager commands for
          handling query output:

          mysql> pager cat | tee /dr1/tmp/res.txt \
                    | tee /dr2/tmp/res2.txt | less -n -i -S
          In this example, the command would send query results
          to two files in two different directories on two
          different filesystems mounted on /dr1 and /dr2, yet
          still display the results onscreen via less.

       You can also combine the tee and pager functions. Have a
       tee file enabled and pager set to less, and you are able
       to browse the results using the less program and still
       have everything appended into a file the same time. The
       difference between the Unix tee used with the pager
       command and the mysql built-in tee command is that the
       built-in tee works even if you do not have the Unix tee
       available. The built-in tee also logs everything that is
       printed on the screen, whereas the Unix tee used with
       pager does not log quite that much. Additionally, tee file
       logging can be turned on and off interactively from within
       mysql. This is useful when you want to log some queries to
       a file, but not others.

       The default mysql> prompt can be reconfigured. The string
       for defining the prompt can contain the following special
       sequences: OptionDescription\vThe server version\dThe
       default database\hThe server host\pThe current TCP/IP port
       or socket file\uYour username\UYour full
                         user_name@host_name
                         account name\\A literal `\' backslash
       character\nA newline character\tA tab character\ A space
       (a space follows the backslash)\_A space\RThe current
       time, in 24-hour military time (0-23)\rThe current time,
       standard 12-hour time (1-12)\mMinutes of the current
       time\yThe current year, two digits\YThe current year, four
       digits\DThe full current date\sSeconds of the current
       time\wThe current day of the week in three-letter format
       (Mon, Tue, ...)\Pam/pm\oThe current month in numeric
       format\OThe current month in three-letter format (Jan,
       Feb, ...)\cA counter that increments for each statement
       you issue\SSemicolon\'Single quote\"Double quote.PP `\'
       followed by any other letter just becomes that letter.

       If you specify the prompt command with no argument, mysql
       resets the prompt to the default of mysql>.

       You can set the prompt in several ways:

       o  Use an environment variable.  You can set the MYSQL_PS1
          environment variable to a prompt string. For example:

          shell> export MYSQL_PS1="(\u@\h) [\d]> "

       o  Use a command-line option.  You can set the --prompt
          option on the command line to mysql. For example:

          shell> mysql --prompt="(\u@\h) [\d]> "
          (user@host) [database]>

       o  Use an option file.  You can set the prompt option in
          the [mysql] group of any MySQL option file, such as
          /etc/my.cnf or the file in your home directory. For
          example:

          [mysql]
          prompt=(\\u@\\h) [\\d]>\\_
          In this example, note that the backslashes are doubled.
          If you set the prompt using the prompt option in an
          option file, it is advisable to double the backslashes
          when using the special prompt options. There is some
          overlap in the set of allowable prompt options and the
          set of special escape sequences that are recognized in
          option files. (These sequences are listed in
          Section 3.2, "Using Option Files".) The overlap may
          cause you problems if you use single backslashes. For
          example, \s is interpreted as a space rather than as
          the current seconds value. The following example shows
          how to define a prompt within an option file to include
          the current time in HH:MM:SS> format:

          [mysql]
          prompt="\\r:\\m:\\s> "

       o  Set the prompt interactively.  You can change your
          prompt interactively by using the prompt (or \R)
          command. For example:

          mysql> prompt (\u@\h) [\d]>\_
          PROMPT set to '(\u@\h) [\d]>\_'
          (user@host) [database]>
          (user@host) [database]> prompt
          Returning to default PROMPT of mysql>
          mysql>


EXECUTING SQL STATEMENTS FROM A TEXT FILE

       The mysql client typically is used interactively, like
       this:

       shell> mysql db_name

       However, it is also possible to put your SQL statements in
       a file and then tell mysql to read its input from that
       file. To do so, create a text file text_file that contains
       the statements you wish to execute. Then invoke mysql as
       shown here:

       shell> mysql db_name < text_file

       If you place a USE db_name statement as the first
       statement in the file, it is unnecessary to specify the
       database name on the command line:

       shell> mysql < text_file

       If you are already running mysql, you can execute an SQL
       script file using the source or \.  command:

       mysql> source file_name
       mysql> \. file_name

       Sometimes you may want your script to display progress
       information to the user. For this you can insert
       statements like this:

       SELECT '<info_to_display>' AS ' ';

       The statement shown outputs <info_to_display>.

       For more information about batch mode, see Section 5,
       "Using mysql in Batch Mode".


FBMYSQLFR TIPS

       This section describes some techniques that can help you
       use mysql more effectively.

   Displaying Query Results Vertically
       Some query results are much more readable when displayed
       vertically, instead of in the usual horizontal table
       format. Queries can be displayed vertically by terminating
       the query with \G instead of a semicolon. For example,
       longer text values that include newlines often are much
       easier to read with vertical output:

       mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G
       *************************** 1. row ***************************
         msg_nro: 3068
            date: 2000-03-01 23:29:50
       time_zone: +0200
       mail_from: Monty
           reply: monty@no.spam.com
         mail_to: "Thimble Smith" <tim@no.spam.com>
             sbj: UTF-8
             txt: >>>>> "Thimble" == Thimble Smith writes:
       Thimble> Hi.  I think this is a good idea.  Is anyone familiar
       Thimble> with UTF-8 or Unicode? Otherwise, I'll put this on my
       Thimble> TODO list and see what happens.
       Yes, please do that.
       Regards,
       Monty
            file: inbox-jani-1
            hash: 190402944
       1 row in set (0.09 sec)

   Using the --safe-updates Option
       For beginners, a useful startup option is --safe-updates
       (or --i-am-a-dummy, which has the same effect). It is
       helpful for cases when you might have issued a DELETE FROM
       tbl_name statement but forgotten the WHERE clause.
       Normally, such a statement deletes all rows from the
       table. With --safe-updates, you can delete rows only by
       specifying the key values that identify them. This helps
       prevent accidents.

       When you use the --safe-updates option, mysql issues the
       following statement when it connects to the MySQL server:

       SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=1000, SQL_MAX_JOIN_SIZE=1000000;

       See Section 5.3, "SET Syntax".

       The SET statement has the following effects:

       o  You are not allowed to execute an UPDATE or DELETE
          statement unless you specify a key constraint in the
          WHERE clause or provide a LIMIT clause (or both). For
          example:

          UPDATE tbl_name SET not_key_column=val WHERE key_column=val;
          UPDATE tbl_name SET not_key_column=val LIMIT 1;

       o  The server limits all large SELECT results to 1,000
          rows unless the statement includes a LIMIT clause.

       o  The server aborts multiple-table SELECT statements that
          probably need to examine more than 1,000,000 row
          combinations.

       To specify limits different from 1,000 and 1,000,000, you
       can override the defaults by using the --select_limit and
       --max_join_size options:

       shell> mysql --safe-updates --select_limit=500 --max_join_size=10000

   Disabling mysql Auto-Reconnect
       If the mysql client loses its connection to the server
       while sending a query, it immediately and automatically
       tries to reconnect once to the server and send the query
       again. However, even if mysql succeeds in reconnecting,
       your first connection has ended and all your previous
       session objects and settings are lost: temporary tables,
       the autocommit mode, and user-defined and session
       variables. Also, any current transaction rolls back. This
       behavior may be dangerous for you, as in the following
       example where the server was shut down and restarted
       without you knowing it:

       mysql> SET @a=1;
       Query OK, 0 rows affected (0.05 sec)
       mysql> INSERT INTO t VALUES(@a);
       ERROR 2006: MySQL server has gone away
       No connection. Trying to reconnect...
       Connection id:    1
       Current database: test
       Query OK, 1 row affected (1.30 sec)
       mysql> SELECT * FROM t;
       +------+
       | a    |
       +------+
       | NULL |
       +------+
       1 row in set (0.05 sec)

       The @a user variable has been lost with the connection,
       and after the reconnection it is undefined. If it is
       important to have mysql terminate with an error if the
       connection has been lost, you can start the mysql client
       with the --skip-reconnect option.


SEE ALSO

       msql2mysql(1), myisamchk(1), myisamlog(1), myisampack(1),
       mysql.server(1), mysql_config(1),
       mysql_fix_privilege_tables(1), mysql_upgrade(1),
       mysql_zap(1), mysqlaccess(1), mysqladmin(1),
       mysqlbinlog(1), mysqlcheck(1), mysqld(1), mysqld_multi(1),
       mysqld_safe(1), mysqldump(1), mysqlhotcopy(1),
       mysqlimport(1), mysqlmanager(1), mysqlshow(1), perror(1),
       replace(1), safe_mysqld(1)

       For more information, please refer to the MySQL Reference
       Manual, which may already be installed locally and which
       is also available online at http://dev.mysql.com/doc/.


AUTHOR

       MySQL AB (http://www.mysql.com/).  This software comes
       with no warranty.

MySQL 5.0                   03/04/2006               FBMYSQLFR(1)

Man(1) output converted with man2html