Mysql 程序

MySQL 程序概述

MySQL安装中有许多不同的程序。 本节简要介绍了它们。 后面几节提供了每一个更详细的描述。 每个程序的描述都指出了它的调用语法和它支持的选项。

大多数MySQL发行版都包含所有这些程序,除了那些特定于平台的程序(例如,在Windows上不使用服务器启动脚本)。例外情况是RPM发行版更加专业化。 有一个RPM的服务器,另一个客户端程序,等等。 如果您似乎缺少一个或多个程序,请参阅第2章“安装和升级MySQL”,以获取有关分发类型及其内容的信息。 这可能是因为你的发行版不包含所有的程序,你需要安装一个额外的软件包。

MySQL服务器mysqld是执行MySQL安装过程中大部分工作的主要程序。 服务器附带有几个相关的脚本,可以帮助您启动和停止服务器:

1.mysqld

SQL守护进程(即MySQL服务器)。 要使用客户端程序,必须运行mysqld,因为客户端通过连接到服务器来访问数据库。

2.mysqld_safe

一个服务器启动脚本。mysqld_safe 尝试启动mysqld。

3.mysqld_multi

服务器启动脚本,可以启动或停止安装在系统上的多个服务器。

在MySQL安装或升级期间,有几个程序执行安装操作:

1.comp_err

这个程序是在MySQL构建/安装过程中使用的。 它从错误源文件编译错误消息文件。

2.mysql_install_db

这个程序初始化MySQL数据目录,创建mysql数据库并用默认权限初始化授权表,并设置InnoDB系统表空间。 在系统上首次安装MySQL时,通常只执行一次。

3.mysql_plugin

这个程序配置MYSQL 服务器插件

4.mysql_secure_installation

该程序使您可以提高MySQL安装的安全性。

5.mysql_ssl_rsa_setup

如果这些文件丢失,该程序将创建支持安全连接所需的SSL证书和密钥文件以及RSA密钥对文件。

6.mysql_tzinfo_to_sql

该程序使用主机系统zoneinfo数据库(描述时区的文件集)中的内容在mysql数据库中加载时区表。

7.mysql_upgrage

这个程序是在MySQL升级操作之后使用的。 它检查表的不兼容性,并在必要时修复它们,并用在较新版本的MySQL中进行的任何更改来更新授权表。

连接到MySQL服务器的MySQL客户端程序:

1.mysql

用于交互式输入SQL语句或以批处理模式从文件执行它们的命令行工具。

2.mysqladmin

执行管理操作的客户端,例如创建或删除数据库,重新加载授权表,刷新表到磁盘以及重新打开日志文件。 mysqladmin也可以用来从服务器检索版本,进程和状态信息。

3.mysqlcheck

一个表维护客户端,用于检查,修复,分析和优化表。

4.mysqldump

将MySQL数据库转储为SQL,文本或XML文件的客户端

5.mysqlimport

使用LOAD DATA INFILE将文本文件导入各自表的客户端

6.mysqlpump

将MySQL数据库转储为SQL文件的客户端

7.mysqlshow

显示有关数据库,表,列和索引的信息的客户端

8.mysqlslap

一个客户端,旨在模拟MySQL服务器的客户端负载,并报告每个阶段的时间。 它就像多个客户端正在访问服务器一样工作。

MySQL管理和实用程序:

1.innochecksum

离线的InnoDB脱机文件校验的工具。

2.myisam_ftdump

在MyISAM表中显示有关全文索引信息的工具

3.myisamchk

用于描述,检查,优化和修复MyISAM表的工具

4.myisamlog

一个处理MyISAM日志文件的工具

5.压缩MyISAM表以生成更小的只读表的工具

6.mysql_config_editor

一个实用使您可以将身份验证凭据存储在名为.mylogin.cnf的安全的加密登录路径文件中的工具

7.mysqlbinlog

用于从二进制日志中读取语句的工具。 包含在二进制日志文件中的已执行语句的日志可用于帮助从崩溃中恢复。

8.mysqldumpslow

一个工具来阅读和总结一个慢查询日志的内容。

MySQL程序开发工具

1.mysql_config

一个shell脚本,用于在编译MySQL程序时生成所需的选项值。

2,my_print_defaults

显示选项文件的选项组中存在哪些选项的工具

3.resolve_stack_dump

将数值堆栈跟踪转储解析为符号的工具。

杂项工具

1.perror

显示系统或MySQL错误代码含义的工具

2.replace

在输入文本中执行字符串替换的工具。

3.resolveip

将主机名解析为IP地址的实用程序,反之亦然。

Oracle公司还提供MySQL Workbench GUI工具,用于管理MySQL服务器和数据库,创建,执行和评估查询,以及从其他关系数据库管理系统迁移模式和数据以供MySQL使用。 额外的GUI工具包括MySQL Notifier和MySQL for Excel。

–这些程序都使用之前介绍的环境变量

4.2 使用MYSQL 程序

1.调用MYSQL程序

shell> mysql –user=root test

