mysql-命令行客户端

mysql-命令行客户端

选项列表

基础选项

  • –help, -?
    • 帮助
  • –defaults-group-suffix=str
    • 选项组名称的后缀

      如果 –defaults-group-suffix=_other ,mysql 也会读取 [client_other] 和 [mysql_other]

  • –execute=statement, -e statement

    • 执行语句并退出
  • –force, -f
    • 强制执行 (即使报错也执行)
  • –verbose, -v
    • 详细模式。产生有关程序功能的更多输出。
    • 可以多次指定此选项 (如 -v -v -v),以产生越来越多的输出。
  • –version, -V
    • 显示版本信息并退出
  • –vertical, -E
    • 垂直打印输出行(每列的值是一行)
  • –plugin-dir=dir_name
    • 插件目录。
    • 如果 –default-auth 指定了插件但是找不到,可以指定此选项。

连接选项

  • –bind-address=ip_address
    • 指定要连接的服务端地址
  • –connect-expired-password
    • 使用过期密码连接 (沙箱模式) 。
    • 通常用于非交互式调用
  • –connect-timeout=value
    • 连接超时时间,默认0
  • –database=db_name, -D db_name
    • 连接的库名
  • –init-command=str
    • 连接到服务器端后要执行的语句,每次重连都会自动执行
  • –network-namespace=name
    • 用于 TCP/IP 连接的网络名称空间
  • –user=user_name, -u user_name
    • 用户
  • –host=host_name, -h host_name
    • 主机名
  • –port=port_num, -P port_num
    • TCP/IP 连接的端口
  • –password[=password], -p[password]
    • 密码。选项和密码之间不能有空格。使用 –skip-password 跳过密码
  • –protocol={TCP|SOCKET|PIPE|MEMORY}
    • 连接到服务端所用的传输协议
  • –socket=path, -S path
    • socket 路径
  • –pipe, -W
    • 在 Windows 上,使用命名管道连接到服务器。
  • –ssl-fips-mode={OFF|ON|STRICT}
    • 是否在客户端上启用 FIPS 模式
  • –wait, -w
    • 连接失败后,等待和重试
  • –dns-srv-name=name
    • 指定 DNS SRV 记录的名称,该记录确定用于建立与 MySQL 服务器的连接的候选主机
    • 此选项优先于 –host

SSL 选项

  • –get-server-public-key
    • 从服务端请求基于 RSA 密钥对的密码交换所需的公共密钥。此选项适用于使用 caching_sha2_password 身份验证插件进行身份验证的客户端
  • –server-public-key-path=file_name
    • PEM 格式的文​​件的路径名,其中包含服务器用于基于 RSA 密钥对的密码交换所需的公用密钥的客户端副本
    • 此选项适用于使用 sha256_password 或 caching_sha2_password 身份验证插件进行身份验证的客户端。
    • 如果给定了此选项,并指定了有效的公钥文件,则它优先于 –get-server-public-key。
  • –ssl*
    • 以 ssl 开头的选项表示是否使用 SSL 连接,以及 SSL 密钥和证书的路径

TLS 选项

  • –tls-ciphersuites=ciphersuite_list
    • 使用 TLSv1.3 的加密连接的允许密码列表
  • –tls-version=protocol_list
    • 加密连接允许的 TLS 协议

日志选项

  • –syslog, -j
    • 将交互式语句记录到系统日志 syslog

显示格式选项

  • –auto-vertical-output
    • 自动垂直显示,适用于以 ;\G 结尾的语句
  • –column-names
    • 输出结果中显示列名
  • –column-type-info
    • 显示元数据的结果集。
    • 此信息对应于 C API MYSQL_FIELD 数据结构的内容
  • –comments, -c

    已弃用。

    • 发送到服务端的语句中是否保留注释,默认 –skip-comments
  • –html, -H
    • 输出 HTML 格式
  • –line-numbers
    • 为错误信息记录行号
  • –prompt=format_str
    • 提示符,默认是 mysql>
  • –skip-column-names, -N
    • 输出结果不打印列名
  • –skip-line-numbers, -L
    • 错误信息不记录行号
  • –table, -t
    • 以表格格式显示输出。交互模式中的默认值。
  • –xml, -X
    • 产生 XML 输出
  • –pager[=command]
    • 使用给定命令进行分页查询输出。使用 –skip-pager 禁用此功能。
    • 选项值
      • less
      • more
      • cat[>filename]

