第5章:数据库管理

目录

5.1. MySQL服务器和服务器启动脚本
5.1.1. 服务器端脚本和实用工具概述
5.1.2. mysqld-max扩展MySQL服务器
5.1.3. mysqld_safe:MySQL服务器启动脚本
5.1.4. mysql.server:MySQL服务器启动脚本
5.1.5. mysqld_multi:管理多个MySQL服务器的程序
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实例管理器识别的命令
5.3. mysqld:MySQL服务器
5.3.1. mysqld命令行选项
5.3.2. SQL服务器模式
5.3.3. 服务器系统变量
5.3.4. 服务器状态变量
5.4. mysql_fix_privilege_tables:升级MySQL系统表
5.5. MySQL服务器关机进程
5.6. 一般安全问题
5.6.1. 通用安全指南
5.6.2. 使MySQL在攻击者面前保持安全
5.6.3. Mysqld安全相关启动选项
5.6.4. LOAD DATA LOCAL安全问题
5.7. MySQL访问权限系统
5.7.1. 权限系统的作用
5.7.2. 权限系统工作原理
5.7.3. MySQL提供的权限
5.7.4. 与MySQL服务器连接
5.7.5. 访问控制, 阶段1:连接核实
5.7.6. 访问控制, 阶段2:请求核实
5.7.7. 权限更改何时生效
5.7.8. 拒绝访问错误的原因
5.7.9. MySQL 4.1中的密码哈希处理
5.8. MySQL用户账户管理
5.8.1. MySQL用户名和密码
5.8.2. 向MySQL增加新用户账户
5.8.3. 从MySQL删除用户账户
5.8.4. 限制账户资源
5.8.5. 设置账户密码
5.8.6. 使你的密码安全
5.8.7. 使用安全连接
5.9. 备份与恢复
5.9.1. 数据库备份
5.9.2. 示例用备份与恢复策略
5.9.3. 自动恢复
5.9.4. 表维护和崩溃恢复
5.9.5. myisamchk:MyISAM表维护实用工具
5.9.6. 建立表维护计划
5.9.7. 获取关于表的信息
5.10. MySQL本地化和国际应用
5.10.1. 数据和排序用字符集
5.10.2. 设置错误消息语言
5.10.3. 添加新的字符集
5.10.4. 字符定义数组
5.10.5. 字符串比较支持
5.10.6. 多字节字符支持
5.10.7. 字符集问题
5.10.8. MySQL服务器时区支持
5.11. MySQL日志文件
5.11.1. 错误日志
5.11.2. 通用查询日志
5.11.3. 二进制日志
5.11.4. 慢速查询日志
5.11.5. 日志文件维护
5.12. 在同一台机器上运行多个MySQL服务器
5.12.1. 在Windows下运行多个服务器
5.12.2. 在Unix中运行多个服务器
5.12.3. 在多服务器环境中使用客户端程序
5.13. MySQL查询高速缓冲
5.13.1. 查询高速缓冲如何工作
5.13.2. 查询高速缓冲SELECT选项
5.13.3. 查询高速缓冲配置
5.13.4. 查询高速缓冲状态和维护

本章涵盖了MySQL安装管理主题,例如配置服务器、管理用户账户和备份。

5.1. MySQL服务器和服务器启动脚本

MySQL服务器,即mysqld,是在MySQL安装中负责大部分工作的主程序。服务器随附了几个相关脚本,当你安装MySQL时它们可以执行设置操作,或者是帮助你启动和停止服务器的帮助程序。

本节提供了服务器和相关程序的概述,以及服务器启动脚本相关信息。关于配置服务器的信息参见5.3节,“mysqld:MySQL服务器”

5.1.1. 服务器端脚本和实用工具概述

MySQL程序采用各种不同的选项。但每个MySQL程序提供一个--help选项,你可以用来查阅程序选项相关说明。例如,你可以试试mysqld --help

