mysqld
Command-line Options
mysqld
Command-line Options
In most cases you should manage mysqld
options through option files.
See section 4.1.2 `my.cnf' Option Files.
mysqld
and mysqld.server
read options from the
mysqld
and server
groups. mysqld_safe
read options
from the mysqld
, server
, mysqld_safe
and
safe_mysqld
groups. An embedded MySQL server usually reads
options from the server
, embedded
and
xxxxx_SERVER
, where xxxxx
is the name of the application.
mysqld
accepts a lot of command-line options. Here follows some
of the most common ones. For a full list execute mysqld --help
.
Options used for replication are listed in a separate section, see
section 4.10.6 Replication Options in `my.cnf'.
--ansi
-b, --basedir=path
--big-tables
--bind-address=IP
--console
--log-error
is specified. On Windows, mysqld
will not close the console screen if
this option is used.
--character-sets-dir=path
--chroot=path
mysqld
daemon in chroot environment at startup. Recommended
security measure since MySQL 4.0 (MySQL 3.23 is not able to provide
100% closed chroot jail).
It somewhat limits LOAD DATA INFILE
and
SELECT ... INTO OUTFILE
though.
--core-file
mysqld
dies. For some systems you must also
specify --core-file-size
to mysqld_safe
.
See section 4.7.2 mysqld_safe
, The Wrapper Around mysqld
.
Note that on some systems, like Solaris, you will
not get a core file if you are also using the --user
option.
-h, --datadir=path
--debug[...]=
--with-debug
, you can use this
option to get a trace file of what mysqld
is doing.
See section E.1.2 Creating Trace Files.
--default-character-set=charset
--default-table-type=type
--delay-key-write[= OFF | ON | ALL]
DELAYED KEYS
should be used. See section 5.5.2 Tuning Server Parameters.
--delay-key-write-for-all-tables; In MySQL 4.0.3 you should use --delay-key-write=ALL instead.
MyISAM
table.
See section 5.5.2 Tuning Server Parameters.
--des-key-file=filename
DES_ENCRYPT()
and DES_DECRYPT()
from this file.
--enable-external-locking (was --enable-locking)
lockd
does not fully work (as on Linux), you will easily get
mysqld to deadlock.
--enable-named-pipe
-T, --exit-info
--flush
-?, --help
--init-file=file
-L, --language=...
-l, --log[=file]
--log-bin=[file]
--log-bin-index[=file]
--log-error[=file]
--log-isam[=file]
--log-slow-queries[=file]
long_query_time
seconds to
execute to file. See section 4.9.5 The Slow Query Log.
--log-update[=file]
file.#
where #
is a unique number if not
given. See section 4.9.3 The Update Log. The update log is deprecated and will be
removed in MySQL 5.0; you should use the binary log instead
(--log-bin
). See section 4.9.4 The Binary Log. Starting from version 5.0,
using --log-update
will just turn on the binlog instead.
--log-long-format
--log-slow-queries
then queries that are not using indexes are logged
to the slow query log.
--low-priority-updates
INSERT
/DELETE
/UPDATE
)
will have lower priority than selects. It can also be done via
{INSERT | REPLACE | UPDATE | DELETE} LOW_PRIORITY ...
to lower
the priority of only one query, or by
SET LOW_PRIORITY_UPDATES=1
to change the priority in one
thread. See section 5.3.2 Table Locking Issues.
--memlock
mysqld
process in memory. This works only if your
system supports the mlockall()
system call (like Solaris). This
may help if you have a problem where the operating system is causing
mysqld
to swap on disk.
Note that use of this option requires that you run the server as root
,
which is normally not a good idea for security reasons.
--myisam-recover [=option[,option...]]]
DEFAULT
, BACKUP
, FORCE
or QUICK
. You can
also set this explicitly to ""
if you want to disable this
option. If this option is used, mysqld
will on open check if the
table is marked as crashed or if the table wasn't closed properly.
(The last option only works if you are running with
--skip-external-locking
.) If this is the case mysqld
will run
check on the table. If the table was corrupted, mysqld
will
attempt to repair it.
The following options affects how the repair works.
Option | Description |
DEFAULT | The same as not giving any option to
--myisam-recover .
|
BACKUP | If the data table was changed during recover, save a backup of the `table_name.MYD' datafile as `table_name-datetime.BAK'. |
FORCE | Run recover even if we will lose more than one row from the .MYD file. |
QUICK | Don't check the rows in the table if there aren't any delete blocks. |
BACKUP,FORCE
. This will force a repair of a table even if some rows
would be deleted, but it will keep the old datafile as a backup so that
you can later examine what happened.
--new
--new
option can be used to make the server
behave as 4.1 in certain aspects, easing a 4.0 to 4.1 upgrade:
TIMESTAMP
is returned as a string with the format
'YYYY-MM-DD HH:MM:SS'
.
See section 6.2 Column Types.
--pid-file=path
mysqld_safe
.
-P, --port=...
-o, --old-protocol
--one-thread
-O, --set-variable var=option
--help
lists variables. You can find a full
description for all variables in the SHOW VARIABLES
section in this
manual. See section 4.5.7.4 SHOW VARIABLES
. The tuning server parameters section includes
information of how to optimise these. Please note that --set-variable
is deprecated since MySQL 4.0, just use --var=option
on its own.
See section 5.5.2 Tuning Server Parameters.
In MySQL 4.0.2 one can set a variable directly with
--variable-name=option
and set-variable
is no longer needed
in option files.
If you want to restrict the maximum value a startup option can be set to
with SET
, you can define this by using the
--maximum-variable-name
command line option. See section 5.5.6 SET
Syntax.
Note that when setting a variable to a value, MySQL may automatically
correct it to stay within a given range and also adjusts the value a
little to fix for the used algorithm.
--safe-mode
--safe-show-database
SHOW DATABASES
command returns only those
databases for which the user has some kind of privilege.
From version 4.0.2 this option is deprecated and doesn't do anything
(the option is enabled by default) as we now have the
SHOW DATABASES
privilege. See section 4.3.1 GRANT
and REVOKE
Syntax.
--safe-user-create
INSERT
privilege to the
mysql.user
table or any column in this table.
--skip-bdb
--skip-concurrent-insert
MyISAM
tables. (This is only to be used if you think you have found a bug in this
feature.)
--skip-delay-key-write
DELAY_KEY_WRITE
option for all tables.
See section 5.5.2 Tuning Server Parameters.
--skip-grant-tables
mysqladmin
flush-privileges
or mysqladmin reload
.)
--skip-host-cache
--skip-innodb
--skip-external-locking (was --skip-locking)
isamchk
or myisamchk
you must
shut down the server. See section 1.2.3 How Stable Is MySQL?. Note that in MySQL Version
3.23 you can use REPAIR
and CHECK
to repair/check MyISAM
tables.
--skip-name-resolve
Host
column values in the grant tables
must be IP numbers or localhost
. See section 5.5.5 How MySQL uses DNS.
--skip-networking
mysqld
must be made via named pipes or Unix sockets. This option is highly
recommended for systems where only local requests are allowed. See section 5.5.5 How MySQL uses DNS.
--skip-new
--skip-symlink
--skip-symbolic-links
instead.
--symbolic-links, --skip-symbolic-links
directory.sym
file that contains the path to the real directory.
See section 2.6.1.5 Distributing Data Across Different Disks on Windows.
On Unix, enabling symbolic links means that you can link a
MyISAM
index file or datafile to another directory with
the INDEX DIRECTORY
or DATA DIRECTORY
options of the
CREATE TABLE
statement. If you delete or rename the table,
the files that its symbolic links point to also will be deleted or
renamed.
--skip-safemalloc
--with-debug=full
, all programs
check memory for overruns for every memory allocation and memory
freeing operations. This checking is very slow, so for the server you
can avoid it when you don't need it by using the --skip-safemalloc
option.
--skip-show-database
SHOW DATABASES
command, unless the user has the
SHOW DATABASES
privilege. From version 4.0.2 on, you should no longer
need this option, because access can now be granted specifically with the
SHOW DATABASES
privilege that was added in that version.
--skip-stack-trace
mysqld
under a debugger. On some systems, you also must use
this option to get a core file. See section E.1 Debugging a MySQL server.
--skip-thread-priority
--socket=path
MySql
).
--sql-mode=value[,value[,value...]]
REAL_AS_FLOAT
,
PIPES_AS_CONCAT
, ANSI_QUOTES
, IGNORE_SPACE
,
ONLY_FULL_GROUP_BY
,
NO_UNSIGNED_SUBTRACTION
,
NO_TABLE_OPTIONS
,
NO_FIELD_OPTIONS
,
NO_KEY_OPTIONS
,
MYSQL323
,
MYSQL40
,
DB2
,
MSSQL
,
ORACLE
,
POSTGRESQL
,
SAPDB
,
or
ANSI
.
The value also can be empty
(--sql-mode=""
) if you want to reset it.
Several of the option values are used for compatibility with other servers.
If specified, they cause the server to omit from the output of SHOW
CREATE TABLE
those parts of the statement that are not understood by
earlier versions of MySQL or other database servers.
Using these option values results in CREATE TABLE
statements that are
more portable for use with other servers:
NO_TABLE_OPTIONS
,
NO_FIELD_OPTIONS
,
and
NO_KEY_OPTIONS
values cause omission of table options, or options
pertaining to column or index definitions.
MYSQL323
and MYSQL40
are for compatibility with
MySQL 3.23 and MySQL 4.0.
DB2
,
MSSQL
,
ORACLE
,
POSTGRESQL
,
and
SAPDB
.
mysqldump
, because that program
uses SHOW CREATE TABLE
to obtain the table-creation statements that it
includes in its own output.
Several of the option values have a complex effect because they are shorthand
for a group or set of values.
For example, you can tell the server to run in ANSI mode by using the
--sql-mode=ANSI
(or --ansi
) option, which is
equivalent to specifying both of the following command-line
options:
--sql-mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY --transaction-isolation=SERIALIZABLENote that specifying ANSI mode in this way also has the effect of setting the transaction isolation level. For more information about running the server in ANSI mode, see section 1.8.2 Running MySQL in ANSI Mode. Other ``group'' values are
DB2
,
MSSQL
,
ORACLE
,
POSTGRESQL
,
and
SAPDB
.
Specifying any of them turns on the
PIPES_AS_CONCAT
,
ANSI_QUOTES
,
IGNORE_SPACE
,
NO_TABLE_OPTIONS
,
NO_FIELD_OPTIONS
,
and
NO_KEY_OPTIONS
values.
The --sql-mode
option was added in MySQL 3.23.41. The
NO_UNSIGNED_SUBTRACTION
value was added in 4.0.0. The
NO_TABLE_OPTIONS
,
NO_FIELD_OPTIONS
,
NO_KEY_OPTIONS
,
MYSQL323
,
MYSQL40
,
DB2
,
MSSQL
,
ORACLE
,
POSTGRESQL
,
SAPDB
,
and
values were added in 4.1.1.
ANSI
was added in 4.1.1.
--temp-pool
--transaction-isolation={ READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE }
SET TRANSACTION
Syntax.
-t, --tmpdir=path
/tmp
directory resides on a partition that is too small to hold temporary tables.
Starting from MySQL 4.1, this option accepts several paths that are used in
round-robin fashion. Paths should be separated by colon characters (`:')
on Unix and semicolon characters (`;') on Windows.
-u, --user={user_name | user_id}
mysqld
server as the user having the name user_name
or
numeric user ID user_id
.
(``User'' in this context refers to a system login account, not a MySQL user
listed in the grant tables.)
This option is mandatory when starting mysqld
as root
.
The server will change its user ID during its startup sequence, causing it
to run as that particular user rather than as root
.
See section 4.2.2 How to Make MySQL Secure Against Crackers.
Starting from MySQL 3.23.56 and 4.0.12:
To avoid a possible security hole where a user adds a --user=root
option to some `my.cnf' file (thus causing the server to run as
root
), mysqld
uses only the first
--user
option specified and produces a warning if there are multiple
--user
options. Options in `/etc/my.cnf' and
`datadir/my.cnf' are processed before
command-line options, so it is recommended that you
put a --user
option in `/etc/my.cnf' and specify a value other than
root
. The option in `/etc/my.cnf' will be found before any other
--user
options, which ensures that the server runs as a user other
than root
, and that a warning results if any other --user
option
is found.
-V, --version
-W, --log-warnings
Aborted connection...
to the
`.err' file. Enabling this option is recommended, for example, if you
use replication (you will get more information about what is happening,
such as messages about network failures and reconnections). See section A.2.10 Communication Errors / Aborted Connection.
This option used to be called --warnings
.
You can change most values for a running server with the
SET
command. See section 5.5.6 SET
Syntax.
Posted by Shane Kerr on Thursday March 7 2002, @7:33am | [Delete] [Edit] |
Solaris does not allow setuid() programs to
produce core files. If you want MySQL to produce
a core file when it segfaults on a Solaris system,
you need to either run it as root or start the
daemon from another user. If you are using the
"mysql.server" init script, you can modify the
line that runs the safe_mysqld script and prepend
"su - USER_NAME -c ". This will change to the
specified user and then start MySQL. Be sure this
user has write permission to the MySQL log file.
Posted by rweber on Wednesday June 19 2002, @8:57am | [Delete] [Edit] |
Since Solaris 7 you can enable suid/setgid
programms to dump core by setting
allow_setid_core to 1 in /etc/system.
Posted by Carl Litt on Wednesday December 18 2002, @5:27pm | [Delete] [Edit] |
When using --chroot=/path, the following steps
need to be taken before MySQL can be started :
<ul><li>If using --user=mysql, create
a /path/etc/passwd containing only the entry for
the 'mysql' user from your system-
wide /etc/passwd. You could probably get around
this by using --user=uid instead.<li>Make sure
your 'tmpdir' exists relative
to /path.<li>Under /path/var/lib create a symlink
for 'mysql' -> '../..'. This will make sure any
configured and hardwired paths will resolve under
the chrooted environment. If your MySQL root
directory is not /var/lib/mysql, substitute that
here.</ul>One side-effect is that MySQL
interprets 'etc' and 'var' as empty databases.
Posted by James Wilson on Thursday January 23 2003, @3:40am | [Delete] [Edit] |
Can you bind to multiple addresses such as 192.168.1.*?
Posted by Steven Deaton on Thursday June 5 2003, @6:05pm | [Delete] [Edit] |
Wouldn't it be nice for another command line switch, similar to --bind-address, that let you bind to maybe a comma seperated list of addresses... such as possibly
--bind-addresses=127.0.0.1,192.168.1.2