🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 第5章:数据库管理 本章涵盖了MySQL安装管理主题,例如配置服务器、管理用户账户和备份。 ### 5.1. MySQL服务器和服务器启动脚本 [ 5.1.1. 服务器端脚本和实用工具概述](#)[ 5.1.2. mysq**ld-max扩展My**SQL服务器](#)[ 5.1.3. mysqld_safe:MySQL服务器启动脚本](#)[ 5.1.4. mysql.server:MySQL服务器启动脚本](#)[ 5.1.5. mysqld_multi:管理多个MySQL服务器的程序](#) MySQL服务器,即**mysqld**,是在MySQL安装中负责大部分工作的主程序。服务器随附了几个相关脚本,当你安装MySQL时它们可以执行设置操作,或者是帮助你启动和停止服务器的帮助程序。 本节提供了服务器和相关程序的概述,以及服务器启动脚本相关信息。关于配置服务器的信息参见[5.3节,“mysqld:MySQL服务器”](# "5.3. mysqld — The MySQL Server")。 ### 5.1.1. 服务器端脚本和实用工具概述 MySQL程序采用各种不同的选项。但每个MySQL程序提供一个--help选项,你可以用来查阅程序选项相关说明。例如,你可以试试**mysqld --help**。 你可以在命令行中或在选项文件中指定选项来替换所有标准程序中的默认选项。参见[4.3节,“指定程序选项”](# "4.3. Specifying Program Options")。 下面简单描述了MySQL服务器和服务器相关程序: ·         **mysqld** SQL后台程序(即MySQL服务器)。要想使用客户端程序,该程序必须运行,因为客户端通过连接服务器来访问数据库。参见[5.3节,“mysqld:MySQL服务器”](# "5.3. mysqld — The MySQL Server")。 ·         mysqld-max 包括更多特性的一个服务器版本。参见[5.1.2节,“mysq**ld-max扩展My**SQL服务器”](# "5.1.2. The mysqld-max Extended MySQL Server") ·         mysqld_safe 服务器启动脚本。如果**mysqld-max**存在,**mysqld_safe**试图启动它,否则启动**mysqld**。参见[5.1.3节,“mysqld_safe:MySQL服务器启动脚本”](# "5.1.3. mysqld_safe — MySQL Server Startup Script")。 ·         mysql.server 服务器启动脚本。该脚本用于使用包含为特定级别的运行启动服务的脚本的运行目录的系统。它调用**mysqld_safe**来启动MySQL服务器。参见[5.1.4节,“mysql.server:MySQL服务器启动脚本”](# "5.1.4. mysql.server — MySQL Server Startup Script")。 ·         mysqld_multi 服务器启动脚本,可以启动或停止系统上安装的多个服务器。参见[5.1.5节,“mysqld_multi:管理多个MySQL服务器的程序”](# "5.1.5. mysqld_multi — Program for Managing Multiple MySQL Servers") ·         mysql_install_db 该脚本用默认权限创建MySQL授权表。通常只是在系统上首次安装MySQL时执行一次。参见[2.9.2节,“Unix下安装后的过程”](# "2.9.2. Unix Post-Installation Procedures")。 ·         ** mysql_fix_**** privilege_tables** 在升级安装后,如果新版本MySQL中的 授权表有更改,则使用该脚本来更改授权表。参见[2.10.2节,“升级授权表”](# "2.10.2. Upgrading the Grant Tables")。 服务器主机上还运行其它几个程序: ·         myisamchk 用来描述、检查、优化和维护MyISAM表的实用工具。在[5.9.5节,“myisamchk:MyISAM表维护实用工具”](# "5.9.5. myisamchk — MyISAM Table-Maintenance Utility")中描述了**myisamchk**。 ·         make_binary_distribution 该程序可以生成编译过的MySQL的二进制版本。可以通过FTP上传到ftp.mysql.com的/pub/mysql/upload/,供其它MySQL用户使用。 ·         mysqlbug MySQL 缺陷报告脚本。它可以用来向MySQL邮件系统发送缺陷报告。(你也可以访问[http://bugs.mysql.com/](http://bugs.mysql.com/)在线创建缺陷报告文件。参见[1.7.1.3节,“如何通报缺陷和问题”](# "1.7.1.3. How to Report Bugs or Problems"))。 ### 5.1.2. mysq**ld-max扩展My**SQL服务器 MySQL-Max服务器是**mysqld** MySQL服务器的一个版本,包含了更多的特性。 该分发版的使用取决于你的平台: ·         对于Windows,MySQL二进制分发版包括标准服务器 (mysqld.exe)和MySQL-Max服务器(**mysqld-max.exe**),因此你不再需要专用分发版。只需要使用一个常规Windows分发版,可以从[http://dev.mysql.com/downloads/](http://dev.mysql.com/downloads/)获得。参见[2.3节,“在Windows上安装MySQL”](# "2.3. Installing MySQL on Windows")。 ·         对于Linux,如果你使用RPM分发版安装MySQL,首先使用常规MySQL-server RPM来安装标准**mysqld**服务器。然后使用MySQL-Max RPM来安装**mysqld-max**服务器。MySQL-Max RPM假定你已经安装了常规服务器RPM。关于Linux RPM软件包的详细信息,参见[2.4节,“在Linux下安装MySQL”](# "2.4. Installing MySQL on Linux")。 ·         所有其它MySQL-Max分发版包含一个**mysqld**服务器,但具有更多的特性。 你可以从MySQL AB网址[http://dev.mysql.com/downloads/](http://dev.mysql.com/downloads/)找到MySQL-Max二进制版本。 MySQL AB使用下面的**configure**选项构建MySQL-Max服务器: ·         --with-server-suffix=-max 该选项为**mysqld**版本字符串添加一个-max后缀。 ·         --with-innodb 该选项启用InnoDB存储引擎支持。MySQL-Max服务器包括InnoDB支持。在MySQL 4.0及以上版本中,默认InnoDB包括在所有二进制分发版中,因此你不需要用MySQL-Max服务器只是用来获取InnoDB支持。 ·         --with-bdb 该选项启用Berkeley DB (BDB)存储引擎支持。 ·         --with-blackhole-storage-engine 该选项启用BLACKHOLE存储引擎支持。 ·         USE_SYMDIR 启用该定义来为Windows打开数据库符号链接支持。符号链接支持适用于所有Windows服务器,因此Max服务器不需要支持该特性。 ·         --with-ndbcluster 该选项启用NDB Cluster存储引擎支持。目前(5.1.2-alpha)只有Linux、Solaris和Mac OS X支持Cluster。已有一些用户报告在BSD 操作系统上成功使用了从源码构建的MySQL Cluster,但目前还没有得到官方支持。 MySQL-Max二进制分发版对于想要安装预编译程序的用户很方便。如果你使用源码分发版构建MySQL,你可以通过在配置时启用MySQL-Max二进制分发版构建所用的相同的特性来构建你自己的Max-like服务器。 MySQL-Max服务器包括BerkeleyDB (BDB)存储引擎,但并非所有平台支持BDB。 Solaris、Mac OS X和Linux(在大多数平台上)的MySQL-Max服务器包括NDB CLUSTER存储引擎支持。请注意必须用ndbcluster选项启动服务器,以便使服务器做为MySQL Cluster的一部分来运行。(详细信息参见[17.4节,“MySQL簇的配置”](# "17.4. MySQL Cluster Configuration"))。 下面的表显示了MySQL-Max二进制在哪个平台上包括BDB和/或NDB CLUSTER支持: <table border="1" cellpadding="0" id="table1"><tr><td> <p><strong><span>系统</span></strong></p></td> <td> <p><strong> <span>BDB</span><span>支持</span></strong></p></td> <td> <p><strong> <span>NDB</span><span>支持</span></strong></p></td> </tr><tr><td> <p><span>AIX 4.3</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>HP-UX 11.0</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>Linux-Alpha</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>Y</span></p></td> </tr><tr><td> <p><span>Linux-IA-64</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>Linux-Intel</span></p></td> <td> <p><span>Y</span></p></td> <td> <p><span>Y</span></p></td> </tr><tr><td> <p><span>Mac OS X</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>NetWare</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>SCO OSR5</span></p></td> <td> <p><span>Y</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>Solaris-SPARC</span></p></td> <td> <p><span>Y</span></p></td> <td> <p><span>Y</span></p></td> </tr><tr><td> <p><span>Solaris-Intel</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>Y</span></p></td> </tr><tr><td> <p><span>UnixWare</span></p></td> <td> <p><span>Y</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>Windows NT/2000/XP</span></p></td> <td> <p><span>Y</span></p></td> <td> <p><span>N</span></p></td> </tr></table> 要想找出你的服务器支持哪个存储引擎,执行下面的语句: mysql> SHOW ENGINES; +------------+---------+----------------------------------------------------------------+ | Engine     | Support | Comment                                                        | +------------+---------+----------------------------------------------------------------+ | MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance         | | MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables      | | HEAP       | YES     | Alias for MEMORY                                               | | MERGE      | YES     | Collection of identical MyISAM tables                          | | MRG_MYISAM | YES     | Alias for MERGE                                                | | ISAM       | NO      | Obsolete storage engine, now replaced by MyISAM                | | MRG_ISAM   | NO      | Obsolete storage engine, now replaced by MERGE                 | | InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys     | | INNOBASE   | YES     | Alias for INNODB                                               | | BDB        | YES     | Supports transactions and page-level locking                   | | BERKELEYDB | YES     | Alias for BDB                                                  | | NDBCLUSTER | NO      | Clustered, fault-tolerant, memory-based tables                 | | NDB        | NO      | Alias for NDBCLUSTER                                           | | EXAMPLE    | NO      | Example storage engine                                         | | ARCHIVE    | YES     | Archive storage engine                                         | | CSV        | NO      | CSV storage engine                                             | | FEDERATED  | YES     | Federated MySQL storage engine                                 | | BLACKHOLE  | YES     | /dev/null storage engine (anything you write to it disappears) | +------------+---------+----------------------------------------------------------------+ 18 rows in set (0.00 sec) (另参见[13.5.4.8节,“SHOW ENGINES语法”](# "13.5.4.8. SHOW ENGINES Syntax"))。 你还可以使用下面的语句代替SHOW ENGINES,并检查你感兴趣的存储引擎的变量值: mysql> SHOW VARIABLES LIKE 'have%'; +-----------------------+----------+ | Variable_name         | Value    | +-----------------------+----------+ | have_archive          | YES      | | have_bdb              | NO       | | have_blackhole_engine | YES      | | have_compress         | YES      | | have_crypt            | YES      | | have_csv              | YES      | | have_example_engine   | NO       | | have_federated_engine | NO       | | have_geometry         | YES      | | have_innodb           | YES      | | have_isam             | NO       | | have_ndbcluster       | DISABLED | | have_openssl          | NO       | | have_partition_engine | YES      | | have_query_cache      | YES      | | have_raid             | NO       | | have_rtree_keys       | YES      | | have_symlink          | YES      | +-----------------------+----------+ 18 rows in set (0.01 sec) SHOW命令的精确输出随使用的MySQL版本(和启用的特性)的不同而有变化。第2列的值表示各特性支持的服务器级别,如下所示: <table border="1" cellpadding="0" id="table2"><tr><td> <p><strong><span>值</span></strong></p></td> <td> <p><strong><span>含义</span></strong></p></td> </tr><tr><td> <p> <span>YES</span></p></td> <td> <p><span> </span>支持该特性并已经激活。</p></td> </tr><tr><td> <p> <span>NO</span></p></td> <td> <p><span> </span>不支持该特性。</p></td> </tr><tr><td> <p> <span>DISABLED</span></p></td> <td> <p><span> </span>支持该特性但被禁用。</p></td> </tr></table> NO值表示编译的服务器不支持该特性,因此在运行时不能激活。 出现DISABLED值是因为服务器启动时该特性被禁用,或没有给出启用它的所有选项。在后一种情况,_host_名.err_错误日志文件应包含该选项被禁用的原因。 如果服务器支持InnoDB或BDB存储引擎,你还可以看见DISABLED,但在运行启动时使用了--skip-innodb或--skip-bdb选项。对于NDB CLUSTER存储引擎,DISABLED表示服务器支持MySQL Cluster,但启动时未启用--ndb-cluster选项。 所有MySQL服务器支持MyISAM表,因为MyISAM是 默认存储引擎。 ### 5.1.3. mysqld_safe:MySQL服务器启动脚本 在Unix和NetWare中推荐使用**mysqld_safe**来启动**mysqld服务器**。**mysqld_safe**增加了一些安全特性,例如当出现错误时重启服务器并向错误日志文件写入运行时间信息。本节后面列出了NetWare的特定行为。 **注**释:为了保持同旧版本MySQL的向后兼容性,MySQL二进制分发版仍然包括**safe_mysqld**作为**mysqld_safe**的符号链接。但是,你不应再依赖它,因为再将来将删掉它。 默认情况下,**mysqld_safe**尝试启动可执行**mysqld-max**(如果存在),否则启动**mysqld**。该行为的含义是: ·         在Linux中,MySQL-Max RPM依赖该**mysqld_safe**的行为。RPM安装可执行**mysqld-max**,使**mysqld_safe**从该点起自动使用可执行命令。 ·         如果你安装包括**mysqld-max**服务器的MySQL-Max分发版,后面升级到非-Max的MySQL版本,**mysqld_safe**仍然试图运行旧的 **mysqld-max服务器**。升级时,你应手动删除旧的**mysqld-max服务器**以确保**mysqld_safe**运行新的**mysqld服务器**。 要想越过默认行为并显式指定你想要运行哪个服务器,为**mysqld_safe**指定--mysqld或--mysqld-version选项。 **mysqld_safe**的许多选项与**mysqld**的相同的。参见[5.3.1节,“**mysqld**命令行选项”](# "5.3.1. mysqld Command-Line Options")。 所有在命令行中为**mysqld_safe**指定的选项被传递给**mysqld。**如果你想要使用**mysqld**不支持的**mysqld_safe的**选项,不要在命令行中指定。相反,在选项文件的[mysqld_safe]组内将它们列出来。参见[4.3.2节,“使用选项文件”](# "4.3.2. Using Option Files")。 **mysqld_safe**从选项文件的[mysqld]、[server]和[mysqld_safe]部分读取所有选项。为了保证向后兼容性,它还读取 [safe_mysqld]部分,尽管在MySQL 5.1安装中你应将这部分重新命名为[mysqld_safe]。 **mysqld_safe**支持下面的选项: ·         --help 显示帮助消息并退出。 ·         --autoclose (只在NetWare中)在NetWare中,**mysqld_safe**可以保持窗口。当你关掉**mysqld_safe** NLM时,窗口不按默认设置消失。相反,它提示用户输入: *<NLM has terminated; Press any key to close the screen>* 如果你想让NetWare自动关闭窗口,在**mysqld_safe**中使用--autoclose选项。 ·         --basedir=_path_ MySQL安装目录的路径。 ·         --core-file-size=_size_ **mysqld**能够创建的内核文件的大小。选项值传递给**ulimit -c**。 ·         --datadir=_path_ 数据目录的路径。 ·           --defaults-extra-file=_path_ 除了通用选项文件所读取的选项文件名。如果给出,必须首选该选项。 ·         --defaults-file=_path_ 读取的代替通用选项文件的选项文件名。如果给出,必须首选该选项。 ·         --ledir=_path_ 包含**mysqld**程序的目录的路径。使用该选项来显式表示服务器位置。 ·         --log-error=_path_ 将错误日志写入给定的文件。参见[5.11.1节,“错误日志”](# "5.11.1. The Error Log")。 ·         --mysqld=_prog___name_ 想要启动的服务器程序名(在ledir目录)。如果你使用MySQL二进制分发版但有二进制分发版之外的数据目录需要该选项。 ·         --mysqld-version =_suffix_ 该选项类似--mysqld选项,但你只指定服务器程序名的后缀。基本名假定为**mysqld。**例如,如果你使用--mysqld-version =max,**mysqld_safe**启动ledir目录中的**mysqld-max**程序。如果--mysqld-version的参数为空,**mysqld_safe**使用目录中的**mysqld**。 ·         --nice=_priority_ 使用nice程序根据给定值来设置服务器的调度优先级。 ·         --no-defaults 不要读任何选项文件。如果给出,必须首选该选项。 ·         --open-files-limit=_count_ **mysqld**能够打开的文件的数量。选项值传递给 **ulimit -n**。请注意你需要用root启动**mysqld_safe**来保证正确工作! ·         --pid-file=path 进程ID文件的路径。 ·         --port=_port_num_  用来帧听TCP/IP连接的端口号。端口号必须为1024或更大值,除非MySQL以root系统用户运行。 ·         --skip-character-set-client-handshake 忽略客户端发送的字符集信息,使用服务器的默认字符集。(选择该选项,MySQL的动作与MySQL 4.0相同)。 ·         --socket=path 用于本地连接的Unix套接字文件。 ·         --timezone=_zone_ 为给定的选项值设置TZ时区环境变量。从操作系统文档查阅合法的时区规定格式。 ·         --user={_user_name_ | _user_id_} 以用户名_user_name_或数字用户ID_ user_id_运行**mysqld服务器**。(本文中的“用户”指系统登录账户,而不是 授权表中的MySQL用户)。 执行**mysqld_safe**时,必须先给出--defaults-file或--defaults-extra-option,或不使用选项文件。例如,该命令将不使用选项文件: mysqld_safe --port=port_num --defaults-file=file_name 相反,使用下面的命令: mysqld_safe --defaults-file=file_name --port=port_num 一般情况**mysqld_safe**脚本可以启动从源码或二进制MySQL分发版安装的服务器,即使这些分发版将服务器安装到稍微不同的位置。(参见[2.1.5节,“安装布局”](# "2.1.5. Installation Layouts"))。 ** mysqld_safe**期望下面的其中一个条件是真的: ·         可以根据调用**mysqld_safe**的目录找到服务器和数据库。在二进制分发版中,**mysqld_safe**看上去在bin和data目录的工作目录下。对于源码分发版,为libexec和var目录。如果你从MySQL安装目录执行**mysqld_safe**应满足该条件(例如,二进制分发版为/usr/local/mysql)。 ·         如果不能根据工作目录找到服务器和数据库,**mysqld_safe**试图通过绝对路径对它们定位。典型位置为/usr/local/libexec和/usr/local/var。实际位置由构建分发版时配置的值确定如果MySQL安装到配置时指定的位置,它们应该是正确的。 因为**mysqld_safe**试图通过工作目录找到服务器和数据库,只要你从MySQL安装目录运行**mysqld_safe****,**可以将MySQL二进制分发版安装到其它位置: shell> cd mysql_installation_directory shell> bin/mysqld_safe & 如果**mysqld_safe**失败,即使从MySQL安装目录调用仍然失败,你可以指定--ledir和--datadir选项来指示服务器和数据库在你的系统中的安装目录。 一般情况,你不应编辑**mysqld_safe**脚本。相反,应使用命令行选项或my.cnf选项文件的[mysqld_safe]部分的选项来配置**mysqld_safe**。一般不需要编辑**mysqld_safe**来正确启动服务器。但是,如果你编辑,将来升级MySQL后会覆盖你修改的**mysqld_safe**版本,因此你应对你修改的版本进行备份以便将来重装。 在NetWare中,**mysqld_safe**是一个NetWare Loadable Module (NLM),从原Unix shell脚本移植。它执行: 1.    检查系统和选项。 2.    检查MyISAM表。 3.    保持MySQL服务器窗口。 4.    启动并监视**mysqld**,如果因错误终止则重启。 5.    **将mysqld的**错误消息发送到数据目录中的_host_name.err _文件。 6.    将**mysqld_safe**的屏幕输出发送到数据目录中的_host_name.safe_文件。 ### 5.1.4. mysql.server:MySQL服务器启动脚本 在Unix中的MySQL分发版包括**mysql.server**脚本。它可以用于使用System V-style运行目录来启动和停止系统服务的系统,例如Linux和Solaris。它还用于MySQL的Mac OS X Startup Item。 **mysql.server**位于MySQL源码树MySQL安装目录下的support-files目录中。 如果你使用Linux 服务器RPM软件包(MySQL-server-VERSION.rpm),**mysql.server**脚本将安装到/etc/init.d目录下,名为mysql。你不需要 手动安装。关于Linux RPM软件包的详细信息参见[2.4节,“在Linux下安装MySQL”](# "2.4. Installing MySQL on Linux")。 一些卖方提供的RPM软件包安装的启动脚本用其它名,例如**mysqld。** 如果你从不自动安装**mysql.server**的源码分发版或二进制分发版格式安装MySQL,也可以手动安装。相关说明参见[2.9.2.2节,“自动启动和停止MySQL”](# "2.9.2.2. Starting and Stopping MySQL Automatically")。 **mysql.server**从 [mysql.server]和选项文件的[mysqld]部分读取选项。(为了保证向后兼容性,它还读取 [safe_mysqld]部分,尽管在MySQL 5.1安装中你应将这部分重新命名为[mysqld_safe])。 ### 5.1.5. mysqld_multi:管理多个MySQL服务器的程序 **mysqld_multi**可以管理多个帧听不同Unix套接字文件和TCP/IP端口的连接的**mysqld**进程。它可以启动或停止服务器,或报告它们的当前状态。 程序寻找my.cnf中的[mysqld_N_]组(或--config-file选项指定的文件)。_N_可以为任何正整数。在下面的讨论中该数字指选项组号,或_GNR_。组号区别各选项组,并用作**mysqld_multi**的参数来指定想要启动、停止哪个服务器或获取哪个服务器的状态报告。这些组中的选项与将用来启动**mysqld**的[mysqld]组中的相同。(例如,参见[2.9.2.2节,“自动启动和停止MySQL”](# "2.9.2.2. Starting and Stopping MySQL Automatically"))。但是,当使用多个服务器时,需要每个服务器使用自己的选项值,例如Unix套接字文件和TCP/IP端口号。关于在多服务器环境中,每个服务器对应唯一选项的详细信息,参见[5.12节,“在同一台机器上运行多个MySQL服务器”](# "5.12. Running Multiple MySQL Servers on the Same Machine")。 要想调用**mysqld_multi**,使用下面的语法: shell> mysqld_multi [options] {start|stop|report} [GNR[,GNR] ...] start、stop和report表示你想要执行的操作。你可以在单个服务器或多个服务器上执行指定的操作,取决于选项名后面的_GNR_列。如果没有该列,**mysqld_multi**为选项文件中的所有服务器执行该操作。 每个_GNR_值代表一个选项组号或组号范围。_GNR_值应为选项文件中组名末尾的号。例如,组[mysqld17]的_GNR_为17。要想指定组号的范围,用破折号间隔开第1个和最后1个号。_GNR_值10-13代表组[mysqld10]到[mysqld13]。可以在命令行中指定多个组或组范围,用逗号间隔开。_GNR_列不能有空格字符(空格或tab);空格字符后面的内容将被忽略掉。 该命令使用选项组[mysqld17]启动单个服务器: shell> mysqld_multi start 17 该命令停止多个服务器,使用选项组[mysql8]和[mysqld10]至[mysqld13]: shell> mysqld_multi stop 8,10-13 使用该命令列出设置选项文件的示例: shell> mysqld_multi --example **mysqld_multi**支持下面的选项: ·         --config-file=_name_ 指定选项文件名。这关系到**mysqld_multi**从哪里寻找[mysqld_N_]选项组。没有该选项,从通用my.cnf文件读所有选项。选项不影响 **mysqld_multi**从哪里读取自己的选项,总是从通用my.cnf文件的[mysqld_multi]组读取。 ·         --example 显示示例选项文件。 ·         --help 显示帮助消息并退出。 ·         --log=_name_ 指定日志文件名。如果该文件存在,后面为日志输出。 ·         --mysqladmin=_prog_name_ 用来停止服务器的**mysqladmin**二进制。 ·         --mysqld=_prog_name_ 可用的**mysqld**二进制。请注意你还可以将该选项的值指定为**mysqld_safe**。选项被传递给 **mysqld。**确保在PATH环境变量设定值或**mysqld_safe**中有**mysqld**所在目录。 ·         --no-log 按照标准输出打印日志信息,不要写入日志文件。默认情况下,输出写入日志文件。 ·         --password=_password_ 调用**mysqladmin**时使用的MySQL账户的密码。请注意该密码值不是可选项,不象其它MySQL程序。 ·         --silent 禁用警告。 ·         --tcp-ip 通过TCP/IP端口而不是Unix套接字文件来连接每个MySQL服务器。(如果找不到套接字文件, 服务器仍然可以运行,但只能通过 TCP/IP端口访问)。默认情况下,使用Unix套接字文件进行连接。该选项影响stop和report操作。 ·         --user=_user_name_ 调用**mysqladmin**时使用的MySQL账户的用户名。 ·         --verbose 更详细。 ·         --version 显示版本信息并退出。 关于**mysqld_multi**的一些注解: ·         确保停止**mysqld服务器**(用**mysqladmin**程序)的MySQL账户在各个服务器中的用户名和密码相同。并且应确保账户具有SHUTDOWN权限。如果你想要管理的服务器的管理账户有许多不同的用户名或密码,你需要在每个服务器上创建一个账户,并具有相同的用户名和密码。例如,你可以执行下面的命令为每个服务器设置一个普通multi_admin账户: ·                shell> mysql -u root -S /tmp/mysql.sock -proot_password ·                mysql> GRANT SHUTDOWN ON *.* ·                    -> TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass'; 参见[5.7.2节,“权限系统工作原理”](# "5.7.2. How the Privilege System Works")。你必须为每个**mysqld服务器执行该操作**。当连接时适当更改连接参数。请注意账户名的主机部分必须允许你用multi_admin从你想要运行**mysqld_multi**的主机进行连接。 ·         如果你使用**mysqld_safe**来启动**mysqld**(例如,--mysqld=mysqld_safe),--pid-file选项很重要。每个**mysqld**应有自己的进程ID文件。使用**mysqld_safe**而不使用**mysqld**的好处是**mysqld_safe**“守护”其**mysqld**进程,如果用kill –9发送的信号或由于其它原因(例如分段故障)进程终止,则重启进程。请注意**mysqld_safe**脚本需要你从某个位置启动它。这说明运行**mysqld_multi**前你必须进入某个目录。如果启动时有问题,请参见**mysqld_safe**脚本。特别是要检查下列行: ·                ---------------------------------------------------------------- ·                MY_PWD=`pwd` ·                # Check if we are starting this relative (for the binary release) ·                if test -d $MY_PWD/data/mysql -a -f ./share/mysql/english/errmsg.sys -a \ ·                -x ./bin/mysqld ·                ---------------------------------------------------------------- 参见[5.1.3节,“mysqld_safe:MySQL服务器启动脚本”](# "5.1.3. mysqld_safe — MySQL Server Startup Script")。上述行执行的测试应成功,否则你可能遇到了问题。 ·         每个**mysqld**的Unix套接字文件和TCP/IP端口号必须不同。 ·         你可能想要为**mysqld**使用--user选项,但为此你需要用Unix root用户运行**mysqld_multi**脚本。选项文件中有选项不要紧;如果你不是超级用户,并且你用自己的Unix账户重启**mysqld**进程,你只会得到警告。 ·         **重要**:确保**mysqld**进程启动所用Unix账户可以完全访问数据目录。_不要_使用Unix root账户,除非你_知道_你在做什么。 ·         **非常重要**:使用**mysqld_multi**前,确保理解传递给**mysqld服务器的**选项的含义以及你_为什么_想要独立的**mysqld**进程。应清楚 在相同的数据目录下使用多个**mysqld服务器**的危险。使用单独的数据目录,除非你_知道_你在做什么。在线程系统中,在相同的数据目录下启动多个服务器不会得到超性能。参见[5.12节,“在同一台机器上运行多个MySQL服务器”](# "5.12. Running Multiple MySQL Servers on the Same Machine")。 下面的示例显示了你如何设置选项文件来使用**mysqld_multi**。专门省去第1个和第5个[mysqld_N_]组来说明你的选项文件可以稍有不同。这样给你更大的灵活性。**mysqld**程序重启或停止的顺序由它们在选项文件中的顺序决定。 # This file should probably be in your home dir (~/.my.cnf) # or /etc/my.cnf # Version 2.1 by Jani Tolonen   [mysqld_multi] mysqld     = /usr/local/bin/mysqld_safe mysqladmin = /usr/local/bin/mysqladmin user       = multi_admin password   = multipass   [mysqld2] socket     = /tmp/mysql.sock2 port       = 3307 pid-file   = /usr/local/mysql/var2/hostname.pid2 datadir    = /usr/local/mysql/var2 language   = /usr/local/share/mysql/english user       = john   [mysqld3] socket     = /tmp/mysql.sock3 port       = 3308 pid-file   = /usr/local/mysql/var3/hostname.pid3 datadir    = /usr/local/mysql/var3 language   = /usr/local/share/mysql/swedish user       = monty   [mysqld4] socket     = /tmp/mysql.sock4 port       = 3309 pid-file   = /usr/local/mysql/var4/hostname.pid4 datadir    = /usr/local/mysql/var4 language   = /usr/local/share/mysql/estonia user       = tonu   [mysqld6] socket     = /tmp/mysql.sock6 port       = 3311 pid-file   = /usr/local/mysql/var6/hostname.pid6 datadir    = /usr/local/mysql/var6 language   = /usr/local/share/mysql/japanese user       = jani 参见[4.3.2节,“使用选项文件”](# "4.3.2. Using Option Files")。 ### 5.2. mysqlmanager:MySQL实例管理器 [ 5.2.1. 用MySQL实例管理器启动MySQL服务器](#)[ 5.2.2. 连接到MySQL实例管理器并创建用户账户](#)[ 5.2.3. MySQL实例管理器命令行选项](#)[ 5.2.4. MySQL实例管理器配置文件](#)[ 5.2.5. MySQL实例管理器识别的命令](#) MySQL实例管理器(IM)是通过TCP/IP端口运行的后台程序,用来监视和管理MySQL数据库服务器实例。MySQL实例管理器 适合Unix-类操作系统和Windows。 可以在mysqld_safe脚本使用MySQL实例管理器来启动和停止MySQL服务器,**甚至可以从一个远程主机**。MySQL实例管理器还执行**mysqld_multi**脚本的功能(和大多数语法)。下面为MySQL实例管理器的详细描述。 ### 5.2.1. 用MySQL实例管理器启动MySQL服务器 一般情况,用**mysql.server**脚本启动MySQL Database Server(MySQL数据库服务器),通常驻留在/etc/init.d/文件夹。默认情况下该脚本调用**mysqld_safe**脚本。但是,你可以在脚本中将use_mysqld_safe变量设置为0(零)以便使用MySQL实例管理器来启动服务器。 在这种情况下,Instance Manager的行为取决于MySQL配置文件中的选项。如果没有配置文件,MySQL实例管理器创建mysqld实例并试图用默认(编译嵌入的)配置来启动。这说明如果**mysqld没有**安装到 默认位置,IM不能猜出它的位置。如果你已经在非标准位置安装了MySQL服务器,你应使用配置文件。参见[2.1.5节,“安装布局”](# "2.1.5. Installation Layouts")。 如果有配置文件,IM将分析配置文件搜索[mysqld]部分(例如[mysqld]、[mysqld1]、[mysqld2]等)。每个部分指定一个实例。启动时IM将启动所有找到的实例。IM关闭时默认停止所有实例。 请注意有一个特殊选项mysqld-path(mysqld-path = _path-to-mysqld- binary_),只能用IM识别。使用该变量让IM知道**mysqld**二进制驻留在哪儿。你还应该为服务器设置basedir和datadir选项。 启用MySQL实例管理器的典型MySQL服务器启动/关闭循环为: ·          用**/etc/init.d/mysql**脚本启动MySQL实例管理器。 ·          MySQL实例管理器启动所有实例并监视它们。 ·         如果某个服务器实例失败,MySQL实例管理器重启它。 ·         如果MySQL实例管理器被关闭(例如用**/etc/init.d/mysql stop**命令),所有实例被MySQL实例管理器关闭。 ### 5.2.2. 连接到MySQL实例管理器并创建用户账户 使用MySQL客户端-服务器协议来处理同MySQL实例管理器之间的通信。你不能使用标准**mysql**客户端程序和MySQL C API来连接IM。IM支持客户端工具和mysql-4.1或以后的版本所分发的库所用的MySQL客户端-服务器协议版本。 IM将用户信息保存到密码文件中。密码文件的默认位置为/etc/mysqlmanager.passwd。 密码应类似于: petr:*35110DC9B4D8140F5DE667E28C72DD2597B5C848 要想生成密码用**--passwd**选项调用IM。则输出可以重定向到/etc/mysqlmanager.passwd文件以添加新用户。下面为示例命令。 ./mysqlmanager --passwd >> /etc/mysqlmanager.passwd Creating record for new user. Enter user name: mike Enter password: <password> Re-type password: <password> 下面的行将加到/etc/mysqlmanager.passwd: mike:*00A51F3F48415C7D4E8908980D443C29C69B60C9 如果/etc/mysqlmanager.passwd文件中没有该条,则不能连接IM。 ### 5.2.3. MySQL实例管理器命令行选项 MySQL实例管理器支持许多命令行选项。执行**./mysqlmanager --help**命令可以简单列出。有下面的选项: ·         --help,-? 显示帮助消息并退出。 ·         --bind-address=_name_ 绑定地址用于连接。 ·         --default-mysqld-path=_name_ 在Unix中,如果实例部分没有路径,则为寻找MySQL服务器二进制的地点。例如:default-mysqld-path = /usr/sbin/mysqld ·         --defaults-file=_file_name_ 从给定文件读Instance Manager和MySQL服务器设定值。所有Instance Manager更改的配置将加入该文件。只能用于Instance Manager的第一选项。 ·         --install 在Windows中,将Instance Manager安装为Windows服务。 ·         --log=_name_ IM日志文件的路径。结合**--run-as-service**选项使用。 ·         --monitoring-interval=_Seconds_ 监视实例的间隔,单位为秒。Instance Manager将尝试连接每个监视的实例来检查它们是否是活动的/没有挂起。出现故障,IM将重启几次(实际上是多次)实例。可以用nonguarded选项为特定实例禁用该行为。如果未给定任何值, 默认使用20秒。 ·         --passwd,-P 编写passwd文件并退出。 ·         --password-file=_name_ 从该文件中寻找Instance Manager用户和密码。默认文件是/etc/mysqlmanager.passwd。 ·         --pid-file=_name_ 使用的进程ID文件。默认情况下,该文件文件名为mysqlmanager.pid。 ·         -- port=_port_num_ 用于连接的端口号。(IANA分配的 默认端口号为2273)。 ·         --print-defaults 打印当前的默认值并退出。只能用作Instance Manager的第一选项。 ·         --remove 在Windows中,删掉Instance Manager Windows服务。假定前面已经用--install运行了Instance Manager。 ·         --run-as-service 使完善进程变为后台程序并启动。完善进程很简单,不易崩溃。出现故障后它将自己重启IM。 ·         --socket=_name_ Unix中用于连接的套接字文件。默认情况下,文件名为/tmp/mysqlmanager.sock。 ·         --standalone 在Windows中以单机模式运行Instance Manager。 ·         --user=_name_ 启动并运行**mysqlmanager**的用户名。建议使用运行**mysqld服务器**的用户账户来运行**mysqlmanager**。 ·         --version, -V 输出版本信息并退出。 ### 5.2.4. MySQL实例管理器配置文件 Instance Manager使用标准my.cnf文件。它使用[manager]部分为自己读取选项并读取[mysqld]部分来创建实例。[manager]部分包含上述列出的选项。下面为[manager]部分示例: # MySQL Instance Manager options section [manager] default-mysqld-path = /usr/local/mysql/libexec/mysqld socket=/tmp/manager.sock pid-file=/tmp/manager.pid password-file = /home/cps/.mysqlmanager.passwd monitoring-interval = 2 port = 1999 bind-address = 192.168.1.5 MySQL实例管理器只在Unix中读取并管理/etc/my.cnf文件。在Windows中,MySQL实例管理器从Instance Manager的安装目录读取my.ini文件。用--defaults-file=_file_ name_选项可以更改默认选项文件的位置。 实例部分指定启动时给每个实例的选项。这些主要是普通MySQL服务器选项,但有一些IM-专用选项: ·         mysqld-path = <path-to-mysqld-binary> **mysqld服务器**二进制的路径。 ·         shutdown-delay = _ Seconds_ IM应等待实例关闭的秒数。 默认为35秒。超过延迟时间后,IM假定实例正挂起并试图“kill –9”它。如果你使用带large表的InnoDB,你应当增加该值。 ·         nonguarded 如果你想要为某个实例禁用IM监视功能,应设置该选项。 下面给出了几个实例示例。 [mysqld] mysqld-path=/usr/local/mysql/libexec/mysqld socket=/tmp/mysql.sock port=3307 server_id=1 skip-stack-trace core-file skip-bdb log-bin log-error log=mylog log-slow-queries   [mysqld2] nonguarded port=3308 server_id=2 mysqld-path= /home/cps/mysql/trees/mysql-5.1/sql/mysqld socket     = /tmp/mysql.sock5 pid-file   = /tmp/hostname.pid5 datadir= /home/cps/mysql_data/data_dir1 language=/home/cps/mysql/trees/mysql-5.1/sql/share/english log-bin log=/tmp/fordel.log ### 5.2.5. MySQL实例管理器识别的命令 一旦你已经为MySQL实例管理器设置了一个密码文件并且IM正在运行,你可以连接它。你可以使用**mysql**客户端工具通过标准MySQL API来连接。以下是MySQL实例管理器目前可以接收的命令的清单和例子。 ·         START INSTANCE <instance_name> 该命令将试图启动一个实例: mysql> START INSTANCE mysqld4; Query OK, 0 rows affected (0,00 sec) ·         STOP INSTANCE <instance_name> 将试图停止一个实例: mysql> STOP INSTANCE mysqld4; Query OK, 0 rows affected (0,00 sec) ·         SHOW INSTANCES 显示所有载入的实例名: mysql> show instances; +---------------+---------+ | instance_name | status  | +---------------+---------+ | mysqld3       | offline | | mysqld4       | online  | | mysqld2       | offline | +---------------+---------+ 3 rows in set (0,04 sec) ·         SHOW INSTANCE STATUS <instance_name> 显示选定的实例的状态和版本信息: mysql> SHOW INSTANCE STATUS mysqld3; +---------------+--------+---------+ | instance_name | status | version | +---------------+--------+---------+ | mysqld3       | online | unknown | +---------------+--------+---------+ 1 row in set (0.00 sec) ·         SHOW INSTANCE OPTIONS <instance_name> 显示实例使用的选项: mysql> SHOW INSTANCE OPTIONS mysqld3; +---------------+---------------------------------------------------+ | option_name   | value                                             | +---------------+---------------------------------------------------+ | instance_name | mysqld3                                           | | mysqld-path   | /home/cps/mysql/trees/mysql-4.1/sql/mysqld        | | port          | 3309                                              | | socket        | /tmp/mysql.sock3                                  | | pid-file      | hostname.pid3                                     | | datadir       | /home/cps/mysql_data/data_dir1/                   | | language      | /home/cps/mysql/trees/mysql-4.1/sql/share/english | +---------------+---------------------------------------------------+ 7 rows in set (0.01 sec) ·         SHOW <instance_name> LOG FILES 该命令提供实例使用的所有日志文件。结果包含日志文件的路径和日志文件的大小。如果没有在配置文件中指定日志文件的路径 (例如log=/var/mysql.log),IM试图猜出它的位置。如果IM不能猜出日志文件的位置,你应明确指定日志文件的位置。 mysql> SHOW mysqld LOG FILES; +-------------+------------------------------------+----------+ | Logfile     | Path                               | Filesize | +-------------+------------------------------------+----------+ | ERROR LOG   | /home/cps/var/mysql/owlet.err      | 9186     | | GENERAL LOG | /home/cps/var/mysql/owlet.log      | 471503   | | SLOW LOG    | /home/cps/var/mysql/owlet-slow.log | 4463     | +-------------+------------------------------------+----------+ 3 rows in set (0.01 sec) ·         SHOW <instance_name> LOG {ERROR | SLOW | GENERAL} size[,offset_from_end] 该命令查找指定的日志文件的一部分。因为大多数用户关注最新的日志消息,用size参数定义你想要从日志末尾开始索取的字节数。你可以指定可选offset_from_end参数从日志文件中部索取数据。下面的示例可以索取21个字节的数据,从日志文件末尾开始23个字节,2个字节用于结束: mysql> SHOW mysqld LOG GENERAL 21, 2; +---------------------+ | Log                 | +---------------------+ | using password: YES | +---------------------+ 1 row in set (0.00 sec) ·         SET instance_name.option_name=option_value 该命令编辑指定的实例的配置文件以更改/增加实例选项。IM假定配置文件位于/etc/my.cnf。你应检查文件是否存在,并具有合适的权限。 mysql> SET mysqld2.port=3322; Query OK, 0 rows affected (0.00 sec) 在MySQL服务器重启前,对配置文件进行的更改不会生效。并且,执行FLUSH INSTANCES命令后,才会将这些更改保存到Instance Manager的实例设定值的本地缓存中。 ·         UNSET instance_name.option_name 该命令从实例的配置文件删除一个选项。 mysql> UNSET mysqld2.port; Query OK, 0 rows affected (0.00 sec) 在MySQL服务器重启前,对配置文件进行的更改不会生效。并且,执行FLUSH INSTANCES命令后,才会将这些更改保存到Instance Manager的实例设定值的本地缓存中。 ·         FLUSH INSTANCES 该命令强制IM重读配置文件并清空内部结构。编辑配置文件后应执行该命令。该命令不重启实例: mysql> FLUSH INSTANCES; Query OK, 0 rows affected (0.04 sec) ### 5.3. mysqld:MySQL服务器 [5.3.1. ** mysqld**命令行选项](#)[ 5.3.2. SQL服务器模式](#)[ 5.3.3. 服务器系统变量](#)[ 5.3.4. 服务器状态变量](#) **mysqld**是MySQL服务器。下面讨论MySQL服务器的配置: ·         服务器支持的启动选项 ·         如何设置服务器SQL模式 ·         服务器系统变量 ·         服务器状态变量 ### 5.3.1. **mysqld**命令行选项 当启动**mysqld服务器**时,你可以使用[4.3节,“指定程序选项”](# "4.3. Specifying Program Options")中描述的方法指定程序选项。最常用的方法是在选项文件中或在命令行提供选项。但是,在大多数情况下,希望服务器每次运行时使用相同的选项。最好的方法是确保将它们列在选项文件中。参见[4.3.2节,“使用选项文件”](# "4.3.2. Using Option Files")。 **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安全相关启动选项****”](# "5.6.3. Startup Options for mysqld Concerning Security")。 ·         SSL-相关选项:参见[5.8.7.6节,“SSL命令行选项”](# "5.8.7.6. SSL Command-Line Options")。 ·         二进制日志控制选项:参见[5.11.3节,“二进制日志”](# "5.11.3. The Binary Log")。 ·         复制相关选项:参见[6.8节,“复制启动选项”](# "6.8. Replication Startup Options")。 ·         特定存储引擎相关选项:参见[15.1.1节,“MyISAM启动选项”](# "15.1.1. MyISAM Startup Options")、[15.5.3节,“BDB启动选项”](# "15.5.3. BDB Startup Options")和[15.2.4节,“InnoDB启动选项”](# "15.2.4. InnoDB Startup Options")。 你还可以将变量名作为一个选项,设置服务器系统变量的值,如本节后面所述。 ·         --help,-? 显示简短的帮助消息并退出。使用--verbose和--help选项来看全部内容。 ·         --allow-suspicious-udfs 该选项控制是否用户定义的函数只有一个xxx符,用作可载入的主函数。默认情况下,该选项被关闭,只有至少有一个附属符的UDF  可以载入。这样可以防止从未包含合法UDF的共享文件装载函数。参见[27.2.3.6节,“用户定义函数安全注意事项”](# "27.2.3.6. User-Defined Function Security Precautions")。 ·         --ansi 使用标准(ANSI)SQL语法代替MySQL语法。参见[1.8.3节,“在ANSI模式下运行MySQL”](# "1.8.3. Running MySQL in ANSI Mode")。使用--sql-mode选项可以更精确控制服务器SQL模式。 ·         --basedir=_path_, -b _path_ MySQL安装目录的路径。通常所有路径根据该路径来解析。 ·         --bind-address=_IP_ 待绑定的IP地址。 ·         --bootstrap **mysql_install_db**脚本使用该选项来创建MySQL授权表,不需要启动MySQL服务器。 ·         --console 将错误日志消息写入stderr和stdout,即使指定了--log-error。在Windows中,如果使用该选项,**mysqld**不关闭控制台窗口。 ·         --character-sets-dir=_path_ 字符集安装的目录。参见[5.10.1节,“数据和排序用字符集”](# "5.10.1. The Character Set Used for Data and Sorting")。 ·         --chroot=path 通过chroot()系统调用在启动过程中将**mysqld**服务器放入一个封闭环境中。这是推荐的一个安全措施。请注意使用该选项可以 限制LOAD DATA INFILE和SELECT ... INTO OUTFILE。 ·         --character-set-server=_charset_ 使用_charset_作为 默认服务器字符集。参见[5.10.1节,“数据和排序用字符集”](# "5.10.1. The Character Set Used for Data and Sorting")。 ·         --core-file 如果**mysqld**终止,写内核文件。在某些系统中,你还必须为**mysqld_safe**指定--core-file-size 选项。参见[5.1.3节,“mysqld_safe:MySQL服务器启动脚本”](# "5.1.3. mysqld_safe — MySQL Server Startup Script")。请注意对于一些系统,例如Solaris,如果你使用--user选项不会获得内核文件。 ·         --collation-server=_collation_ 使用_collation_作为 默认服务器校对规则。参见[5.10.1节,“数据和排序用字符集”](# "5.10.1. The Character Set Used for Data and Sorting")。 ·         --datadir=_path_, -h _path_ 数据目录的路径。 ·         --debug[=_debug_options_], -# [_debug_options_] 如果MySQL配置了--with-debug,你可以使用该选项来获得一个跟踪文件,跟踪**mysqld**正进行的操作。_debug_options_字符串通常为'd:t:o,_file_name_'。参见[E.1.2节,“创建跟踪文件”](# "E.1.2. Creating Trace Files")。 ·         (_DEPRECATED_) --default-character-set=_charset_ 使用_char设置_作为 默认字符集。由于--character-set-server,反对使用该选项。参见[5.10.1节,“数据和排序用字符集”](# "5.10.1. The Character Set Used for Data and Sorting")。 ·         --default-collation=_collation_ 使用_collation_作为默认校对规则。由于--collation-server,反对使用该选项。参见[5.10.1节,“数据和排序用字符集”](# "5.10.1. The Character Set Used for Data and Sorting")。 ·         --default-storage-engine=_type_ 该选项为--default-table-type的同义词。 ·         --default-table-type=_type_ 设置表的默认类型。参见[第15章:](#)[_存储引擎和表类型_](# "Chapter 15. Storage Engines and Table Types")。 ·         --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节,“调节服务器参数”](# "7.5.2. Tuning Server Parameters")。参见[15.1.1节,“MyISAM启动选项”](# "15.1.1. MyISAM Startup Options")。 **注**释:如果你将该变量设置为ALL,你不应从另一个正使用MyISAM表的程序中使用MyISAM表(例如从另一个MySQL服务器或用**myisamchk**)。这样操作会导致索引破坏。 ·         --des-key-file=_file_name_ 从该文件读DES_ENCRYPT()和DES_DECRYPT()使用的 默认键。 ·         --enable-named-pipe 启用命名管道支持。该选项只适用Windows NT、2000、XP和2003系统,并且只适用支持命名管道连接的**mysqld-nt**和**mysqld-max-nt**服务器。   ·         --exit-info[=_flags_], -T [_flags_] 这是不同标志的一个位掩码,你可以用来调试**mysqld服务器**。不要使用该选项,除非你_确切_知道它在做什么! ·         --external-locking 启用系统锁定。请注意如果你在lockd不能完全工作的系统上使用该选项(例如在Linux中),**mysqld**容易死锁。该选项以前叫--enable-locking。 **注**释:如果你在许多MySQL进程中使用该选项来更新MyISAM表,你必须确保满足下述条件: o        使用正被另一个进程更新的表的查询的缓存不可使用。 o        不应在共享表中使用--delay-key-write=ALL或DELAY_KEY_WRITE=1。 最简单的方法是结合使用--external-locking和--delay-key-write=OFF --query-cache-size=0。 (默认不能实现,因为在许多设置中,结合使用上述选项很有用)。 ·         --flush 执行SQL语句后向硬盘上清空更改。一般情况执行SQL语句后 MySQL向硬盘写入所有更改,让操作系统处理与硬盘的同步。参见[A.4.2节,“如果MySQL依然崩溃,应作些什么”](# "A.4.2. What to Do If MySQL Keeps Crashing")。 ·         --init-file=_file_ 启动时从该文件读SQL语句。每个语句必须在同一行中并且不应包括注释。 ·         --language=_lang_name_, -L _lang_name_ 用给定语言给出客户端错误消息。_lang_name_可以为语言名或语言文件安装目录的全路径名。参见[5.10.2节,“设置错误消息语言”](# "5.10.2. Setting the Error Message Language")。 ·         --large-pages 一些硬件/操作系统架构支持大于 默认值(通常4 KB)的内存页。实际支持取决于使用的硬件和OS。大量访问内存的应用程序通过使用较大的页,降低了Translation Lookaside Buffer (TLB)损失,可以改善性能。 目前,MySQL只在Linux中支持大页面(在Linux中被称作HugeTLB)。我们已经计划将该支持扩展到FreeBSD、Solaris和其它可能的平台。 在Linux中可以使用大页面前,需要配置HugeTLB内存池。参考Linux内核源码中的hugetlbpage.txt文件。 默认情况下该选项被禁用。 ·         ---log[=_file_], -l [_file_] 日志连接和对文件的查询。参见[5.11.2节,“通用查询日志”](# "5.11.2. The General Query Log")。如果你不指定文件名,MySQL使用_host_name_.log作为文件名。 ·         --log-bin=[_file_] 二进制日志文件。将更改数据的所有查询记入该文件。用于备份和复制。参见[5.11.3节,“二进制日志”](# "5.11.3. The Binary Log")。建议指定一个文件名(原因参见[A.8.1节,“MySQL中的打开事宜”](# "A.8.1. Open Issues in MySQL")),否则MySQL使用_host_name_-bin作为日志文件基本名。 ·         --log-bin-index[=_file_] 二进制日志文件名的索引文件。参见[5.11.3节,“二进制日志”](# "5.11.3. The Binary Log")。如果你不指定文件名,并且如果你没有在--log-bin中指定,MySQL使用_host_name_-bin.index作为文件名。 ·         --log-bin-trust-routine-creators[={0|1}] 没有参数或参数为1,该选项将系统变量log_bin_trust_routine_creators设置为1。为参数 0时,该选项将系统变量设置为0。log_bin_trust_routine_creators影响MySQL如何对保存的程序的创建强加限制。参见[20.4节,“存储子程序和触发程序的二进制日志功能”](# "20.4. Binary Logging of Stored Routines and Triggers")。 ·         --log-error[=_file_] 该文件的日志错误和启动消息。参见[5.11.1节,“错误日志”](# "5.11.1. The Error Log")。如果你不指定文件名,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节,“慢速查询日志”](# "5.11.4. The Slow Query Log")。 ·         --log-short-format 记录激活的更新日志、二进制更新日志、和慢查询日志的少量信息。例如,用户名和时间戳不记录下来。 ·         ---log-slow-admin-statements 将慢管理语句例如OPTIMIZE TABLE、ANALYZE TABLE和ALTER TABLE记入慢查询日志。 ·         --log-slow-queries[=_file_] 将所有执行时间超过long_query_time秒的查询记入该文件。参见[5.11.4节,“慢速查询日志”](# "5.11.4. The Slow Query Log")。详细信息参见--log-long-format和--log-short-format选项描述。   ·         --log-warnings, -W 将警告例如Aborted connection...打印到错误日志。建议启用该选项,例如,如果你使用复制 (你可以得到关于所发生事情的详细信息,例如关于网络故障和重新连接的消息)。默认情况下启用该选项;要想禁用它,使用--skip-log-warnings。中断的连接不会记入错误日志,除非值大于1。参见[A.2.10节,“通信错误和失效连接”](# "A.2.10. Communication Errors and Aborted Connections")。 ·         --low-priority-updates 表修改(INSERT, REPLACE, DELETE, UPDATE)比选择的优先级要低。也可以通过{INSERT | REPLACE | DELETE | UPDATE} LOW_PRIORITY ...来降低某个查询的优先级来实现,或通过SET LOW_PRIORITY_UPDATES=1来更改一个线程的优先级。参见[7.3.2节,“表锁定事宜”](# "7.3.2. Table Locking Issues")。 ·          --memlock **将mysqld**进程锁定在内存中。在支持mlockall()系统调用的系统上有效,例如Solaris。如果操作系统使**mysqld**在硬盘上交换时出现问题,可以为你提供帮助。请注意使用该选项时需要以root运行服务器,但从安全考虑并不是一个好注意。 ·         --myisam-recover [=_option_[,_option_...]]] 将存储引擎MyISAM设置为恢复模式。该选项值是DEFAULT、BACKUP、FORCE或QUICK值的任何组合。如果你指定多个值,用逗号间隔开。你还可以使用""值来禁用该选项。使用如果该选项,当**mysqld**打开MyISAM表时,检查是否表标记为崩溃或没有正确关闭。(只有用--skip-external-lockingare运行时,最后的选项才工作)。 如果是这种情况,**mysqld**则检查 表。如果表被破坏,**mysqld**试图维护它。 下面的选项影响维护工作: <table border="1" cellpadding="0" id="table3"><tr><td width="68" style="width:51.35pt;padding:.75pt .75pt .75pt .75pt"> <p><strong><span>选项</span></strong></p></td> <td width="789" style="width:591.4pt;padding:.75pt .75pt .75pt .75pt"> <p><strong><span>描述</span></strong></p></td> </tr><tr><td width="68" style="width:51.35pt;padding:.75pt .75pt .75pt .75pt"> <p> <span>DEFAULT</span></p></td> <td width="789" style="width:591.4pt;padding:.75pt .75pt .75pt .75pt"> <p>与没有使用<span>--myisam-recover</span>选项相同。</p></td> </tr><tr><td width="68" style="width:51.35pt;padding:.75pt .75pt .75pt .75pt"> <p> <span>BACKUP</span></p></td> <td width="789" style="width:591.4pt;padding:.75pt .75pt .75pt .75pt"> <p>如果在恢复过程中,数据文件被更改了,将<span><i><span>tbl_name</span></i><span>.MYD</span></span>文件备份为<span><i><span>tbl_name-datetime</span></i><span>.BAK</span></span>。</p></td> </tr><tr><td width="68" style="width:51.35pt;padding:.75pt .75pt .75pt .75pt"> <p> <span>FORCE</span></p></td> <td width="789" style="width:591.4pt;padding:.75pt .75pt .75pt .75pt"> <p>即使<span>.MYD</span>文件将丢掉多个行也进行恢复。</p></td> </tr><tr><td width="68" style="width:51.35pt;padding:.75pt .75pt .75pt .75pt"> <p> <span>QUICK</span></p></td> <td width="789" style="width:591.4pt;padding:.75pt .75pt .75pt .75pt"> <p>如果没有删除块,不要检查表中的行。</p></td> </tr></table> 在表自动修复前,MySQL错误日志添加一条注解。如果你不想用户干涉干涉大多数问题,你应使用BACKUP,FORCE选项。该选项强制维护表,即使一些行将会被删除也不例外,但它保持旧的数据文件做为备份,以便你可以在后来进行检查。 ·         --ndb-connectstring=_connect_string_ 当使用NDB存储引擎时,可以指出通过设置连接字符串选项来分发群集配置的管理服务器。相关语法参见[17.4.4.2节,“MySQL簇连接字符串”](# "17.4.4.2. The MySQL Cluster connectstring")。 ·         --ndbcluster 如果二进制支持NDB CLUSTER存储引擎,使用该选项可以代替禁用MySQL Cluster支持的 默认设置。参见[第17章:](#)[_MySQL簇_](# "Chapter 17. MySQL Cluster")。 ·         --old-passwords 强制服务器为新密码生成短(4.1前)密码哈希。如果服务器必须支持旧客户端程序,为保证兼容性这很有用。参见[5.7.9节,“MySQL 4.1中的密码哈希处理”](# "5.7.9. Password Hashing in MySQL 4.1")。 ·         --one-thread 只使用一个线程(用于在Linux中调试)。只有服务器启用了调试,该选项才可用。参见[E.1节,“调试MySQL服务器”](# "E.1. Debugging a MySQL Server")。 ·         --open-files-limit=_count_ 用来更改**mysqld**文件描述符的数量。如果没有设置或设置为0,则**mysqld**通过setrlimit()使用该值来保存文件描述符。如果该值为0,则**mysqld**保存max_connections*5或max_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提供的权限”](# "5.7.3. Privileges Provided by 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稳定性”](# "1.4.3. MySQL Stability"))。 要避免该需求,使用MySQL Monitor中的CHECK TABLE和REPAIR TABLE来检查并维护MyISAM表。 ·         --skip-grant-tables 该选项使服务器不使用