msql程序
Oracle公司提供MySQL命令行程序(也可以说是常用工具),运行这些程序时需要指定选项的语法,大多数程序都有特定于它们自己操作的选项,但是它们的选项语法都是类似的。
mysql8官网:
-
- Overview of MySQL Programs — MySQL程序概述
- Using MySQL Programs — 使用mysql程序
- Server and Server-Startup Programs — 服务器和服务器启动程序
- Installation-Related Programs — 安装相关程序
- Client Programs — 客户端程序
- Administrative and Utility Programs — 行政和公共事业程序
- Program Development Utilities — 程序开发工具
- Miscellaneous Programs — 杂项程序
- Environment Variables — 环境变量
- Unix Signal Handling in MySQL — mysql中unix信号处理
使用mysql程序(工具)的方法:
首先要调用mysql程序,然后通过指定不同的参数(option)指示mysql程序需要完成什么工作,最后通过修改参数的不同值达到最终目的。
1、调用mysql程序
要从命令行(即从shell或命令提示符)调用MySQL程序,请输入程序名,然后输入任何选项或其他参数,用来指示程序它需要做什么。下面的命令显示了一些示例。需要注意shell>代表命令解释器的提示符,它不是输入内容的一部分。不同的命令解释器使用不同的命令提示符。典型的提示符是:$表示sh、ksh或bash命令解释器, %表示csh或tcsh命令解释器, C:\>表示Windows command.com或cmd.exe命令解释器。
shell> mysql --user=root test shell> mysqladmin extended-status variables shell> mysqlshow --help shell> mysqldump -u root personnel
以单破折号或双破折号(-,--)开头的参数用来指定程序选项。选项通常指示程序应该与服务器建立的连接类型或影响其操作模式。非选项参数(前导没有破折号的参数)为程序提供附加信息。例如,mysql程序将第一个非选项参数解释为数据库名,因此mysql --user=root test 命令表明您想要使用测试数据库。
有些选项在许多程序中是常见的。其中最常用的是指定连接参数的--host(或-h)、--user(或-u)和--password(或-p)选项。它们指示要连接的MySQL服务器运行的主机,以及MySQL帐户的用户名和密码。所有的MySQL客户端程序都理解这些选项,它们能够指定要连接的服务器和要在该服务器上使用的帐户。其他连接选项有--port(或-P)用于指定TCP/IP端口号,以及--socket(或-S)用于指定Unix上的Unix套接字文件(或Windows上的命名管道名称)。
调用mysql各种程序时可能会发现有必要使用安装的bin目录的路径名来调用MySQL程序。这种情况很可能发生在当你试图从bin目录以外的任何目录运行MySQL程序时,会出现“程序未找到”错误。为了更方便地使用MySQL,可以将bin目录的path名称添加到path环境变量设置中。这使得可以通过输入程序的名称而不是整个路径名来运行程序。例如,如果mysql安装在/usr/local/mysql/bin目录下,则可以以mysql的形式调用该程序,而不必以/usr/local/mysql/bin/mysql的方式调用。
2、指定MySQL程序选项(重点)
有几种方法可以指定MySQL程序的选项:
-
- 在命令行程序名后面列出选项。这对于应用于程序的特定调用的选项很常见。
- 在程序启动时读取的选项文件(option file)中列出选项。对于希望程序在每次运行时使用的选项,这是很常见的。
- 在环境变量中列出选项。对于希望在程序每次运行时应用的选项,此方法非常有用。在实践中,选项文件(option files)通常用于这个目的,但是在Unix上运行多个MySQL实例有一种情况,在这种情况下,环境变量可能非常有用。它描述了一种方便的技术,使用这些变量为服务器和客户机程序指定TCP/IP端口号和Unix套接字文件。
选项是按顺序处理的,因此,如果指定了多个选项,则最后一次出现的选项优先。下面的命令使mysql连接到localhost上运行的服务器:
mysql -h example.com -h localhost
有一个例外:对于mysqld,--user选项的第一个实例被用作安全预防措施,以防止在选项文件中指定的用户在命令行上被覆盖。
如果给出了冲突的或相关的选项,则后面的选项优先于前面的选项。mysql在“no column names”模式下执行如下命令:
mysql --column-names --skip-column-names
MySQL程序首先检查环境变量,然后处理选项文件(option files),然后检查命令行,从而确定给出了哪些选项。因为后面的选项优先于前面的选项,所以处理顺序意味着环境变量的优先级最低,命令行选项的优先级最高。
对于服务器,有一个例外:数据目录中的mysqld-auto.cnf选项文件是最后处理的,因此它甚至优先于命令行选项。
可以利用MySQL程序处理选项的方式,在选项文件中指定程序的默认选项值。这样可以避免在每次运行程序时输入它们,同时允许在必要时使用命令行选项覆盖默认值。
2.1在命令行上使用选项
在命令行中指定的程序选项遵循以下规则:
- 选项在命令名(程序名)之后给出。
- 选项参数以一个破折号或两个破折号开始,这取决于它是选项名的短形式还是长形式。许多选项(option)既有短形式,也有长形式。例如- ?和--help是指MySQL 程序显示帮助信息的选项的长短形式。
- 选项名区分大小写。-v和-V都是合法的,有不同的含义。(它们是相应的--verbose和--version选项的简短形式。)
- 有些选项在选项名后面有一个值。例如,-h localhost或--host=localhost表示客户端程序的MySQL服务器主机。选项值告诉程序MySQL服务器所在主机的名称。
- 对于选项名是长形式的选项,用=号分隔选项名和值。对于选项名是短形式的选项,选项值可以直接跟在选项字母后面,或者在选项之间加一个空格:-hlocalhost和-h localhost等价。这个规则的一个例外是指定MySQL密码的选项。这个选项可以以长形式的方式给出--password=pass_val或--password。在后一种情况下(没有给出密码值),程序以交互方式提示您输入密码。密码选项也可以以简短形式给出,如-ppass_val或-p。然而,对于短形式,如果密码值,它必须跟在选项字母后面,中间没有空格: 如果选项字母后面有一个空格,程序就无法判断后面的参数是应该是密码值还是其他类型的参数。
因此,以下两个命令有两种完全不同的含义:
mysql -ptest
mysql -p test
第一个命令指示mysql使用一个密码值test,但是没有指定默认数据库。第二个命令指示mysql提示输入密码值,并使用test作为默认数据库。
- 在选项名称中,破折号(-)和下划线(_)可以互换使用。例如,--skip-grant-tables和--skip_grant_tables是等价的。(然而,前导破折号不能用下划线表示。)
- MySQL服务器有特定的命令选项,只能在启动时指定,以及一组系统变量,其中一些可能在启动时、运行时或两者同时设置。系统变量名使用下划线而不是破折号,并且在运行时引用(例如,使用SET或SELECT语句)时,必须使用下划线:
SET GLOBAL general_log = ON;
SELECT @@GLOBAL.general_log;
在服务器启动时,系统变量的语法与命令选项相同,因此在变量名中,破折号和下划线可以互换使用。例如,--general_log=ON和--general-log=ON 是等价的。(这也适用于在选项文件中设置的系统变量。)
-
- 对于接受数值的选项,可以给值加上后缀K、M或G,表示乘数为1024、10242或10243。在MySQL 8.0.14中,后缀也可以是T、P和E来表示乘数10244、10245或10246。后缀字母可以是大写或小写。
- 在命令行中给出包含空格的选项值时,必须用引号括起来。例如,可以在mysql中使用——execute(或-e)选项,将一个或多个以分号分隔的SQL语句传递给服务器。当使用该选项时,mysql执行选项值中的语句并退出。这些语句必须用引号括起来。例如:
shell> mysql -u root -p -e "SELECT VERSION();SELECT NOW()" Enter password: ****** +------------+ | VERSION() | +------------+ | 8.0.19 | +------------+ +---------------------+ | NOW() | +---------------------+ | 2019-09-03 10:36:48 | +---------------------+ shell>
2.2通过读取选项文件(配置文件)使用选项
大多数MySQL程序(工具)可以从选项文件(有时称为配置文件)读取启动选项。选项文件提供了一种方便的方式来指定常用的选项,这样就不必在每次运行程序时在命令行中输入它们。要确定程序是否读取选项文件,可以使用--help选项调用它。(对于mysqld,使用--verbose和--help。)如果程序读取选项文件,帮助消息将指出它查找的文件和它识别的选项组。
2.2.1选项文件读取注意事项
- 以--no-defaults选项开始的MySQL程序不读取除.mylogin.cnf(加密的登陆配置文件)之外的任何选项文件。
- 禁用系统变量persiststed_globals_load启动的服务器不会读取mysqld-auto.cnf。
2.2.2选项文件创建注意事项
许多选项文件都是纯文本文件,使用任何文本编辑器创建。不是由任何文本编辑器创建的文件有:
-
- 包含登录路径选项的.mylogin.cnf文件。这是一个由mysql_config_editor程序创建的加密文件。“登录路径”是一个选项组,它只允许某些选项:主机、用户、密码、端口和套接字。客户端程序使用--login-path选项指定要从.mylogin.cnf读取的登录路径。
- 数据目录中的mysqld-auto.cnf文件。这个json格式的文件包含持久的系统变量设置。它是由服务器在执行SET PERSIST或SET PERSIST_ONLY语句时创建的。mysqld-auto.cnf的管理应该留给服务器,而不是手动执行。
2.2.3选项文件处理顺序
MySQL按照下面讨论中描述的顺序查找选项文件,并读取任何存在的选项文件。如果您想要使用的选项文件不存在,请使用适当的方法创建它。注意一些特殊的文件不可手动创建。
2.2.3.1 windows系统的处理顺序
在Windows上,MySQL程序按照指定的顺序从文件中读取启动选项(先列出的文件优先读取,后读的文件中的配置会覆盖之前的文件中相同配置,优先生效),如下表所示。
File Name | Purpose |
---|---|
,
|
Global options |
C:\my.ini , C:\my.cnf |
Global options |
,
|
Global options |
defaults-extra-file |
用--defaults-extra-file指定的文件(如果有的话) |
|
登录路径选项(仅限客户端—mysql程序使用) |
|
使用SET PERSIST或SET PERSIST_ONLY(仅限服务器)持久化系统变量 |
- 在上表中,%WINDIR%表示Windows目录的位置。这通常是C:\windows。使用以下命令从WINDIR环境变量的值来确定它的确切位置:
C:\> echo %WINDIR%
-
-
- %APPDATA%表示Windows应用程序数据目录的值。使用以下命令从APPDATA环境变量的值确定它的确切位置:
-
C:\> echo %APPDATA%
-
-
- BASEDIR表示MySQL的基本安装目录。
- DATADIR表示MySQL数据目录。正如用于查找mysqld-auto.cnf,它的默认值是MySQL编译时内置的数据目录位置,但是可以通过在mysqld-auto.cnf被处理之前通过选项的--datadir来更改。
-
2.2.3.2 unix和Linux系统的处理顺序
在Unix和类Unix系统上,MySQL程序按照指定的顺序(先列出的文件优先读取,后读的文件中的配置会覆盖之前的文件中相同配置,优先生效)从下表中读取启动选项。
File Name | Purpose |
---|---|
/etc/my.cnf |
Global options |
/etc/mysql/my.cnf |
Global options |
|
Global options |
$MYSQL_HOME/my.cnf |
特定于服务器的选项(仅限服务器) |
defaults-extra-file |
用--defaults-extra-file指定的文件(如果有的话) |
~/.my.cnf |
特定于用户的选项 |
~/.mylogin.cnf |
特定于用户的登录路径选项(仅限客户端) |
|
使用SET PERSIST或SET PERSIST_ONLY(仅限服务器)持久化系统变量 |
- 上表中~表示当前用户的主目录($ home的值)。
-
SYSCONFDIR表示在MySQL建立时用SYSCONFDIR选项指定的目录。默认情况下,这是位于编译安装目录下的etc目录。
-
MYSQL_HOME是一个环境变量,包含服务器特定的my.cnf文件所在目录的路径。如果没有设置MYSQL_HOME,使用mysqld_safe程序启动服务器时,mysqld_safe会将其设置为MySQL的基础安装目录BASEDIR。
-
DATADIR表示MySQL数据目录。正如查找mysqld-auto.cnf,它的默认值是MySQL编译时内置的数据目录位置,但是可以通过在mysqld-auto.cnf被处理之前通过指定选项的--datadir来更改。
- 如果找到一个给定选项的多个实例,那么最后一个实例优先,只有一个例外:对于mysqlq --user选项的第一个实例被用作安全预防措施,以防止在选项文件中指定的用户在命令行上被覆盖。
2.2.4选项文件语法
当运行MySQL程序时,在命令行中可能给出的任何长形式选项也可以在选项文件(option files)中给出。要获取mysql程序的可用选项列表,使用--help选项运行它。(对于mysqld,使用--verbose和--help。)
注意:下面对选项文件语法的说明适用于手动编辑的文件。这不包括使用mysql_config_editor创建并加密的.mylogin.cnf和服务器以JSON格式创建的mysqld-auto.cnf。
语法:
(1)在选项文件(option files)中指定选项的语法类似于命令行语法,但是,在选项文件中,忽略选项名的前置两个破折号,并且每行只指定一个选项。例如,命令行上的--host=localhost应该在选项文件的单独行上指定为host=localhost。要在选项文件中指定一个形式为--loose-opt_name的选项,请将它写成loose-opt_name。
(2)opt_name=value这等价于命令行上的--opt_name=value。在选项文件中,可以在=字符周围有空格,而在命令行中不是这样。选项文件中值可以用单引号或双引号括起来,如果值包 含#注释字符,这很有用。
(3)选项文件中选项名称和值中自动删除前置和后置空格。
(4)可以在选项值中使用转义序列\b、\t、\n、\r、\\和\s来表示退格、制表符、换行符、回车符、反斜杠和空格字符。选项文件中值的转义规则特别适用于Windows路径名,它使用 \ 作为路径名分隔符。Windows路径名中的分隔符如果后跟转义序列字符,则必须写成\\。它可以写成\\或\,如果不是。另外,/也可以在Windows路径名中使用,并被视为\。假设您想要在一 个选项文件中指定C:\Program Files\MySQL\MySQL Server 8.0的基本目录。这可以通过几种方式实现。一些例子:
basedir="C:\Program Files\MySQL\MySQL Server 8.0" basedir="C:\\Program Files\\MySQL\\MySQL Server 8.0" basedir="C:/Program Files/MySQL/MySQL Server 8.0" basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s8.0
(5)选项文件中的空行会被忽略。注释行以#或;开头。#注释也可以从行中间开始。
(6) [group]—“组”是要设置选项的程序或组的名称。在 [group]组行之后,任何选项设置行都属于此命名组,直到选项文件或另一个组行给出结束。选项组名不区分大小写。
使用组 [group]需要注意:
-
- [client]组允许您指定适用于所有客户端的选项。例如,[client]是用于指定连接到服务器的密码。(但请确保该选项文件只能由您自己访问,以免其他人发现您的密码。)确保不要在[client]组中放入个例选项,除非您使用的所有客户端程序都能识别该选项。如果您试图运行不理解该选项的程序,则会在显示错误消息后退出。
- 如果选项组名与程序名相同,则组中的选项专门适用于该程序。例如:[mysqld]组应用于mysqld服务器端,[mysql]组应用于mysql客户端程序。[client]选项组是由MySQL发行版中提供的所有客户端程序读取的。
- 先列出一般的选项组,然后列出更具体的组。例如,[client]组更通用,因为它可以被所有客户端程序读取,而[mysqldump]组只能被mysqldump读取。后面指定的选项会覆盖前面指定的选项,所以按照[client], [mysqldump]的顺序放置选项组可以启用mysqldump指定的选项来覆盖[client]选项。
- 为了在特定的MySQL发布系列中创建只能被mysqld服务器读取的选项组,可以使用[mysqld-5.7], [mysqld-8.0]等名称的组。下面的组表示sql_mode设置应该只在8.0版本的MySQL服务器上使用。x版本号:
[mysqld-8.0] sql_mode=TRADITIONAL
2.2.5选项文件模板
典型的全局选项文件:
[client] port=3306 socket=/tmp/mysql.sock [mysqld] port=3306 socket=/tmp/mysql.sock key_buffer_size=16M max_allowed_packet=128M [mysqldump] quick
典型的用户选项文件:
[client] # The following password is sent to all standard MySQL clients password="my password" [mysql] no-auto-rehash connect_timeout=2