字符集和排序规则选项

  • –character-sets-dir=dir_name
    • 字符集的安装路径
  • –default-character-set=charset_name
    • 客户端默认字符集

压缩选项

  • –compression-algorithms=value
    • 连接服务器端时允许的压缩算法,默认不压缩 (uncompressed)
    • 可用算法对应系统变量 protocol_compression_algorithms
  • –zstd-compression-level=level
    • zstd 算法的压缩级别,允许的压缩级别是 1-22,默认是3

处理模式选项

  • –auto-rehash
    • 启用自动重新 hash 处理 (名称补全) ,默认已开启。此功能依赖于 readline 库。
  • –batch, -B
    • 批处理模式,输出结果使用 tab 作为列分隔符,以非表格格式输出并转义特殊字符。此选项不会使用到历史文件
  • –no-auto-rehash, -A
    • 功能和 –skip-auto-rehash 相同
  • –show-warnings
    • 如果有警告,会在每个语句之后显示。适用于交互模式和批处理模式。
  • –sigint-ignore
    • 忽略 SIGINT 信号 (Ctrl+C 中断当前语句或取消输入)
  • –silent, -s
    • 安静模式,产生较少的输出。可以多次指定,以产生越来越少的输出。
    • 此选项导致非表格输出和特殊字符转义,可以使用 –raw 禁用字符转义。
  • –tee=file_name
    • 将输出副本追加到给定文件。此选项仅在交互模式下有效。
  • –one-database, -o
    • 除非是命令行上指定的库上发生的语句,否则会被忽略。
  • –binary-as-hex
    • 以十六进制表示法显示二进制数据。

    • 影响所有二进制字符串的显示,包括 CHAR() 和 UNHEX() 之类的函数

    • 如果要解除这个选项的影响,使其无论是否开启都显示为字符串,需要转换字符集

      -- 方法一
      mysql> SELECT CHAR(0x41 USING utf8mb4);
      +--------------------------+
      | CHAR(0x41 USING utf8mb4) |
      +--------------------------+
      | A                        |
      +--------------------------+
      
      -- 方法二
      mysql> SELECT CONVERT(UNHEX('41') USING utf8mb4);
      +------------------------------------+
      | CONVERT(UNHEX('41') USING utf8mb4) |
      +------------------------------------+
      | A                                  |
      +------------------------------------+
      
    • 以交互模式运行时,默认已启用此选项
      mysql> status;
      ...
      Binary data as:         Hexadecimal
      ...
      
  • –binary-mode
    • 用于处理包含 BLOB 值的 mysqldbinlog 输出
    • 默认情况下,mysqld 将语句中的 \r\n 转换为 \n,将 \0 解释为终止符。此选项会禁用这两个功能。非交互模式下,还会禁用除字符集和分隔符以外的所有 mysql 命令。
  • –delimiter=str
    • 语句的定界符,默认是 ;
  • –histignore
    • 忽略 (不记入历史文件和 syslog ) 模式列表,多个模式之间用冒号 : 分隔,如 “IDENTIFIED:PASSWORD
  • –ignore-spaces, -i
    • 忽略函数名称后的空格,对应的 SQL mode 是 IGNORE_SPACE
  • –raw, -r
    • 原始模式。非表格输出时,禁用字符转义

      非表格输出时(批处理模式下,或使用 --batch--silent 选项时),特殊字符会在输出时被转义,以便可以轻松识别它们。例如, \n\t\0\\

  • –safe-updates, –i-am-a-dummy, -U

    • 安全更新。
    • 如果启用此选项,则在 WHERE 子句或 LIMIT 子句中不使用键的 UPDATE 和 DELETE 语句将产生错误。
    • 此外,对可能产生非常大的结果集的 SELECT 语句施加了限制。
    • 使用 –skip-safe-updates 禁用此功能
  • –unbuffered, -n
    • 每次查询后刷新缓冲区
  • –shared-memory-base-name=name
    • 在 Windows 上,共享内存名称,用于使用共享内存与本地服务器建立的连接。默认值为 MYSQL。
  • –no-beep, -b
    • 发生错误时不发出哔声
  • –disable-named-commands
    • 禁用命名命令。仅使用 \* 形式,或仅在以分号 ; 结尾的行的开头使用命名命令。mysql 默认启用此选项。