shell> mysqladmin extended-status variables

shell> mysqlshow –help

shell> mysqldump -u root personnel

以单或双破折号(“ – ”,“ – ”)开头的参数指定程序选项。 选项通常表示程序应该与服务器建立连接的类型或影响其操作模式。

非选项参数(没有前导短划线的参数)为程序提供了额外的信息。 例如,mysql程序将第一个非选项参数解释为数据库名称,所以命令mysql –user=root test指示您要使用测试数据库

稍后描述个别程序的部分指出程序支持哪些选项并描述任何附加非选项参数的含义。

2.连接到MYSQL 服务器

要使客户端程序能够连接到MySQL服务器,必须使用适当的连接参数,例如服务器所在主机的名称以及MySQL帐户的用户名和密码。 每个连接参数都有一个默认值,但可以根据需要使用在命令行或选项文件中指定的程序选项覆盖它们。

这里的例子使用mysql客户端程序,但是这些原则适用于其他客户端,例如mysqldump,mysqladmin或mysqlshow。

该命令调用mysql而不显式指定任何连接参数:

shell> mysql

由于没有参数选项,因此使用默认值:

•默认主机名是localhost。 在Unix上,这有一个特殊的含义,如后面所述。

•默认的用户名是Windows上的ODBC或Unix上的Unix登录名。

•如果既不指定-p也不指定密码,则不发送密码。

•对于mysql,第一个nonoption参数被视为默认数据库的名称。 如果没有这样的选项,mysql不会选择一个默认的数据库。

要明确指定主机名和用户名以及密码,请在命令行上提供适当的选项:

shell> mysql –host=localhost –user=myname –password=mypass mydb

shell> mysql -h localhost -u myname -pmypass mydb

对于密码选项,密码值是可选的:

•如果使用-p或–password选项并指定密码值,则-p或–password=和后面的密码之间不能有空格。

•如果使用-p或–password选项,但不指定密码值,则客户端程序会提示您输入密码。 输入密码时不显示。 这比在命令行上输入密码更安全。 系统上的其他用户可以通过执行诸如ps auxw之类的命令来查看在命令行上指定的密码。

如刚才提到的,在命令行中包含密码值可能是安全风险。 要避免此问题,请指定–password或-p选项,而不使用任何密码值:

shell> mysql –host=localhost –user=myname –password mydb

shell> mysql -h localhost -u myname -p mydb

当密码选项没有密码值时,客户端程序打印提示并等待您输入密码。 (在这些例子中,mydb不会被解释为密码,因为它与前面的密码选项相隔一个空格。)

在某些系统上,MySQL用来提示输入密码的库的routine自动将密码限制为8个字符。 这是系统库的问题,而不是MySQL。 在内部,MySQL对密码的长度没有任何限制。 要解决此问题,请将您的MySQL密码更改为八位或更少字符的值,或将您的密码存放在选项文件中。

在Unix上,MySQL程序专门处理主机名localhost,与其他基于网络的程序相比,这种方式可能与您期望的不同。 对于连接到本地主机,MySQL程序试图通过使用Unix套接字文件连接到本地服务器。 即使给出了–port或-P选项来指定端口号,也会发生这种情况。 要确保客户端与本地服务器建立TCP / IP连接,请使用–host或-h指定主机名值127.0.0.1,或者本地服务器的IP地址或名称。 您也可以通过使用–protocol = TCP选项来显式指定连接协议,即使对于本地主机也是如此。例如:

shell> mysql –host=127.0.0.1

shell> mysql –protocol=TCP

–protocol选项使您可以建立特定类型的连接,即使其他选项通常默认为其他协议。

如果服务器配置为接受IPv6连接,则客户端可以使用–host = :: 1通过IPv6进行连接。

在Windows上,可以通过指定–pipe或–protocol=PIPE选项或指定.(点号)作为主机名,强制MySQL客户端使用命名管道连接。 如果命名管道连接未启用,则会发生错误。 如果您不想使用默认管道名称,请使用–socket选项指定管道的名称。

到远程服务器的连接总是使用TCP / IP。 该命令使用默认端口号(3306)连接到在remote.example. com上运行的服务器:

shell> mysql –host=http://remote.example.com

要显式指定端口号,请使用–port或-P选项:

shell> mysql –host=http://remote.example.com –port=3306

您也可以为本地服务器指定一个端口号。但是,如前所述,在Unix上与localhost的连接默认使用套接字文件。 您将需要强制一个TCP / IP连接已经描述或任何指定端口号的选项将被忽略。

对于这个命令,程序在Unix上使用套接字文件,而–port选项被忽略:

shell> mysql –port=13306 –host=localhost

要使用端口号,请用以下任一方式调用程序:

shell> mysql –port=13306 –host=127.0.0.1

shell> mysql –port=13306 –protocol=TCP

以下列表总结了可用于控制客户端程序如何连接到服务器的选项:

1.–host=host_name.-h host_name

运行服务器的主机。 默认值是localhost。

