By convention, long forms of options that assign a value are
        written with an equals (=) sign, like this:
shell> mysql --host=tonfisk --user=jon
For options that require a value (that is, not having a default value), the equals sign is not required, and so the following is also valid:
shell> mysql --host tonfisk --user jon
In both cases, the mysql client attempts to connect to a MySQL server running on the host named “tonfisk” using an account with the user name “jon”.
        Due to this behavior, problems can occasionally arise when no
        value is provided for an option that expects one. Consider the
        following example, where a user connects to a MySQL server
        running on host tonfisk as user
        jon:
shell>mysql --host 85.224.35.45 --user jonWelcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.1.47 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>SELECT CURRENT_USER();+----------------+ | CURRENT_USER() | +----------------+ | jon@% | +----------------+ 1 row in set (0.00 sec)
Omitting the required value for one of these option yields an error, such as the one shown here:
shell> mysql --host 85.224.35.45 --user
mysql: option '--user' requires an argument
        In this case, mysql was unable to find a
        value following the --user
        option because nothing came after it on the command line.
        However, if you omit the value for an option that is
        not the last option to be used, you obtain
        a different error that you may not be expecting:
shell> mysql --host --user jon
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)
        Because mysql assumes that any string
        following --host on the command
        line is a host name, --host
        --user is interpreted as
        --host=--user, and the client
        attempts to connect to a MySQL server running on a host named
        “--user”.
      
        Options having default values always require an equals sign when
        assigning a value; failing to do so causes an error. For
        example, the MySQL server
        --log-error option has the
        default value
        host_name.errhost_name is the name of the
        host on which MySQL is running. Assume that you are running
        MySQL on a computer whose host name is “tonfisk”,
        and consider the following invocation of
        mysqld_safe:
shell> mysqld_safe &
[1] 11699
shell> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>
After shutting down the server, restart it as follows:
shell> mysqld_safe --log-error &
[1] 11699
shell> 080112 12:53:40 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>
        The result is the same, since
        --log-error is not followed
        by anything else on the command line, and it supplies its own
        default value. (The & character tells the
        operating system to run MySQL in the background; it is ignored
        by MySQL itself.) Now suppose that you wish to log errors to a
        file named my-errors.err. You might try
        starting the server with --log-error my-errors,
        but this does not have the intended effect, as shown here:
shell> mysqld_safe --log-error my-errors &
[1] 31357
shell> 080111 22:53:31 mysqld_safe Logging to '/usr/local/mysql/var/tonfisk.err'.
080111 22:53:32 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended
[1]+  Done                    ./mysqld_safe --log-error my-errors
        The server attempted to start using
        /usr/local/mysql/var/tonfisk.err as the
        error log, but then shut down. Examining the last few lines of
        this file shows the reason:
shell> tail /usr/local/mysql/var/tonfisk.err
080111 22:53:32  InnoDB: Started; log sequence number 0 46409
/usr/local/mysql/libexec/mysqld: Too many arguments (first extra is 'my-errors').
Use --verbose --help to get a list of available options
080111 22:53:32 [ERROR] Aborting
080111 22:53:32  InnoDB: Starting shutdown...
080111 22:53:34  InnoDB: Shutdown completed; log sequence number 0 46409
080111 22:53:34 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete
080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended
        Because the --log-error
        option supplies a default value, you must use an equals sign to
        assign a different value to it, as shown here:
shell> mysqld_safe --log-error=my-errors &
[1] 31437
shell> 080111 22:54:15 mysqld_safe Logging to '/usr/local/mysql/var/my-errors.err'.
080111 22:54:15 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
shell>
        Now the server has been started successfully, and is logging
        errors to the file
        /usr/local/mysql/var/my-errors.err.
      
        Similar issues can arise when specifying option values in option
        files. For example, consider a my.cnf file
        that contains the following:
[mysql] host user
        When the mysql client reads this file, these
        entries are parsed as --host
        --user or
        --host=--user, with the result
        shown here:
shell> mysql
ERROR 2005 (HY000): Unknown MySQL server host '--user' (1)
        However, in option files, an equals sign is not assumed. Suppose
        the my.cnf file is as shown here:
[mysql] user jon
Trying to start mysql in this case causes a different error:
shell> mysql
mysql: unknown option '--user jon'
        A similar error would occur if you were to write host
        tonfisk in the option file rather than
        host=tonfisk. Instead, you must use the
        equals sign:
[mysql] user=jon
shell>mysqlWelcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.1.47 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>SELECT USER();+---------------+ | USER() | +---------------+ | jon@localhost | +---------------+ 1 row in set (0.00 sec)
This is not the same behavior as with the command line, where the equals sign is not required:
shell>mysql --user jon --host tonfiskWelcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.1.47 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>SELECT USER();+---------------+ | USER() | +---------------+ | jon@tonfisk | +---------------+ 1 row in set (0.00 sec)


User Comments
Add your own comment.