配置文件选项

  • –defaults-extra-file=file_name
    • 额外的配置文件。在全局配置文件之后,用户配置文件之前会读取此文件。
  • –defaults-file=file_name
    • 仅读取给定的配置文件。
    • .mylogin.cnf 例外,这个配置文件总是被读取。
  • –login-path=name
    • 从登录路径文件 .mylogin.cnf 中读取选项
  • –no-defaults
    • 不读取任何配置文件 (.mylogin.cnf 例外)
  • –print-defaults
    • 打印输出程序名称和所有读取的配置文件内容

身份认证选项

  • –default-auth=plugin
    • 客户端的默认身份认证插件
  • –enable-cleartext-plugin
    • 启用 mysql_clear_password 明文身份验证插件

数据加载选项

  • –local-infile[={0|1}]
    • 显式的启用或禁用 LOCAL 本地数据加载功能,不指定任何值时,表示启用
  • –load-data-local-dir=dir_name
    • LOAD DATA LOCAL 语句指定的本地路径
    • 此选项是否生效取决于 LOCAL 本地加载功能是否开启
      • 如果开启 (–local-infile[=1]),则将忽略此选项
      • 如果未开启 (–local-infile=0),则将应用此选项

调试选项

  • –debug[=debug_options], -# [debug_options]

    MySQL 的二进制发行版不是以此选项构建的。

    • 编写调试日志。典型的 debug_options 字符串是 d:t:o,file_name。默认值为 d:t:o,/tmp/mysql.trace。仅当 MySQL 使用 WITH_DEBUG 构建的时,此选项才可用
  • –debug-check

    MySQL 的二进制发行版不是以此选项构建的。

    • 程序退出时,打印一些调试信息。仅当 MySQL 使用 WITH_DEBUG 构建的时,此选项才可用。
  • –debug-info, -T

    MySQL 的二进制发行版不是以此选项构建的。

    • 程序退出时,打印调试信息以及内存和 CPU 使用情况统计信息。仅当 MySQL 使用 WITH_DEBUG 构建的时,此选项才可用。

资源限制选项

  • –max-allowed-packet=value
    • 客户端/服务端通信缓冲区的最大大小。默认为16MB,最大为1GB。
  • –max-join-size=value
    • 当使用 –safe-updates 时,行的自动限制。默认是1,000,000
  • –named-commands, -G
    • 允许使用长格式命令,而不仅仅时短格式命令。例如,quit 和 \q 都能识别
    • 使用 –skip-named-commands 禁用长格式命令
  • –net-buffer-length=value
    • TCP/IP 和 socket 方式的通信缓冲区大小,默认 16KB
  • –quick, -q
    • 不缓存查询结果,直接把接收到的每一行打印出来
    • 如果输出被挂起,这可能会降低服务器的速度。 使用该选项,mysql 不使用历史文件。
  • –select-limit=value
    • 使用 –safe-updates 时,SELECT 语句的自动限制,默认值为1,000。

客户端命令