2.–password[=pass_val], -p[pass_val]

MySQL帐户的密码。 如前所述,密码值是可选的,但是如果给定的话,-p或–password=和它后面的密码之间不能有空格。 默认是不发送密码。

3.–port=port_num, -P port_num

用于连接的端口号,用于使用TCP / IP进行的连接。 默认端口号是3306。

4.–protocol={TCP|SOCKET|PIPE|MEMORY}

此选项明确指定用于连接到服务器的协议。 当其他连接参数通常会导致一个协议被使用,而不是你想要的。 例如,Unix到localhost的连接默认使用Unix套接字文件:

shell> mysql –host=localhost

要强制使用TCP / IP连接,请指定一个–protocol选项:

shell> mysql –host=localhost –protocol=TCP

5.–shared-memory-base-name=name

在Windows上,使用共享内存名称,用于使用共享内存连接到本地服务器。 默认值是MYSQL。 共享内存名称区分大小写。

必须使用–shared-memory选项启动服务器以启用共享内存连接

6.–socket=file_name, -S file_name

在Unix上,使用Unix套接字文件的名称,用于使用命名管道连接到本地服务器。 默认的Unix套接字文件名是/tmp/mysql.sock。

在Windows上,用于连接到本地服务器的命名管道的名称。 默认的Windows管道名称是MySQL。 管道名称不区分大小写。

必须使用–enable-named-pipe选项启动服务器才能启用命名管道连接。

7.–ssl*

如果服务器配置了SSL支持,那么以–ssl开头的选项用于使用SSL建立到服务器的安全连接。

8.–user=user_name, -u user_name

您要使用的MySQL帐户的用户名。 默认的用户名是Windows上的ODBC或Unix上的Unix登录名。

在建立连接时,可以指定不同的默认值,以便每次调用客户端程序时都不必在命令行中输入它们。 这可以通过几种方法来完成:

1.您可以在选项文件的[client]部分中指定连接参数。 该文件的相关部分可能如下所示:

[client]

host=host_name

user=user_name

password=your_pass

2.您可以使用环境变量指定一些连接参数。可以使用MYSQL_HOST为mysql指定主机。 MySQL用户名可以使用USER指定(仅适用于Windows)。 密码可以使用MYSQL_PWD指定,虽然这是不安全的

3.指定程序选项

有几种方法可以为MySQL程序指定选项:

  • 在程序名称后列出命令行中的选项。 对于适用于特定的程序调用的选项,这是很常见的。
  • 列出程序在启动时读取的选项文件中的选项。 这是您希望程序每次运行时使用的选项的常见情况。
  • 列出环境变量中的选项(参见第4.2.10节“设置环境变量”)。 此方法对于每次运行程序时要应用的选项都很有用。 实际上,选项文件更常用于此目的,但第5.3.3节“在Unix上运行多个MySQL实例”讨论了一种情况,即环境变量可能非常有用。 它描述了一个方便的技术,它使用这些变量来为服务器和客户端程序指定TCP / IP端口号和Unix套接字文件。

选项按顺序处理,所以如果多次指定选项,则最后一个选项优先。 以下命令会导致mysql连接到在localhost上运行的服务器:

shell> mysql -h http://example.com -h localhost

如果给出冲突或相关的选项,以后的选项优先于早期的选项。 以下命令在“无列名”模式下运行mysql:

shell> mysql –column-names –skip-column-names

MySQL程序通过检查环境变量,然后通过读取选项文件,然后通过检查命令行来确定首先给出哪些选项。 这意味着环境变量的优先级最低,命令行选项最高。

您可以利用MySQL程序处理选项的方式,方法是在选项文件中指定程序的默认选项值。 这样可以避免在每次运行程序时输入它们,同时使您可以使用命令行选项覆盖默认值(如有必要)。

注意:

在MySQL 5.7.2之前,程序选项可以被指定为全部或者任何明确的前缀。 例如,–compress选项可以作为–compr赋给mysqldump,但不能作为–comp赋值,因为后者是不明确的。 从MySQL 5.7.2开始,不再支持选项前缀。 只有完整的选项被接受。 这是因为在为程序实现新选项时,前缀可能会导致问题,并且当前明确的前缀可能在将来变得模糊。 这个变化的一些含义:

•–key-buffer选项现在必须指定为–key-buffer-size。

• 现在必须将–skip-grant选项指定为–skip-grant-tables。

4.在命令行使用选项