你可以在命令行中或在选项文件中指定选项来替换所有标准程序中的默认选项。参见4.3节,“指定程序选项”

下面简单描述了MySQL服务器和服务器相关程序:

·         mysqld

SQL后台程序(MySQL服务器)。要想使用客户端程序,该程序必须运行,因为客户端通过连接服务器来访问数据库。参见5.3节,“mysqld:MySQL服务器”

·         mysqld-max

包括更多特性的一个服务器版本。参见5.1.2节,“mysqld-max扩展MySQL服务器”

·         mysqld_safe

服务器启动脚本。如果mysqld-max存在,mysqld_safe试图启动它,否则启动mysqld。参见5.1.3节,“mysqld_safe:MySQL服务器启动脚本”

·         mysql.server

服务器启动脚本。该脚本用于使用包含为特定级别的运行启动服务的脚本的运行目录的系统。它调用mysqld_safe来启动MySQL服务器。参见5.1.4节,“mysql.server:MySQL服务器启动脚本”

·         mysqld_multi

服务器启动脚本,可以启动或停止系统上安装的多个服务器。参见5.1.5节,“mysqld_multi:管理多个MySQL服务器的程序”

·         mysql_install_db

该脚本用默认权限创建MySQL授权表。通常只是在系统上首次安装MySQL时执行一次。参见2.9.2节,“Unix下安装后的过程”

·         mysql_fix_ privilege_tables

在升级安装后,如果新版本MySQL中的 授权表有更改,则使用该脚本来更改授权表。参见2.10.2节,“升级授权表”

服务器主机上还运行其它几个程序:

·         myisamchk

用来描述、检查、优化和维护MyISAM表的实用工具。在5.9.5节,“myisamchk:MyISAM表维护实用工具”中描述了myisamchk

·         make_binary_distribution

该程序可以生成编译过的MySQL的二进制版本。可以通过FTP上传到ftp.mysql.com/pub/mysql/upload/,供其它MySQL用户使用。

·         mysqlbug

MySQL 缺陷报告脚本。它可以用来向MySQL邮件系统发送缺陷报告。(你也可以访问http://bugs.mysql.com/在线创建缺陷报告文件。参见1.7.1.3节,“如何通报缺陷和问题”

5.1.2. mysqld-max扩展MySQL服务器

MySQL-Max服务器是mysqld MySQL服务器的一个版本,包含了更多的特性。

该分发版的使用取决于你的平台:

·         对于WindowsMySQL二进制分发版包括标准服务器 (mysqld.exe)MySQL-Max服务器(mysqld-max.exe),因此你不再需要专用分发版。只需要使用一个常规Windows分发版,可以从http://dev.mysql.com/downloads/获得。参见2.3节,“在Windows上安装MySQL”

·         对于Linux,如果你使用RPM分发版安装MySQL,首先使用常规MySQL-server RPM来安装标准mysqld服务器。然后使用MySQL-Max RPM来安装mysqld-max服务器。MySQL-Max RPM假定你已经安装了常规服务器RPM。关于Linux RPM软件包的详细信息,参见2.4节,“在Linux下安装MySQL”

·         所有其它MySQL-Max分发版包含一个mysqld服务器,但具有更多的特性。

你可以从MySQL AB网址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)只有LinuxSolarisMac OS X支持Cluster。已有一些用户报告在BSD 操作系统上成功使用了从源码构建的MySQL Cluster,但目前还没有得到官方支持。

MySQL-Max二进制分发版对于想要安装预编译程序的用户很方便。如果你使用源码分发版构建MySQL,你可以通过在配置时启用MySQL-Max二进制分发版构建所用的相同的特性来构建你自己的Max-like服务器。

MySQL-Max服务器包括BerkeleyDB (BDB)存储引擎,但并非所有平台支持BDB

