第5章:数据库管理 / 5.3. mysqld:MySQL服务器 / 5.3.1. mysqld命令行选项

当启动mysqld服务器时,你可以使用4.3节,“指定程序选项”中描述的方法指定程序选项。最常用的方法是在选项文件中或在命令行提供选项。但是,在大多数情况下,希望服务器每次运行时使用相同的选项。最好的方法是确保将它们列在选项文件中。参见4.3.2节,“使用选项文件”

mysqld[mysqld][server]组读取选项。mysqld_safe[mysqld][server][mysqld_safe][safe_mysqld]组读取选项。mysql.server[mysqld][mysql.server]组读取选项。嵌入式MySQL服务器通常从[server][embedded][xxxxx_SERVER]组读取选项,其中xxxxx是服务器嵌入的应用程序名。

mysqld接受许多命令行选项。执行mysqld --help可以简单列出来。要想看全部列表列,使用命令mysqld --verbose --help

下面列出了一些最常用的服务器选项。其它的选项在其它地方描述:

·         影响安全的选项:参见5.6.3节,“Mysqld安全相关启动选项

·         SSL-相关选项:参见5.8.7.6节,“SSL命令行选项”

·         二进制日志控制选项:参见5.11.3节,“二进制日志”

·         复制相关选项:参见6.8节,“复制启动选项”

·         特定存储引擎相关选项:参见15.1.1节,“MyISAM启动选项”15.5.3节,“BDB启动选项”15.2.4节,“InnoDB启动选项”

你还可以将变量名作为一个选项,设置服务器系统变量的值,如本节后面所述。

·         --help-?

显示简短的帮助消息并退出。使用--verbose--help选项来看全部内容。

·         --allow-suspicious-udfs

该选项控制是否用户定义的函数只有一个xxx符,用作可载入的主函数。默认情况下,该选项被关闭,只有至少有一个附属符的UDF  可以载入。这样可以防止从未包含合法UDF的共享文件装载函数。参见27.2.3.6节,“用户定义函数安全注意事项”

·         --ansi

使用标准(ANSI)SQL语法代替MySQL语法。参见1.8.3节,“在ANSI模式下运行MySQL”。使用--sql-mode选项可以更精确控制服务器SQL模式。

·         --basedir=path, -b path

MySQL安装目录的路径。通常所有路径根据该路径来解析。

·         --bind-address=IP

待绑定的IP地址。

·         --bootstrap

mysql_install_db脚本使用该选项来创建MySQL授权表,不需要启动MySQL服务器。

·         --console

将错误日志消息写入stderrstdout,即使指定了--log-error。在Windows中,如果使用该选项,mysqld不关闭控制台窗口。

·         --character-sets-dir=path

字符集安装的目录。参见5.10.1节,“数据和排序用字符集”

·         --chroot=path

通过chroot()系统调用在启动过程中将mysqld服务器放入一个封闭环境中。这是推荐的一个安全措施。请注意使用该选项可以 限制LOAD DATA INFILESELECT ... INTO OUTFILE

·         --character-set-server=charset

使用charset作为 默认服务器字符集。参见5.10.1节,“数据和排序用字符集”

·         --core-file

如果mysqld终止,写内核文件。在某些系统中,你还必须为mysqld_safe指定--core-file-size 选项。参见5.1.3节,“mysqld_safe:MySQL服务器启动脚本”。请注意对于一些系统,例如Solaris,如果你使用--user选项不会获得内核文件。

·         --collation-server=collation

使用collation作为 默认服务器校对规则。参见5.10.1节,“数据和排序用字符集”

·         --datadir=path, -h path

数据目录的路径。

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

如果MySQL配置了--with-debug,你可以使用该选项来获得一个跟踪文件,跟踪mysqld正进行的操作。debug_options字符串通常为'd:t:ofile_name'。参见E.1.2节,“创建跟踪文件”

·         (DEPRECATED) --default-character-set=charset

使用char设置作为 默认字符集。由于--character-set-server,反对使用该选项。参见5.10.1节,“数据和排序用字符集”

·         --default-collation=collation

使用collation 作为默认校对规则。由于--collation-server,反对使用该选项。参见5.10.1节,“数据和排序用字符集”

·         --default-storage-engine=type