在命令行中指定的程序选项遵循以下规则:

  • 选项在命令名后面给出
  • 选项参数以一个破折号或两个破折号开始,具体取决于它是短格式还是长格式的选项名称。 许多选项都有短和长的形式。 例如, -? 和–help是指示MySQL程序显示其帮助信息的短期和长期形式的选项。
  • 选项名称区分大小写。 -v和-V都是合法的,具有不同的含义。 (它们是–verbose和–version选项的相应简写形式。)
  • 有些选项会根据选项名称取值。 例如,-h localhost或–host=localhost指示MySQL服务器主机到客户端程序。 选项值告诉程序运行MySQL服务器的主机的名称。
  • 对于具有值的长选项,请使用“=”号将选项名称和值分开。 对于取值较短的选项,选项值可以紧跟在选项字母后面,或者在-hlocalhost和-h localhost之间可以有一个空格。 此规则的一个例外是指定您的MySQL密码的选项。 这个选项可以以长的形式给出–password=pass_val或者–password。 在后一种情况下(没有给出密码值),程序会提示您输入密码。 密码选项也可以简写为 -ppass_val或as -p。 但是,对于简短形式,如果给出了密码值,则必须遵循选项字母,而没有中间空格。原因是如果一个空格跟在选项字母后面,程序就无法判断下一个参数是否应该是密码值或者其他类型的参数。 因此,以下两个命令有两个完全不同的含义:

shell> mysql -ptest

shell> mysql -p test

第一个命令指示mysql使用test的密码值,但不指定默认数据库。 第二步 指示mysql提示输入密码值,并使用test作为默认数据库。

  • 在选项名称中,短划线(“ – ”)和下划线(“_”)可以互换使用。 例如,–skip-grant-tables和–skip_grant_tables是等价的。 (但是,不能用下划线给出主要的破折号。)
  • 对于具有数字值的选项,可以使用后缀K,M或G(大写或小写)给出该值,以表示倍数1024,1024*2倍或1024*3倍.例如,以下命令告诉mysqladmin ping 服务器1024次,每次ping之间休眠10秒:

mysql> mysqladmin –count=1K –sleep=10 ping

包含空格的选项值必须在命令行中给出被引起来。 例如, –execute(或-e)选项可以与mysql一起使用,以将SQL语句传递给服务器。 当使用这个选项时,mysql执行选项值中的语句并退出。 这些陈述必须用引号括起来。 例如,您可以使用以下命令来获取用户帐户的列表:

mysql> mysql -u root -p –execute=”SELECT User, Host FROM mysql.user”

Enter password: ******

+——+———–+

| User | Host |

+——+———–+

| | gigan |

| root | gigan |

| | localhost |

| jon | localhost |

| root | localhost |

+——+———–+

shell>

注意:

长格式(–execute)后跟一个等号(=)。

如果您希望在语句中使用引用的值,您将需要转义内部引号,或者在引用语句本身的语句中使用不同类型的引号。 命令处理器的功能决定了您是否可以使用单引号或双引号以及转义引号字符的语法。 例如,如果您的命令处理器支持使用单引号或双引号,则可以在该语句周围使用双引号,并在该语句内使用单引号。

多个SQL语句可以通过命令行的选项值传递,用分号分隔:

shell> mysql -u root -p -e “SELECT VERSION();SELECT NOW()”

5.程序选项修饰符

一些选项是“布尔”和控制行为,可以打开或关闭。 例如,mysql客户端支持一个–column-names选项,决定是否在查询结果的开头显示一行列名。 默认情况下,启用此选项。 但是,在某些情况下,您可能希望将其禁用,例如将mysql的输出发送到另一个程序,该程序只能看到数据而不是初始标题行。

禁用字段名,您可以使用以下任何一种形式指定选项:

–disable-column-names

–skip-column-names

–column-names=0

–disable和–skip前缀和=0后缀都具有相同的效果:它们关闭该选项。

选项的“enabled””形式可以用以下任何一种方式指定:

–column-names

–enable-column-names

–column-names=1

值ON,TRUE,OFF和FALSE也被识别为布尔选项(不区分大小写)。

如果一个选项的前缀是–loose,那么如果程序不能识别该选项,则程序不会退出,而只会发出警告:

shell> mysql –loose-no-such-option

mysql: WARNING: unknown option ‘–loose-no-such-option’

当在同一台机器上运行多个MySQL安装程序并在选项文件中列出选项时,–loose前缀可能很有用。 所有版本的程序都不能识别的选项可以使用–loose前缀(或放在选项文件中)。 识别该选项的程序版本通常处理,不识别的版本发出警告并忽略它。

mysqld允许限制大型客户端程序可以设置动态系统变量。 为此,请使用变量名称的最大前缀。 例如,–maximumquery_cache_size=4M可防止任何客户端使查询缓存大小大于4MB。

6.使用选项文件

大多数MySQL程序可以从选项文件(有时也称为配置文件)中读取启动选项。 选项文件提供了一种方便的方式来指定常用的选项,以便每次运行程序时不需要在命令行上输入它们。 对于MySQL服务器,MySQL提供了一些预配置的选项文件。

要确定程序是否读取选项文件,请使用–help选项进行调用。 (对于mysqld,请使用 – verbose和–help。)如果程序读取选项文件,则帮助消息指示查找哪些文件以及识别哪些选项组。

.mylogin.cnf 文件包含登录路径选项,被mysql_config_editor工具创建。“登录路径”是一个选项组,只允许某些选项:host, user, password, port 和socket。 客户端程序使用–login-path选项指定要从.mylogin.cnf读取哪个登录路径。

