msql程序

    Oracle公司提供MySQL命令行程序(也可以说是常用工具),运行这些程序时需要指定选项的语法,大多数程序都有特定于它们自己操作的选项,但是它们的选项语法都是类似的。

    mysql8官网:

使用mysql程序(工具)的方法:

         首先要调用mysql程序,然后通过指定不同的参数(option)指示mysql程序需要完成什么工作,最后通过修改参数的不同值达到最终目的。

1、调用mysql程序

        要从命令行(即从shell或命令提示符)调用MySQL程序,请输入程序名,然后输入任何选项或其他参数,用来指示程序它需要做什么。下面的命令显示了一些示例。需要注意shell>代表命令解释器的提示符,它不是输入内容的一部分。不同的命令解释器使用不同的命令提示符。典型的提示符是:$表示shkshbash命令解释器, %表示cshtcsh命令解释器, C:\>表示Windows command.comcmd.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 NamePurpose
%WINDIR%\my.ini%WINDIR%\my.cnf Global options
C:\my.iniC:\my.cnf Global options
BASEDIR\my.iniBASEDIR\my.cnf Global options
defaults-extra-file

用--defaults-extra-file指定的文件(如果有的话)

%APPDATA%\MySQL\.mylogin.cnf 登录路径选项(仅限客户端—mysql程序使用)
DATADIR\mysqld-auto.cnf 使用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 NamePurpose
/etc/my.cnf Global options
/etc/mysql/my.cnf Global options
SYSCONFDIR/my.cnf Global options
$MYSQL_HOME/my.cnf 特定于服务器的选项(仅限服务器)
defaults-extra-file 用--defaults-extra-file指定的文件(如果有的话)
~/.my.cnf 特定于用户的选项
~/.mylogin.cnf 特定于用户的登录路径选项(仅限客户端)
DATADIR/mysqld-auto.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

 

posted on 2021-04-10 10:59  哑吧  阅读(100)  评论(0编辑  收藏  举报