该选项为--default-table-type的同义词。

·         --default-table-type=type

设置表的默认类型。参见第15章:存储引擎和表类型

·         --default-time-zone=type

设置默认服务器时区。该选项设置全局time_zone系统变量。如果未给出该选项, 默认时区与系统时区相同(system_time_zone系统变量值给定)

·         --delay-key-write[= OFF | ON | ALL]

如何使用DELAYED KEYS选项。键写入延迟会造成再次写MyISAM表时键缓冲区不能被清空。OFF禁用延迟的键写入。ON启用用DELAYED KEYS选项创建的表的延迟的键写入。ALL延迟所有MyISAM表的键写入。参见7.5.2节,“调节服务器参数”。参见15.1.1节,“MyISAM启动选项”

释:如果你将该变量设置为ALL,你不应从另一个正使用MyISAM表的程序中使用MyISAM(例如从另一个MySQL服务器或用myisamchk)。这样操作会导致索引破坏。

·         --des-key-file=file_name

从该文件读DES_ENCRYPT()DES_DECRYPT()使用的 默认键。

·         --enable-named-pipe

启用命名管道支持。该选项只适用Windows NT2000XP2003系统,并且只适用支持命名管道连接的mysqld-ntmysqld-max-nt服务器。

 

·         --exit-info[=flags], -T [flags]

这是不同标志的一个位掩码,你可以用来调试mysqld服务器。不要使用该选项,除非你确切知道它在做什么!

·         --external-locking

启用系统锁定。请注意如果你在lockd不能完全工作的系统上使用该选项(例如在Linux)mysqld容易死锁。该选项以前叫--enable-locking

释:如果你在许多MySQL进程中使用该选项来更新MyISAM表,你必须确保满足下述条件:

o        使用正被另一个进程更新的表的查询的缓存不可使用。

o        不应在共享表中使用--delay-key-write=ALLDELAY_KEY_WRITE=1

最简单的方法是结合使用--external-locking--delay-key-write=OFF --query-cache-size=0

(默认不能实现,因为在许多设置中,结合使用上述选项很有用)

·         --flush

执行SQL语句后向硬盘上清空更改。一般情况执行SQL语句后 MySQL向硬盘写入所有更改,让操作系统处理与硬盘的同步。参见A.4.2节,“如果MySQL依然崩溃,应作些什么”

·         --init-file=file

启动时从该文件读SQL语句。每个语句必须在同一行中并且不应包括注释。

·         --language=lang_name, -L lang_name

用给定语言给出客户端错误消息。lang_name可以为语言名或语言文件安装目录的全路径名。参见5.10.2节,“设置错误消息语言”

·         --large-pages

一些硬件/操作系统架构支持大于 默认值(通常4 KB)的内存页。实际支持取决于使用的硬件和OS。大量访问内存的应用程序通过使用较大的页,降低了Translation Lookaside Buffer (TLB)损失,可以改善性能。

目前,MySQL只在Linux中支持大页面(Linux中被称作HugeTLB)。我们已经计划将该支持扩展到FreeBSDSolaris和其它可能的平台。

Linux中可以使用大页面前,需要配置HugeTLB内存池。参考Linux内核源码中的hugetlbpage.txt文件。

默认情况下该选项被禁用。

·         ---log[=file], -l [file]

日志连接和对文件的查询。参见5.11.2节,“通用查询日志”。如果你不指定文件名,MySQL使用host_name.log作为文件名。

·         --log-bin=[file]

二进制日志文件。将更改数据的所有查询记入该文件。用于备份和复制。参见5.11.3节,“二进制日志”。建议指定一个文件名(原因参见A.8.1节,“MySQL中的打开事宜”),否则MySQL使用host_name-bin作为日志文件基本名。

·         --log-bin-index[=file]

二进制日志文件名的索引文件。参见5.11.3节,“二进制日志”。如果你不指定文件名,并且如果你没有在--log-bin中指定,MySQL使用host_name-bin.index作为文件名。

·         --log-bin-trust-routine-creators[={0|1}]

没有参数或参数为1,该选项将系统变量log_bin_trust_routine_creators设置为1。为参数 0时,该选项将系统变量设置为0log_bin_trust_routine_creators影响MySQL如何对保存的程序的创建强加限制。参见20.4节,“存储子程序和触发程序的二进制日志功能”