要指定备用文件名,请设置MYSQL_TEST_LOGIN_FILE环境变量。 这个变量被mysql-test-run.pl测试工具使用,也被mysql_config_editor和MySQL客户端如mysql,mysqladmin等等所识别。

在Unix,Linux和OS X上,MySQL程序以指定的顺序从下列文件中读取启动选项(首先读取顶层文件,后面的文件优先)。

/etc/my.cnf 全局选项

/etc/mysql/my.cnf 全局选项

SYSCONFDIR/my.cnf 全局选项

$MYSQL_HOME/my.cnf 服务器指定选项

defaults-extra-file 文件被–defaults-extra-file=file_name 指定,

~/.my.cnf 用户定义选项

~/.mylogin.cnf 登录路径选项

在表项中,〜表示当前用户的主目录($HOME的值)。

SYSCONFDIR表示在构建MySQL时使用CMake的SYSCONFDIR选项指定的目录。 默认情况下,这是位于编译的安装目录下的etc目录。

MYSQL_HOME是一个环境变量,包含特定于服务器的my.cnf文件所在的目录的路径。 如果未设置MYSQL_HOME,并使用mysqld_safe程序启动服务器,则mysqld_safe将尝试按如下方式设置MYSQL_HOME:

  • 让BASEDIR和DATADIR分别表示MySQL根目录和数据目录的路径名。
  • 从MySQL 5.7.8开始,如果没有设置MYSQL_HOME,mysqld_safe会将其设置为BASEDIR。
  • 在MySQL 5.7.8之前,如果在DATADIR中有一个my.cnf文件,但在BASEDIR中不存在,mysqld_safe会将MYSQL_HOME设置为DATADIR。 否则,如果在DATADIR中没有my.cnf文件,mysqld_safe将MYSQL_HOME设置为BASEDIR。

通常,DATADIR是二进制安装时的/usr/local/mysql/data或源安装时/usr/local/var路径。 这是在配置时指定的数据目录位置,而不是在mysqld启动时用–datadir选项指定的位置。 在运行时使用–datadir不会影响服务器查找选项文件的位置,因为它在处理任何选项之前查找它们。

MySQL按照刚刚描述的顺序查找选项文件,并读取存在的任何文件。 如果您要使用的选项文件不存在,请使用纯文本编辑器进行创建。

如果找到给定选项的多个实例,则最后一个实例优先。 有一个例外:对于mysqld,使用–user选项的第一个实例作为安全预防措施,以防止在命令行上覆盖选项文件中指定的用户。

在运行MySQL程序时,可以在命令行上给出的任何长选项都可以在选项文件中给出。 要获取程序的可用选项列表,请使用–help选项运行。

选项文件中的空行被忽略。 非空行可以采取以下任何形式:

  • #comment, ;comment

注释行以“#”或“;”开始。 “#”注释也可以在行的中间开始。

  • [grouop]

组是要为其设置选项的程序或组的名称。 在分组线之后,任何选项设置线将应用于指定组,直到给出选项文件或另一组线的结尾。 选项组名称不区分大小写。

  • opt_name

这相当于命令行上的–opt_name。

  • opt_name=value

这相当于命令行上的–opt_name = value。 在一个选项文件中,你可以在“=”字符周围有空格,这在命令行中是不正确的。 您可以选择将值包含在单引号或双引号内,如果该值包含“#”注释字符。

前后空格将自动从选项名称和值中删除.

您可以在选项值中使用转义“\b”,“\t”,“\n”,“\r”,“\\”和“\s”来表示退格,制表符,换行符,回车 ,反斜杠和空格字符。 选项文件中的转义规则是:

  • 如果反斜线后跟一个有效的转义序列字符,则序列将转换为序列表示的字符。 例如,“\ s”被转换为空格。
  • 如果反斜杠后面没有有效的转义序列字符,则保持不变。 例如,“\S”保持原样。

上述规则意味着一个文字反斜杠可以用“\\”来表示,如果没有一个有效的转义序列字符,就用“\”来表示。

选项文件中的转义序列规则与SQL语句中字符串文字中转义序列的规则略有不同。 在后一种情况下,如果“x”不是有效的转义序列字符,“\x”变成“x”而不是“\x”。

选项文件值的转义规则对于使用“\”作为路径名分隔符的Windows路径名是特别相关的。 如果后面跟有转义序列字符,则Windows路径名中的分隔符必须写为“\\”。 如果不是,可以写成“\\”或“\”。 或者,“/”可能在Windows路径名中使用,将被视为“\”。 假设你想在选项文件中指定C:\ Program Files \ MySQL \ MySQL Server 5.7的基本目录。 这可以通过几种方式来完成。 一些例子:

basedir=”C:\Program Files\MySQL\MySQL Server 5.7″

basedir=”C:\\Program Files\\MySQL\\MySQL Server 5.7″

basedir=”C:/Program Files/MySQL/MySQL Server 5.7″

basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s5.7

如果选项组名称与程序名称相同,则组中的选项专门适用于该程序。 例如,[mysqld]和[mysql]组分别适用于mysqld服务器和mysql客户端程序。

所有客户端程序(而不是mysqld)读取[client]选项组。 这使您可以指定适用于所有客户端的选项。 例如,[client]是完美的组,用于指定用于连接到服务器的密码。 (但请确保选项文件只能由您自己读写,以便其他人无法找到您的密码。)除非所有客户端程序都能识别您,否则请勿在[client]组中添加选项 使用。 如果您尝试运行它们,则在显示错误消息后,不明白该选项的程序将退出。

这是一个典型的全局选项文件:

[client]

port=3306

socket=/tmp/mysql.sock

[mysqld]

port=3306

socket=/tmp/mysql.sock

key_buffer_size=16M

max_allowed_packet=8M

[mysqldump]

quick

前面的选项文件对设置key_buffer_size和max_allowed_packet变量的行使用var_name=value语法。

这是一个典型的用户选项文件:

[client]

# The following password will be sent to all standard MySQL clients

password=”my_password”

[mysql]

no-auto-rehash

connect_timeout=2

如果您想要创建应该由mysqld服务器只读取特定MySQL版本系列的选项组,您可以使用名称为[mysqld-5.6],[mysqld-5.7]等的组来完成此操作。 下面的组表示sql_mode设置只能被5.7.x版本的MySQL服务器使用:

[mysqld-5.7]

sql_mode=TRADITIONAL

可以在选项文件中使用!include指令以包含其他选项文件和!includedir以搜索选项文件的特定目录。 例如,要包含/home/mydir/myopt.cnf文件,请使用以下指令:

!include /home/mydir/myopt.cnf

要搜索/home/mydir目录并读取在其中找到的选项文件,请使用以下指令:

!includedir /home/mydir

目录中的选项文件的读取顺序不能保证。

注意:

目前,任何要使用!includedir指令找到并包含的文件,Unix操作系统的文件名必须以.cnf结尾。 在Windows上,这个指令检查扩展名为.ini或.cnf的文件。

写入包含的选项文件的内容像其他任何选项文件一样。 也就是说,它应该包含一组选项,每个选项前面都有一个[GROUP]行,表示选项适用的程序。

当正在处理包含的文件时,只会使用当前程序正在查找的组中的那些选项。 其他组被忽略。 假设一个my.cnf文件包含这一行:

!include /home/mydir/myopt.cnf

并且假设 /home/mydir/myopt.cnf 看起来如下:

[mysqladmin]

force

[mysqld]

key_buffer_size=16M

如果my.cnf由mysqld处理,则仅使用/home/mydir/myopt.cnf中的[mysqld]组。 如果文件由mysqladmin处理,则只使用[mysqladmin]组。 如果该文件由其他程序处理,则不使用/home/mydir/myopt.cnf中的选项。

!includedir指令的处理方式相似,只是读取指定目录中的所有选项文件。

7.命令行选项影响选项文件处理

大多数支持选项文件的MySQL程序都处理以下选项。 由于这些选项会影响选项文件处理,因此必须在命令行上给出,而不是在选项文件中给出。 为了正常工作,这些选项中的每一个都必须在其他选项之前提供,除了以下例外:

  • –print-defaults可以在–defaults-file,–defaults-extra-file或–login-path之后立即使用。
  • 在Windows上,如果服务器是使用–defaults-file和–install选项启动的,则首先必须是–install。

指定文件名时,应避免使用“〜”shell元字符,因为它可能不会像您期望的那样被解析。

  • –defaults-extra-file=file_name

在全局选项文件之后(在Unix上),但在用户选项文件之前和(在所有平台上)在登录路径文件之前读取此选项文件。 如果文件不存在或无法访问,则会发生错误。 如果以相对路径名而不是完整路径名的形式给出file_name,则相对于当前目录进行解析。

  • –defaults-file=file_name

只使用给定的选项文件。 如果文件不存在或无法访问,则会发生错误。 如果以相对路径名而不是完整路径名的形式给出file_name,则相对于当前目录进行解释。

  • –defaults-group-suffix=str

不仅要读取通常的选项组,还要读取通常名称和后缀str的组。

例如,mysql客户端通常读取[client]和[mysql]组。 如果给出–defaults-group-suffix = _other选项,mysql也读取[client_other]和[mysql_other]组。

  • –login-path=name

从.mylogin.cnf登录路径文件中的指定登录路径读取选项。 “login path”是一个选项组,其中包含指定要连接到哪个MySQL服务器以及要认证哪个帐户的选项。 要创建或修改登录路径文件,请使用mysql_config_editor工具

除了默认情况下程序读取的选项组之外,客户端程序将读取与指定的登录路径对应的选项组。 考虑这个命令:

shell> mysql –login-path=mypath

默认情况下,mysql客户端读取[client]和[mysql]选项组。 因此,对于上面的命令,mysql从其他选项文件读取[client]和[mysql],从登录路径文件读取[client],[mysql]和[mypath]。