帮助命令

  • 语法
    mysql> help search_string
    

    Note: 如果为 help 命令提供选项,则 mysql 将其用作搜索字符串。

    • 查看帮助类别
      mysql> help contents
      You asked for help about help category: "Contents"
      For more information, type 'help ', where  is one of the following
      categories:
         Account Management
         Administration
         Components
         Compound Statements
         Contents
         Data Definition
         Data Manipulation
         Data Types
         Functions
         Geographic Features
         Help Metadata
         Language Structure
         Plugins
         Storage Engines
         Table Maintenance
         Transactions
         User-Defined Functions
         Utility
      
    • 搜索字符串可以包含通配符 _
      mysql> help REPL%
      Many help items for your request exist.
      To make a more specific request, please type 'help ',
      where  is one of the following
      topics:
         REPLACE
         REPLACE FUNCTION
      
  • help,?
    mysql> help;
    
    For information about MySQL products and services, visit:
       http://www.mysql.com/
    For developer information, including the MySQL Reference Manual, visit:
       http://dev.mysql.com/
    To buy MySQL Enterprise support, training, or other products, visit:
       https://shop.mysql.com/
    
    List of all MySQL commands:
    Note that all text commands must be first on line and end with ';'
    ?         (\?) Synonym for `help'.
    clear     (\c) Clear the current input statement.
    connect   (\r) Reconnect to the server. Optional arguments are db and host.
    delimiter (\d) Set statement delimiter.
    edit      (\e) Edit command with $EDITOR.
    ego       (\G) Send command to mysql server, display result vertically.
    exit      (\q) Exit mysql. Same as quit.
    go        (\g) Send command to mysql server.
    help      (\h) Display this help.
    nopager   (\n) Disable pager, print to stdout.
    notee     (\t) Don't write into outfile.
    pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
    print     (\p) Print current command.
    prompt    (\R) Change your mysql prompt.
    quit      (\q) Quit mysql.
    rehash    (\#) Rebuild completion hash.
    source    (\.) Execute an SQL script file. Takes a file name as an argument.
    status    (\s) Get status information from the server.
    system    (\!) Execute a system shell command.
    tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
    use       (\u) Use another database. Takes database name as argument.
    charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
    warnings  (\W) Show warnings after every statement.
    nowarning (\w) Don't show warnings after every statement.
    resetconnection(\x) Clean session context.
    query_attributes Sets string parameters (name1 value1 name2 value2 ...) for the next query to pick up.
    
    For server side help, type 'help contents'
    
    • 如果使用 –binary-mode 选项调用 mysql,则将禁用所有 mysql 命令,但非交互模式下的 charset 和 delimiter 除外
    • 每个命令都有长/短格式
      • 长格式不区分大小写,短格式区分
      • 长格式可以以分号 ; 作为终止符,短格式不可以。
    • 注释
      • 多行注释 /* … */ 中不能使用短格式
      • 单行版本注释 /! … */ 和优化器注释 /+ … */ 中可以使用短格式

命令列表

  • help [arg], \h [arg], \? [arg], ? [arg]
    • 打印帮助信息
  • charset charset_name, \C charset_name
    • 更改默认字符集,并发出 SET NAMES 语句
  • clear, \c, ctrl+c
    • 清除当前输入
  • connect [db_name [host_name]], \r [db_name [host_name]]
    • 重连,可以指定连接的数据库和主机。此命令优先于 –dns-srv-name
  • delimiter str, \d str
    • SQL 语句之间的分隔符,默认是分号 ;
  • edit, \e
    • 编辑当前输入语句
    • mysql 检查环境变量 EDITOR 和 VISUAL,以确定使用哪个编辑器,如果未设置,则默认使用 vi。
  • ego, \G
    • 垂直显示结果
  • exit, quit, \q, ctrl+d
    • 退出 mysql
  • go, \g
    • 将当前语句发送到服务端执行
  • nopager, \n
    • 禁用输出分页
  • notee, \t
    • 禁止将输出复制到 tee 文件
  • nowarning, \w
    • 禁止在每个语句之后显示警告
  • pager [command], \P [command]
    -- 基础用法
    mysql> pager cat > /tmp/log.txt
    mysql> pager less -n -i -S
    
    -- 较少输出
    mysql> pager less -n -i -S -F -X
    
    -- tee 和分页功能结合使用
    mysql> pager cat | tee /dr1/tmp/res.txt | tee /dr2/tmp/res2.txt | less -n -i -S
    
    • 启用输出分页
  • print, \p
    • 打印当前输入语句而不执行它
  • prompt [str], \R [str]
    • mysql 提示符,如果未指定选项,则重置为默认值 mysql>

    • 选项

    • 设置方法
      • 设置环境变量 MYSQL_PS1
        shell> export MYSQL_PS1="(\u@\h) [\d]> "
        
      • 使用命令行选项 –prompt
        shell> mysql --prompt="(\u@\h) [\d]> "
        (user@host) [database]>
        
      • 使用配置文件
        [mysql]
        prompt=(\\u@\\h) [\\d]>\\_
        

        Note: 配置文件中反斜杠 \ 要转义。

      • 交互模式设置

        mysql> prompt (\u@\h) [\d]>\_
        PROMPT set to '(\u@\h) [\d]>\_'
        (user@host) [database]>
        (user@host) [database]> prompt
        Returning to default PROMPT of mysql>
        mysql>
        
  • query_attributes name value [name value …]
    • 定义适用于发送到服务端的下一个查询的查询属性
  • rehash, #
    • 自动补全
  • resetconnection, \x
    • 重置连接以清除会话状态。这包括清除使用 query_attributes 命令定义的任何当前查询属性。
  • source file_name, . file_name
    • 读取文件并执行其中包含的语句

    • 语法

      shell> mysql db_name  source file_name
      mysql> \. file_name
      
    • 显示脚本进度信息
      SELECT '' AS ' ';
      
  • status, \s
    • 状态信息
  • system command, ! command
    • 执行系统命令
  • tee [file_name], \T [file_name]
    mysql> tee /tmp/2.txt;
    Logging to file '/tmp/2.txt'
    mysql> select 1;
    +---+
    | 1 |
    +---+
    | 1 |
    +---+
    1 row in set (0.00 sec)
    
    • 将输出信息添加到指定文件中,仅适用于交互模式。使用 notee 禁用此功能。
  • use db_name, \u db_name
    • 切换数据库
  • warnings, \W
    • 启用每个语句后的警告显示 (如果有的话)

建议

  • 输入行编辑

    依赖 libedit 和 readline 库。这两个库可以实现一些快捷键和自动补全的功能。

    • libedit 库
      • 快捷键
        • ctrl+W:删除当前光标之前的所有内容
        • ctrl+U:删除整行
      • 配置文件:~/.editrc
        [root@yingzai ~]$ vim ~/.editrc 
        bind "^W" ed-delete-prev-word
        bind "^U" vi-kill-line-prev
        

        Note: Linux 系统使用 readline 库,个人建议使 MySQL 和系统保持一致,可以提高编辑的效率。

    • readline 库

      Readline Library

      • 快捷键
        • ctrl+W:删除当前光标之前的单词
        • ctrl+U:删除当前光标之前的所有内容
      • 配置文件:~/.inputrc

  • 禁止交互活动的历史记录 (上下箭头翻阅历史记录)

    • 删除 ~/.mysql_history 文件

    • 以 –histignore 启动服务

      如果省略这步,可以调用当前会话的历史记录。

  • 垂直显示查询结果

  • 使用安全更新模式 (–safe-updates)

    [mysql]
    # 安全更新模式
    safe_updates            =  true
    
    • 如果未在 WHERE 子句中指定键约束或未提供 LIMIT 子句,或两者都未启用,则启用 sql_safe_updates 会导致 UPDATE 和 DELETE 语句产生错误
      UPDATE tbl_name SET not_key_column=val WHERE key_column=val;
      UPDATE tbl_name SET not_key_column=val LIMIT 1;
      

      验证

      mysql> select * from t1;  -- 原表
      +------+
      | id   |
      +------+
      |    1 |
      |    2 |
      |    3 |
      +------+
      
      mysql> update t1 set id = 4;  -- 未加 where 或 limit 子句
      ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. 
      mysql> update t1 set id = 4 limit 1;  -- 使用 limit 子句
      Query OK, 1 row affected (0.00 sec)
      Rows matched: 1  Changed: 1  Warnings: 0
      
      mysql> select * from t1;  -- 更新后的表
      +------+
      | id   |
      +------+
      |    4 |
      |    2 |
      |    3 |
      +------+
      3 rows in set (0.00 sec)
      
    • 这个选项会在连接到服务器端时设置3个系统变量的值。如果要覆盖默认值,需要在调用 mysql 时指定相应的选项。
      SET sql_safe_updates=1, sql_select_limit=1000, max_join_size=1000000;
      

      Note: sql_select_limit=1000,将所有 SELECT 结果集限制为1,000行,除非该语句包含 LIMIT 子句。

    • 如果优化程序决定不使用键列上的索引,则即使使用 WHERE 子句中指定的键,UPDATE 和 DELETE 语句也可能在安全更新模式下产生错误

      • 如果内存使用量超出了 range_optimizer_max_mem_size 系统变量所允许的范围,则无法使用索引上的范围访问。
      • 如果键比较需要类型转换,则可能不使用索引
  • 禁用 mysql 自动重新连接
    • 即使 mysql 成功重新连接,第一个连接也已结束,并且之前的所有会话对象和设置都将丢失 (临时表、自动提交模式以及用户定义的会话变量) 。同样,任何当前事务都会回滚。
  • MySQL 客户端解析器与服务器端解析器
    • mysql 在客户端使用解析器,该解析器与服务器端 mysqld 使用的完整解析器不重复。这可能导致某些构造物的处理差异。

客户端工具

对于客户端工具,网上有很多,但是功能差异不大,更多还是 UI 界面的不同,只要熟悉了一个,其他的上手都不难。

Navicat

官网地址:http://www.navicat.com.cn/

phpMyAdmin

官网地址:https://www.phpmyadmin.net/

DBeaver

官网地址:https://dbeaver.io/

SQLyog

官网地址:https://sqlyog.en.softonic.com/

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注