·         --log-error[=file]

该文件的日志错误和启动消息。参见5.11.1节,“错误日志”。如果你不指定文件名,MySQL使用host_name.err作为文件名。如果文件名没有扩展名,则加上.err扩展名。

·         --log-isam[=file]

将所有MyISAM更改记入该文件(只有调试MyISAM时才使用)

·         (DEPRECATED) --log-long-format

记录激活的更新日志、二进制更新日志、和慢查询日志的大量信息。例如,所有查询的用户名和时间戳将记录下来。不赞成选用该选项,因为它现在代表 默认记录行为。(参见--log-short-format描述)--log-queries-not-using-indexes选项适合将未使用索引的查询记录到慢查询日志中。

·         --log-queries-not-using-indexes

如果你结合--log-slow-queries使用该选项,未使用索引的查询也被记录到慢查询日志中。参见5.11.4节,“慢速查询日志”

·         --log-short-format

记录激活的更新日志、二进制更新日志、和慢查询日志的少量信息。例如,用户名和时间戳不记录下来。

·         ---log-slow-admin-statements

将慢管理语句例如OPTIMIZE TABLEANALYZE TABLEALTER TABLE记入慢查询日志。

·         --log-slow-queries[=file]

将所有执行时间超过long_query_time 秒的查询记入该文件。参见5.11.4节,“慢速查询日志”。详细信息参见--log-long-format--log-short-format选项描述。

 

·         --log-warnings, -W

将警告例如Aborted connection...打印到错误日志。建议启用该选项,例如,如果你使用复制 (你可以得到关于所发生事情的详细信息,例如关于网络故障和重新连接的消息)。默认情况下启用该选项;要想禁用它,使用--skip-log-warnings。中断的连接不会记入错误日志,除非值大于1。参见A.2.10节,“通信错误和失效连接”

·         --low-priority-updates

表修改(INSERT, REPLACE, DELETE, UPDATE)比选择的优先级要低。也可以通过{INSERT | REPLACE | DELETE | UPDATE} LOW_PRIORITY ... 来降低某个查询的优先级来实现,或通过SET LOW_PRIORITY_UPDATES=1来更改一个线程的优先级。参见7.3.2节,“表锁定事宜”

·          --memlock

mysqld 进程锁定在内存中。在支持mlockall()系统调用的系统上有效,例如Solaris。如果操作系统使mysqld在硬盘上交换时出现问题,可以为你提供帮助。请注意使用该选项时需要以root运行服务器,但从安全考虑并不是一个好注意。

·         --myisam-recover [=option[,option...]]]

将存储引擎MyISAM设置为恢复模式。该选项值是DEFAULTBACKUPFORCEQUICK值的任何组合。如果你指定多个值,用逗号间隔开。你还可以使用""值来禁用该选项。使用如果该选项,当mysqld打开MyISAM表时,检查是否表标记为崩溃或没有正确关闭。(只有用--skip-external-lockingare运行时,最后的选项才工作)如果是这种情况,mysqld则检查 表。如果表被破坏,mysqld试图维护它。

下面的选项影响维护工作:

选项

描述

DEFAULT

与没有使用--myisam-recover选项相同。

BACKUP

如果在恢复过程中,数据文件被更改了,将tbl_name.MYD文件备份为tbl_name-datetime.BAK

FORCE

即使.MYD文件将丢掉多个行也进行恢复。

QUICK

如果没有删除块,不要检查表中的行。

在表自动修复前,MySQL错误日志添加一条注解。如果你不想用户干涉干涉大多数问题,你应使用BACKUP,FORCE选项。该选项强制维护表,即使一些行将会被删除也不例外,但它保持旧的数据文件做为备份,以便你可以在后来进行检查。

·         --ndb-connectstring=connect_string

当使用NDB存储引擎时,可以指出通过设置连接字符串选项来分发群集配置的管理服务器。相关语法参见17.4.4.2节,“MySQL簇连接字符串”

·         --ndbcluster

如果二进制支持NDB CLUSTER存储引擎,使用该选项可以代替禁用MySQL Cluster支持的 默认设置。参见第17章:MySQL簇