即使使用–no-defaults选项,客户端程序也会读取登录路径文件。

要指定备用登录路径文件名,请设置MYSQL_TEST_LOGIN_FILE环境变量。

  • –no-defaults

不读取任何选项文件。 如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用no-defaults来防止它们被读取。

例外是客户端程序读取.mylogin.cnf登录路径文件(如果存在的话),即使使用–no-defaults也不例外。 这允许以比命令行更安全的方式指定密码,即使–no-defaults存在。

  • –print-defaults

打印程序名称以及从选项文件中获取的所有选项。 从MySQL 5.7.8开始,密码值被屏蔽。

8.使用选项设置程序变量

许多MySQL程序都有可以在运行时使用SET语句设置的内部变量。

大多数这些程序变量也可以在服务器启动时通过使用与指定程序选项相同的语法来设置。 例如,mysql有一个max_allowed_packet变量来控制通信缓冲区的最大大小。 要将mysql的max_allowed_packet变量设置为16MB,请使用以下任一命令:

shell> mysql –max_allowed_packet=16777216

shell> mysql –max_allowed_packet=16M

第一个命令以字节为单位指定值。 第二个以兆字节为单位指定值。 对于具有数字值的变量,可以用K,M或G(大写或小写)后缀给出该值.

在选项文件中,变量设置不带前导破折号:

[mysql]

max_allowed_packet=16777216

[mysql]

max_allowed_packet=16M

如果你喜欢,可以用虚线指定变量名中的下划线。 以下选项组是等同的。 两者都将服务器密钥缓冲区的大小设置为512MB:

[mysqld]

key_buffer_size=512M

[mysqld]

key-buffer-size=512M

一个变量可以通过全部写入或任意明确的前缀来指定。例如 max_allowed_packet变量可以为mysql设置为–max_a,但不能设为–max,因为后者是不明确的:

shell> mysql –max=1000000

mysql: ambiguous option ‘–max=1000000’ (max_allowed_packet, max_join_size)

请注意,如果为程序实现新变量,则使用变量前缀可能会导致问题。 现在明确的前缀在将来可能变得模糊不清。

在服务器启动时设置变量时,可以使用用于指定值乘数的后缀,但不能在运行时使用SET来设置值。 另一方面,通过SET,你可以使用一个表达式来分配一个变量的值,当你在服务器启动的时候设置一个变量的时候这个表达式是不正确的。 例如,下列第一行在服务器启动时是合法的,但第二行不是:

shell> mysql –max_allowed_packet=16M

shell> mysql –max_allowed_packet=16*1024*1024

–也就是说,启动时的参数必须是具体值,不能包含乘法计算

相反,下面的第二行在运行时是合法的,但第一行不是:

mysql> SET GLOBAL max_allowed_packet=16M;

mysql> SET GLOBAL max_allowed_packet=16*1024*1024;

–在运行的时候必须指定为字节相乘的值

9.选项默认值,期望值和等号

按照惯例,分配一个值的长形式的选项是用等号(=),如下所示:

shell> mysql –host=tonfisk –user=jon

对于需要值(即没有默认值)的选项,等号不是必需的,因此以下内容也是有效的:

shell> mysql –host tonfisk –user jon

这2个是等价的,mysql客户端尝试连接到主机名为tonfisk的MYSQL 服务器,并使用用户名jon。

由于这种行为,如果没有为期望值的选项提供值,偶尔会出现问题。 考虑以下示例,其中用户以用户jon连接到在主机tonfisk上运行的MySQL服务器:

shell> mysql –host 85.224.35.45 –user jon

mysql> SELECT CURRENT_USER();

+—————-+

| CURRENT_USER() |

+—————-+

| jon@% |

+—————-+

1 row in set (0.00 sec)

省略其中一个选项所需的值会产生错误,如下所示:

shell> mysql –host 85.224.35.45 –user

mysql: option ‘–user’ requires an argument

在这种情况下,mysql无法在–user选项之后找到值,因为在命令行上没有任何值。 但是,如果您省略了不是最后一个选项的选项的值,则会得到一个非预期的错误:

shell> mysql –host –user jon

ERROR 2005 (HY000): Unknown MySQL server host ‘–user’ (1)

因为mysql假设命令行中的–host后面的任何字符串都是主机名,–host –user被解释为–host=– user,并且客户端尝试连接到在主机上运行的MySQL服务器 命名为“–user”。

具有默认值的选项在分配值时总是需要等号; 不这样做会导致错误。 例如,MySQL服务器–log-error选项具有默认值host_name.err,其中host_name是运行MySQL的主机的名称。 假定您在主机名为“tonfisk”的计算机上运行MySQL,并考虑以下mysqld_safe调用:

shell> mysqld_safe &

[1] 11699

shell> 080112 12:53:40 mysqld_safe Logging to ‘/usr/local/mysql/var/tonfisk.err’.

080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var

shell>

