Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103728007
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Mysql/postgreSQL

2008-05-11 17:41:16

本章涵盖了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邮件系统发送缺陷报告。(你也可以访问在线创建缺陷报告文件。参见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时,窗口不按默认设置消失。相反,它提示用户输入:

**

如果你想让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: 
Re-type 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 =

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

该命令将试图启动一个实例:

mysql> START INSTANCE mysqld4;
Query OK, 0 rows affected (0,00 sec)

·         STOP INSTANCE

将试图停止一个实例:

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

显示选定的实例的状态和版本信息:

mysql> SHOW INSTANCE STATUS mysqld3;
+---------------+--------+---------+
| instance_name | status | version |
+---------------+--------+---------+
| mysqld3       | online | unknown |
+---------------+--------+---------+
1 row in set (0.00 sec)

·         SHOW INSTANCE OPTIONS

显示实例使用的选项:

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

·         --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命令行选项来定义。

5.3.2. SQL服务器模式

MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式。这样每个应用程序可以根据自己的需求来定制服务器的操作模式。

模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查。这样可以更容易地在不同的环境中使用MySQL,并结合其它数据库服务器使用MySQL

你可以用--sql-mode="modes"选项启动mysqld设置默认SQL模式。如果你想要重设,该值还可以为空(--sql-mode ="")

你还可以在启动后用SET [SESSION|GLOBAL] sql_mode='modes'语句设置sql_mode变量来更改SQL模式。设置 GLOBAL变量时需要拥有SUPER权限,并且会影响从那时起连接的所有客户端的操作。设置SESSION变量只影响当前的客户端。任何客户端可以随时更改自己的会话 sql_mode值。

Modesis是用逗号()间隔开的一系列不同的模式。你可以用SELECT @@sql_mode语句查询当前的模式。默认值是空(没有设置任何模式)

主要重要sql_mode值为:

·         ANSI

更改语法和行为,使其更符合标准SQL

·         STRICT_TRANS_TABLES

如果不能将给定的值插入到事务表中,则放弃该语句。对于非事务表,如果值出现在单行语句或多行语句的第1行,则放弃该语句。本节后面给出了更详细的描述。

·         TRADITIONAL

Make MySQL的行为象“传统SQL数据库系统。该模式的简单描述是当在列中插入不正确的值时“给出错误而不是警告”。释:一旦发现错误立即放弃INSERT/UPDATE。如果你使用非事务存储引擎,这种方式不是你想要的,因为出现错误前进行的数据更改不会“滚动”,结果是更新“只进行了一部分”。

本手册指“严格模式”,表示至少STRICT _TRANS_TABLESSTRICT _ALL_TABLES被启用的模式。

下面描述了支持的所有模式:

·         ALLOW_INVALID_DATES

在严格模式下不要检查全部日期。只检查112之间的月份和131之间的日。这在Web应用程序中,当你从三个不同的字段获取年、月、日,并且想要确切保存用户插入的内容(不进行日期验证)时很重要。该模式适用于DATEDATETIME列。不适合TIMESTAMP列,TIMESTAMP列需要验证日期。

启用严格模式后,服务器需要合法的月和日,不仅仅是分别在112131范围内。例如,禁用严格模式时'2004-04-31'是合法的,但启用严格模式后是非法的。要想在严格模式允许遮掩固定日期,还应启用ALLOW_INVALID_DATES

·         ANSI_QUOTES

将‘"’视为识别符引号(`’引号字符),不要视为字符串的引号字符。在ANSI模式,你可以仍然使用‘`’来引用识别符。启用ANSI_QUOTES后,你不能用双引号来引用字符串,因为它被解释为识别符。

·         ERROR_FOR_DIVISION_BY_ZERO

在严格模式,在INSERTUPDATE过程中,如果被零除(MOD(X0)),则产生错误(否则为警告)。如果未给出该模式,被零除时MySQL返回NULL。如果用到INSERT IGNOREUPDATE IGNORE中,MySQL生成被零除警告,但操作结果为NULL

·         HIGH_NOT_PRECEDENCE

NOT操作符的优先顺序是表达式例如NOT a BETWEEN b AND c被解释为NOT (a BETWEEN b AND c)。在一些旧版本MySQL中, 表达式被解释为(NOT a) BETWEEN b AND c。启用HIGH_NOT_PRECEDENCESQL模式,可以获得以前的更高优先级的结果。

mysql> SET sql_mode = '';
mysql> SELECT NOT 1 BETWEEN -5 AND 5;
        -> 0
mysql> SET sql_mode = 'broken_not';
mysql> SELECT NOT 1 BETWEEN -5 AND 5;
        -> 1

·         IGNORE_SPACE

允许函数名和‘(’之间有空格。强制将所有函数名视为保存的字。结果是,如果你想要访问保存为字的数据库、表或列名,你必须引用它。例如,因为有USER()函数,mysql数据库中的user表名和该表内的User列被保存下来,因此你必须引用它们:

SELECT "User" FROM mysql."user";

·         NO_AUTO_CREATE_USER

防止GRANT自动创建新用户,除非还指定了密码。

·         NO_AUTO_VALUE_ON_ZERO

NO_AUTO_VALUE_ON_ZERO影响AUTO_INCREMENT列的处理。一般情况,你可以向该列插入NULL0生成下一个序列号。NO_AUTO_VALUE_ON_ZERO禁用0,因此只有NULL可以生成下一个序列号。

如果将0保存到表的AUTO_INCREMENT列,该模式会很有用。(不推荐采用该惯例)。例如,如果你用mysqldump转储表并重载,MySQL遇到0值一般会生成新的序列号,生成的表的内容与转储的表不同。重载转储文件前启用NO_AUTO_VALUE_ON_ZERO可以解决该问题。mysqldump在输出中自动包括启用NO_AUTO_VALUE_ON_ZERO的语句。

·         NO_BACKSLASH_ESCAPES

禁用反斜线字符(\)做为字符串内的退出字符。启用该模式,反斜线则成为普通字符。

·         NO_DIR_IN_CREATE

创建表时,忽视所有INDEX DIRECTORYDATA DIRECTORY指令。该选项对从复制服务器有用。

·         NO_ENGINE_SUBSTITUTION

如果需要的存储引擎被禁用或未编译,可以防止自动替换存储引擎。

·         NO_FIELD_OPTIONS

不要在SHOW CREATE TABLE的输出中打印MySQL专用列选项。该模式在可移植模式(portability mode)下用于mysqldump

·         NO_KEY_OPTIONS

不要在SHOW CREATE TABLE的输出中打印MySQL专用索引选项。该模式在可移植模式(portability mode)下用于mysqldump

·         NO_TABLE_OPTIONS

不要在SHOW CREATE TABLE的输出中打印MySQL专用表选项(例如ENGINE)。该模式在可移植模式(portability mode)下用于mysqldump

·         NO_UNSIGNED_SUBTRACTION

在减运算中,如果某个操作数没有符号,不要将结果标记为UNSIGNED。请注意这样使UNSIGNED BIGINT不能100%用于上下文中。参见12.8节,“Cast函数和操作符”

 

·         NO_ZERO_DATE

在严格模式,不要将 '0000-00-00'做为合法日期。你仍然可以用IGNORE选项插入零日期。在非严格模式,可以接受该日期,但会生成警告。

·         NO_ZERO_IN_DATE

在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入'0000-00-00'。在非严格模式,可以接受该日期,但会生成警告。

·         ONLY_FULL_GROUP_BY

不要让GROUP BY部分中的查询指向未选择的列。

·         PIPES_AS_CONCAT

||视为字符串连接操作符(+)(CONCAT()),而不视为OR

·         REAL_AS_FLOAT

REAL视为FLOAT的同义词,而不是DOUBLE的同义词。

·         STRICT_TRANS_TABLES

为所有存储引擎启用严格模式。非法数据值被拒绝。后面有详细说明。

·         STRICT_TRANS_TABLES

为事务存储引擎启用严格模式,也可能为非事务存储引擎启用严格模式。后面有详细说明。

严格模式控制MySQL如何处理非法或丢失的输入值。有几种原因可以使一个值为非法。例如,数据类型错误,不适合列,或超出范围。当新插入的行不包含某列的没有显示定义DEFAULT子句的值,则该值被丢失。

对于事务表,当启用STRICT_ALL_TABLESSTRICT_TRANS_TABLES模式时,如果语句中有非法或丢失值,则会出现错误。语句被放弃并滚动。

对于非事务表,如果插入或更新的第1行出现坏值,两种模式的行为相同。语句被放弃,表保持不变。如果语句插入或修改多行,并且坏值出现在第2或后面的行,结果取决于启用了哪个严格选项:

·         对于STRICT_ALL_TABLESMySQL返回错误并忽视剩余的行。但是,在这种情况下,前面的行已经被插入或更新。这说明你可以部分更新,这可能不是你想要的。要避免这点,最好使用单行语句,因为这样可以不更改表即可以放弃。

·         对于STRICT_TRANS_TABLESMySQL将非法值转换为最接近该列的合法值并插入调整后的值。如果值丢失,MySQL在列中插入隐式 默认值。在任何情况下,MySQL都会生成警告而不是给出错误并继续执行语句。13.1.5节,“CREATE TABLE语法”描述了隐式默认值。

严格模式不允许非法日期,例如'2004-04-31'。它不允许禁止日期使用“零”部分,例如'2004-04-00'或“”日期。要想禁止,应在严格模式基础上,启用NO_ZERO_IN_DATENO_ZERO_DATE SQL模式。

如果你不使用严格模式(即不启用STRICT_TRANS_TABLESSTRICT_ALL_TABLES模式),对于非法或丢失的值,MySQL将插入调整后的值并给出警告。在严格模式,你可以通过INSERT IGNOREUPDATE IGNORE来实现。参见13.5.4.22节,“SHOW WARNINGS语法”

下面的特殊模式快速组合了前面所列的模式。

其中包括大多数最新版本MySQL中的所有模式值。旧版本中,组合模式不包括新版本中没有的不适用的具体模式值。

·         ANSI

等同REAL_AS_FLOATPIPES_AS_CONCATANSI_QUOTESIGNORE_SPACE。参见1.8.3节,“在ANSI模式下运行MySQL”

·         DB2

等同PIPES_AS_CONCATANSI_QUOTESIGNORE_SPACENO_KEY_OPTIONSNO_TABLE_OPTIONSNO_FIELD_OPTIONS

·         MAXDB

等同PIPES_AS_CONCATANSI_QUOTESIGNORE_SPACENO_KEY_OPTIONSNO_TABLE_OPTIONSNO_FIELD_OPTIONSNO_AUTO_CREATE_USER

·         MSSQL

等同PIPES_AS_CONCATANSI_QUOTESIGNORE_SPACENO_KEY_OPTIONSNO_TABLE_OPTIONSNO_FIELD_OPTIONS

·         MYSQL323

等同NO_FIELD_OPTIONSHIGH_NOT_PRECEDENCE

·         MYSQL40

等同NO_FIELD_OPTIONSHIGH_NOT_PRECEDENCE

·         ORACLE

等同PIPES_AS_CONCATANSI_QUOTESIGNORE_SPACENO_KEY_OPTIONSNO_TABLE_OPTIONSNO_FIELD_OPTIONSNO_AUTO_CREATE_USER

·         POSTGRESQL

等同PIPES_AS_CONCATANSI_QUOTESIGNORE_SPACENO_KEY_OPTIONSNO_TABLE_OPTIONSNO_FIELD_OPTIONS

·         TRADITIONAL

等同STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER。

阅读(500) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~