·         --old-passwords

强制服务器为新密码生成短(4.1)密码哈希。如果服务器必须支持旧客户端程序,为保证兼容性这很有用。参见5.7.9节,“MySQL 4.1中的密码哈希处理”

·         --one-thread

只使用一个线程(用于在Linux中调试)。只有服务器启用了调试,该选项才可用。参见E.1节,“调试MySQL服务器”

·         --open-files-limit=count

用来更改mysqld文件描述符的数量。如果没有设置或设置为0,则mysqld通过setrlimit()使用该值来保存文件描述符。如果该值为0,则mysqld 保存max_connections*5max_connections + table_cache*2(取较大者)个文件。如果mysqld给出你错误"打开的文件太多。",你应试试增加该值。

·         --pid-file=path

mysqld_safe使用的进程ID文件的路径。

·         --port=port_num, -P port_num

帧听TCP/IP连接时使用的端口号。

·         --safe-mode

跳过一些优化阶段。

·         (DEPRECATED) --safe-show-database

参见5.7.3节,“MySQL提供的权限”

·         --safe-user-create

启用后如果用户没有mysql.user表或表中列的INSERT权限,则用户不能用GRANT语句创建新用户。

·         --secure-auth

不允许使用旧(4.1之前)密码的账户进行鉴定。

·         --shared-memory

启用本地客户端的共享内存连接。该选项只用于Windows

·         --shared-memory-base-name=name

共享内存连接名。该选项只用于Windows

·         --skip-bdb

禁用BDB存储引擎。这样可以节省内存,并可能加速某些操作。如果你需要BDB表则不要使用该选项。

·         --skip-concurrent-insert

关闭在同一时间在MyISAM表中选择和插入的能力。(只有你发现缺陷时才使用该选项)

·         --skip-external-locking