关闭服务器后,重新启动它:

shell> mysqld_safe –log-error &

[1] 11699

shell> 080112 12:53:40 mysqld_safe Logging to ‘/usr/local/mysql/var/tonfisk.err’.

080112 12:53:40 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var

shell>

这两个结果是一样的,因为 –log-error并不需要值,其有自己的默认值。现在假设你想使用名称为my-errors.err的日志文件。您可以尝试使用–log-error my-errors启动服务器,但是这并不具有预期的效果,如下所示:

shell> mysqld_safe –log-error my-errors &

[1] 31357

shell> 080111 22:53:31 mysqld_safe Logging to ‘/usr/local/mysql/var/tonfisk.err’.

080111 22:53:32 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var

080111 22:53:34 mysqld_safe mysqld from pid file /usr/local/mysql/var/tonfisk.pid ended

[1]+ Done ./mysqld_safe –log-error my-errors

服务器试图开始使用/usr/local/mysql/var/tonfisk.err作为错误日志,但随后关闭。 检查这个文件的最后几行显示了原因:

shell> tail /usr/local/mysql/var/tonfisk.err

2013-09-24T15:36:22.278034Z 0 [ERROR] Too many arguments (first extra is ‘my-errors’).

2013-09-24T15:36:22.278059Z 0 [Note] Use –verbose –help to get a list of available options!

2013-09-24T15:36:22.278076Z 0 [ERROR] Aborting

2013-09-24T15:36:22.279704Z 0 [Note] InnoDB: Starting shutdown…

2013-09-24T15:36:23.777471Z 0 [Note] InnoDB: Shutdown completed; log sequence number 2319086

2013-09-24T15:36:23.780134Z 0 [Note] mysqld: Shutdown complete

由于–log-error选项提供默认值,所以您必须使用等号来为其分配不同的值,如下所示:

shell> mysqld_safe –log-error=my-errors &

[1] 31437

shell> 080111 22:54:15 mysqld_safe Logging to ‘/usr/local/mysql/var/my-errors.err’.

080111 22:54:15 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var

shell>

现在服务器已经成功启动,并将错误记录到文件/usr/local/mysql/var/ my-errors.err。

在选项文件中指定选项值时可能会出现类似的问题。 例如,考虑包含以下内容的my.cnf文件:

[mysql]

host

user

当mysql客户端读取这个文件时,这些条目被解析为–host –user或–host =– user,结果显示在这里:

shell> mysql

ERROR 2005 (HY000): Unknown MySQL server host ‘–user’ (1)

但是,在选项文件中,不使用等号。 假设my.cnf文件如下所示:

[mysql]

user jon

尝试启动mysql 会导致一个不同的错误:

shell> mysql

mysql: unknown option ‘–user jon’

如果要在选项文件中写入host tonfisk而不是host=tonfisk,则会发生类似的错误。 相反,你必须使用等号:

[mysql]

user=jon

现在登录尝试成功:

shell> mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 5

Server version: 5.7.10 Source distribution

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> SELECT USER();

+—————+

| USER() |

+—————+

| jon@localhost |

+—————+

1 row in set (0.00 sec)

这与使用等号不是必需的命令行不同:

shell> mysql –user jon –host tonfisk

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 6

Server version: 5.7.10 Source distribution

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> SELECT USER();

+—————+

| USER() |

+—————+

| jon@tonfisk |

+—————+

1 row in set (0.00 sec)

–也就是说 选项文件中必须是用等号

在MySQL 5.7中,在选项文件中指定一个需要值但没有值的选项会导致服务器中止并出现错误。 假设my.cnf包含以下内容:

[mysqld]

log_error

relay_log

relay_log_index

这将导致服务器在启动时失败,如下所示:

shell> mysqld_safe &

130924 10:41:46 mysqld_safe Logging to ‘/home/jon/bin/mysql/var/tonfisk.err’.

130924 10:41:46 mysqld_safe Starting mysqld daemon with databases from /home/jon/bin/mysql/var

130924 10:41:47 mysqld_safe mysqld from pid file /home/jon/bin/mysql/var/tonfisk.pid ended

–log-error选项不需要参数; 但是,–relay-log选项需要一个,如错误日志中所示(缺少指定值时,默认为datadir / hostname.err):

shell> tail -n 3 ../var/tonfisk.err

130924 10:41:46 mysqld_safe Starting mysqld daemon with databases from /home/jon/bin/mysql/var

2013-09-24T15:41:47.217180Z 0 [ERROR] /home/jon/bin/mysql/libexec/mysqld: option ‘–relay-log’ requires an argument

2013-09-24T15:41:47.217479Z 0 [ERROR] Aborting

这与以前的行为有所不同,服务器将示例my.cnf文件中的最后两行解释为–relay-log=relay_log_index,并使用“relay_log_index”作为基本名称创建中继日志文件(本应该是这样)。 (BUG#25192)

    原文作者:sybbjs
    原文地址: https://zhuanlan.zhihu.com/p/34120611
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