SolarisMac OS XLinux(在大多数平台上)MySQL-Max服务器包括NDB CLUSTER存储引擎支持。请注意必须用ndbcluster选项启动服务器,以便使服务器做为MySQL Cluster的一部分来运行。(详细信息参见17.4节,“MySQL簇的配置”

下面的表显示了MySQL-Max二进制在哪个平台上包括BDB/NDB CLUSTER支持:

系统

BDB支持

NDB支持

AIX 4.3

N

N

HP-UX 11.0

N

N

Linux-Alpha

N

Y

Linux-IA-64

N

N

Linux-Intel

Y

Y

Mac OS X

N

N

NetWare

N

N

SCO OSR5

Y

N

Solaris-SPARC

Y

Y

Solaris-Intel

N

Y

UnixWare

Y

N

Windows NT/2000/XP

Y

N

要想找出你的服务器支持哪个存储引擎,执行下面的语句:

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语法”

你还可以使用下面的语句代替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列的值表示各特性支持的服务器级别,如下所示:

含义

YES

 支持该特性并已经激活。

NO

 不支持该特性。

DISABLED

 支持该特性但被禁用。

NO值表示编译的服务器不支持该特性,因此在运行时不能激活。

出现DISABLED值是因为服务器启动时该特性被禁用,或没有给出启用它的所有选项。在后一种情况,host_.err错误日志文件应包含该选项被禁用的原因。

如果服务器支持InnoDBBDB存储引擎,你还可以看见DISABLED,但在运行启动时使用了--skip-innodb--skip-bdb选项。对于NDB CLUSTER存储引擎,DISABLED表示服务器支持MySQL Cluster,但启动时未启用--ndb-cluster选项。

所有MySQL服务器支持MyISAM表,因为MyISAM是 默认存储引擎。

5.1.3. mysqld_safe:MySQL服务器启动脚本

UnixNetWare中推荐使用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分发版,后面升级到非-MaxMySQL版本,mysqld_safe仍然试图运行旧的 mysqld-max服务器。升级时,你应手动删除旧的mysqld-max服务器以确保mysqld_safe运行新的mysqld服务器

要想越过默认行为并显式指定你想要运行哪个服务器,为mysqld_safe指定--mysqld--mysqld-version选项。

mysqld_safe的许多选项与mysqld的相同的。参见5.3.1节,“mysqld命令行选项”

所有在命令行中为mysqld_safe指定的选项被传递给mysqld如果你想要使用mysqld不支持的mysqld_safe选项,不要在命令行中指定。相反,在选项文件的[mysqld_safe]组内将它们列出来。参见4.3.2节,“使用选项文件”

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节,“错误日志”

·         --mysqld=prog_name

想要启动的服务器程序名(ledir目录)。如果你使用MySQL二进制分发版但有二进制分发版之外的数据目录需要该选项。

·         --mysqld-version =suffix

该选项类似--mysqld选项,但你只指定服务器程序名的后缀。基本名假定为mysqld例如,如果你使用--mysqld-version =maxmysqld_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或更大值,除非MySQLroot系统用户运行。

·         --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节,“安装布局” mysqld_safe期望下面的其中一个条件是真的:

·         可以根据调用mysqld_safe的目录找到服务器和数据库。在二进制分发版中,mysqld_safe看上去在bindata目录的工作目录下。对于源码分发版,为libexecvar目录。如果你从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运行目录来启动和停止系统服务的系统,例如LinuxSolaris。它还用于MySQLMac 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”

一些卖方提供的RPM软件包安装的启动脚本用其它名,例如mysqld

如果你从不自动安装mysql.server的源码分发版或二进制分发版格式安装MySQL,也可以手动安装。相关说明参见2.9.2.2节,“自动启动和停止MySQL”

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中的[mysqldN](--config-file选项指定的文件)N 可以为任何正整数。在下面的讨论中该数字指选项组号,或GNR。组号区别各选项组,并用作mysqld_multi的参数来指定想要启动、停止哪个服务器或获取哪个服务器的状态报告。这些组中的选项与将用来启动mysqld[mysqld]组中的相同。(例如,参见2.9.2.2节,“自动启动和停止MySQL”但是,当使用多个服务器时,需要每个服务器使用自己的选项值,例如Unix套接字文件和TCP/IP端口号。关于在多服务器环境中,每个服务器对应唯一选项的详细信息,参见5.12节,“在同一台机器上运行多个MySQL服务器”

要想调用mysqld_multi,使用下面的语法:

shell> mysqld_multi [options] {start|stop|report} [GNR[,GNR] ...]

startstopreport表示你想要执行的操作。你可以在单个服务器或多个服务器上执行指定的操作,取决于选项名后面的GNR 列。如果没有该列,mysqld_multi为选项文件中的所有服务器执行该操作。

每个GNR值代表一个选项组号或组号范围。GNR值应为选项文件中组名末尾的号。例如,组[mysqld17]GNR17。要想指定组号的范围,用破折号间隔开第1个和最后1个号。GNR10-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从哪里寻找[mysqldN]选项组。没有该选项,从通用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套接字文件进行连接。该选项影响stopreport操作。

·         --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节,“权限系统工作原理”。你必须为每个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服务器启动脚本”。上述行执行的测试应成功,否则你可能遇到了问题。

·         每个mysqldUnix套接字文件和TCP/IP端口号必须不同。

·         你可能想要为mysqld使用--user选项,但为此你需要用Unix root用户运行mysqld_multi脚本。选项文件中有选项不要紧;如果你不是超级用户,并且你用自己的Unix账户重启mysqld进程,你只会得到警告。

·         重要:确保mysqld进程启动所用Unix账户可以完全访问数据目录。不要使用Unix root账户,除非你知道你在做什么。

·         非常重要:使用mysqld_multi前,确保理解传递给mysqld服务器的选项的含义以及你为什么想要独立的mysqld进程。应清楚 在相同的数据目录下使用多个mysqld服务器的危险。使用单独的数据目录,除非你知道你在做什么。在线程系统中,在相同的数据目录下启动多个服务器不会得到超性能。参见5.12节,“在同一台机器上运行多个MySQL服务器”

下面的示例显示了你如何设置选项文件来使用mysqld_multi。专门省去第1个和第5[mysqldN]组来说明你的选项文件可以稍有不同。这样给你更大的灵活性。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节,“使用选项文件”

5.2. mysqlmanager: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 ServerMySQL数据库服务器),通常驻留在/etc/init.d/ 文件夹。默认情况下该脚本调用mysqld_safe脚本。但是,你可以在脚本中将use_mysqld_safe变量设置为0()以便使用MySQL实例管理器来启动服务器。

在这种情况下,Instance Manager的行为取决于MySQL配置文件中的选项。如果没有配置文件,MySQL实例管理器创建mysqld实例并试图用默认(编译嵌入的)配置来启动。这说明如果mysqld没有安装到 默认位置,IM不能猜出它的位置。如果你已经在非标准位置安装了MySQL服务器,你应使用配置文件。参见2.1.5节,“安装布局”

如果有配置文件,IM将分析配置文件搜索[mysqld]部分(例如[mysqld][mysqld1][mysqld2])。每个部分指定一个实例。启动时IM将启动所有找到的实例。IM关闭时默认停止所有实例。

请注意有一个特殊选项mysqld-path(mysqld-path = path-to-mysqld- binary),只能用IM识别。使用该变量让IM知道mysqld二进制驻留在哪儿。你还应该为服务器设置basedirdatadir选项。

启用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来连接IMIM支持客户端工具和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 ManagerMySQL服务器设定值。所有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服务器

mysqldMySQL服务器。下面讨论MySQL服务器的配置:

·         服务器支持的启动选项

·         如何设置服务器SQL模式

·         服务器系统变量

·         服务器状态变量

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语句让运行的服务器重新开始使用 授权表。

·       &nbs