不要使用系统锁定。要想使用myisamchk,你必须关闭服务器。(参见1.4.3节,“MySQL稳定性”要避免该需求,使用MySQL Monitor中的CHECK TABLEREPAIR TABLE来检查并维护MyISAM表。

·         --skip-grant-tables

该选项使服务器不使用权限系统。该权限允许访问服务器的用户不受限制地访问所有数据库。你可以从系统外壳命令行执行mysqladmin flush-privilegesmysqladmin reload命令,或执行MySQL FLUSH PRIVILEGES语句让运行的服务器重新开始使用 授权表。

·         --skip-host-cache

为了更快地在名称-IP之间进行解析,不要使用内部主机名缓存。相反,每次客户端连接时查询DNS服务器。参见7.5.6节,“MySQL如何使用DNS”

·         --skip-innodb

禁用InnoDB存储引擎。这样可以节省内存,并可能加速某些操作。如果你需要BDB表则不要使用该选项。

·         --skip-name-resolve

不要解析正检查客户端连接的主机名。只使用IP号。如果你使用该项, 授权表中的所有Host列值必须为IP号或localhost。参见7.5.6节,“MySQL如何使用DNS”

·         --skip-ndbcluster

禁用NDB CLUSTER存储引擎。这是支持NDB CLUSTER存储引擎的二进制的默认设置,说明只有用--ndbcluster选项显式覆盖--skip-ndbcluster选项时,系统才为该存储引擎分配内存和其它资源。使用示例参见17.4.3节,“MySQL簇的快速测试设置”

·         --skip-networking

不帧听TCP/IP连接。必须通过命名管道或共享内存(Windows)Unix套接字文件(Unix)完成mysqld的相互操作。对于只允许本地客户端的系统,大力推荐该选项。参见7.5.6节,“MySQL如何使用DNS”

·         --standalone

只适合基于Windows-NT的系统;指导MySQL服务器不做为服务来运行。

·         --symbolic-links, --skip-symbolic-links

启用或禁用符号链接支持。在WindowsUnix中,该选项的作用是不同的:

o        Windows中,启用符号链接,你可以通过创建包含实际目录路径的directory.sym文件来建立数据库目录的符号链接。参见7.6.1.3节,“在Windows平台上使用关于数据库的符号链接”

Unix中,启用符号链接表示你可以用CREATE TABLE语句的INDEX DIRECTORYDATA DIRECTORY选项将MyISAM索引文件或数据文件链接到另一个目录。如果你删除或重新命名表,符号链接所指的文件也被删除或重新命名。参见13.1.5节,“CREATE TABLE语法”

·         --skip-safemalloc

如果MySQL配置了--with-debug=full,所有MySQL程序在内存分配和释放时检查内存是否溢出。检查很慢,因此如果你不需要你可以用--skip-safemalloc选项来避免。

·         --skip-show-database

使用该选项,只允许具有SHOW DATABASES权限的用户执行SHOW DATABASES语句,该语句显示所有数据库名。不使用该选项,允许所有用户执行SHOW DATABASES,但只向具有SHOW DATABASES权限或部分数据库权限的用户显示每个数据库名。请注意全局权限为数据库的一种权限。

·         --skip-stack-trace

不跟踪写堆栈。当调试运行mysqld时该选项有用。在一些系统中,你还必须使用该选项来获得内核文件。参见E.1节,“调试MySQL服务器”

·         --skip-thread-priority

在快速响应中禁用线程优先级。

·         --socket=path

Unix中,该选项指定用于本地连接的Unix套接字文件。 默认值是/tmp/mysql.sock。在Windows中,该选项指定本地连接所使用的管道名。 默认值是MySQL

·         --sql-mode=value[,value[,value...]]

MySQL设置为SQL模式。参见5.3.2节,“SQL服务器模式”

·         --temp-pool

该选项使服务器创建的大多数临时文件使用一系列文件名,而不是每个新文件使用唯一的文件名。这样解决了在Linux内核中用 不同的名创建许多新文件的问题。在以前,Linux似乎“泄漏”内存,因为它被直接分配到directory entry缓存而不是硬盘缓存。

·         --transaction-isolation=level

设置默认事务隔离级别,可以READ-UNCOMMITTEDREAD-COMMITTEEREPEATABLE-READSERIALIZABLE。参见13.4.6节,“SET TRANSACTION语法”

·         --tmpdir=path, -t path

创建临时文件的目录路径。默认/tmp目录在太小不能容纳临时表的分区时该选项很有用。该选项接受round-robin模式的几个路径。在Unix中路径应用冒号(:) 间隔开,在WindowsNetWareOS/2中用分号() 间隔开。如果MySQL服务器为复制从机,你不应让--tmpdir指向基于内存的文件系统中的目录或服务器主机重启时会清除的目录。复制从机需要临时文件,机器重启时可以复制临时表或执行LOAD DATA INFILE操作。如果服务器重启时临时文件目录中的文件丢失,复制失败。

·         --user={user_name | user_id}, -u {user_name | user_id}

user_name或数字用户ID user_id运行mysqld服务器(用户”指系统登录账户,而不是 授权表中所列的MySQL用户)

root启动mysqld强制使用该选项。服务器在启动序列中更改用户ID,让它做为具体用户而不是root运行。参见5.6.1节,“通用安全指南”

要避免用户在my.cnf文件中添加--user=root选项(使服务器用root运行)时可能出现的安全漏洞,mysqld只使用指定的第1--user选项,如果有多个--user选项则会出现警告。在命令行选项前处理/etc/my.cnf$MYSQL_HOME/my.cnf中的选项,因此建议你在/etc/my.cnf中放一个--user选项,并指定root之外的其它值。在其它--user选项前先找到/etc/my.cnf中的选项,确保服务器用其它用户运行,如果找到其它--user选项则会出现警告。

·         --version, -V

显示版本信息并退出。

你可以使用--var_name=value形式的选项为服务器系统变量。例如,--key_buffer_size=32M将变量key_buffer_size设为32MB

请注意设置变量时,MySQL可以自动将它纠正到某个给定范围内,或如果只允许某个值,则将设置值调节到最接近允许的值。

还可以通过--set-variable=var_name=value-O var_name=value语法来设置变量。但是,现在不赞成使用该语法。

5.3.3节,“服务器系统变量”完全描述了全部系统变量。调节服务器参数部分包括如何对他们进行优化。参见7.5.2节,“调节服务器参数”

你可以用SET语句更改大多数服务器系统变量的值。参见13.5.3节,“SET语法”

如果你想用SET 限制启动项可设的最大值,你可以使用--maximum-var_name命令行选项来定义。