MySQL命令行客户端(二)mysql客户端记录、帮助、从文本文件执行SQL语句 - Go语言中文社区

MySQL命令行客户端(二)mysql客户端记录、帮助、从文本文件执行SQL语句


适用mysql5.7。

1. mysql客户端记录

    MySQL的客户端可以做这些类型的日志记录,用于交互式执行的语句:

  • 在Unix上,mysql将语句写入历史文件。默认情况下,此文件在您的家目录中命名为 .mysql_history。要指定其他文件,请设置MYSQL_HISTFILE环境变量的值 。
  • 在所有平台上,如果给出了 --syslog 选项,mysql会将语句写入系统日志记录工具。在Unix上,这是 syslog;在Windows上,它是Windows事件日志。记录的消息出现的目的地取决于系统。在Linux上,目标通常是 /var/log/messages文件。

    以下讨论描述了适用于所有日志记录类型的特征,并提供了每种日志记录类型所特有的信息。

1.1 记录如何发生

    对于每个启用的日志记录目标,语句日志记录如下发生:

  • 只有交互执行时才会记录语句。语句是非交互的,例如,从文件或管道读取时。还可以使用 --batch 或 --execute 选项来禁止语句日志记录。
  • 如果语句与“ignore”列表中的任何模式匹配,则它们将被忽略且不被记录。
  • mysql分别记录每个非忽略的、非空的语句行。
  • 如果一个不可忽略的语句跨越多行(不包括终止定界符),则mysql将这些行连接起来以形成完整的语句,将换行符映射到空格,并记录结果以及定界符。
    因此,跨多行的输入语句可以记录两次。考虑以下输入:
mysql> SELECT
    -> 'Today is'
    -> ,
    -> CURDATE()
    -> ;

    在这种情况下,mysql将记录 “SELECT”,“‘Today is’”,“,”,“CURDATE()”,和 “;”行读取它们。在将 SELECTn’Today is’n,nCURDATE() 映射到 SELECT ‘Today is’ ,CURDATE() 后,它还记录完整的语句。因此,这些行出现在记录的输出中:

SELECT
'Today is'
,
CURDATE()
;
SELECT 'Today is' , CURDATE();

    出于记录目的, mysql忽略与“ ignore ”列表中的任何模式匹配的语句。默认情况下,模式列表为 “IDENTIFIED:PASSWORD”,以忽略引用密码的语句。模式匹配不区分大小写。在模式中,两个字符是特殊的:

  • ? 匹配任何单个字符。
  • * 匹配零个或多个字符的任何序列。

    要指定其他模式,请使用 --histignore 选项或设置 MYSQL_HISTIGNORE环境变量。(如果同时指定了两者,则选项值优先。)该值应该是一个或多个以冒号分隔的模式的列表,并附加到默认模式列表中。
    命令行上指定的模式可能需要加引号或转义,以防止命令解释器对其进行特殊处理。例如, 除了引用密码的语句之外,要禁止记录 UPDATE和DELETE语句,请像下面这样调用mysql:

shell> mysql --histignore="*UPDATE*:*DELETE*"
1.2 控制历史记录文件

    .mysql_history文件应该以限制性的接入方式进行保护,因为敏感信息可能会被写入到它,如包含密码的SQL语句。
    如果您不想维护历史记录文件,请先删除 .mysql_history(如果存在)。然后,使用以下两种技术之一阻止其再次创建:

  • 将MYSQL_HISTFILE环境变量设置为/dev/null。要使此设置在您每次登录时生效,请将其放在shell程序的启动文件之一中(比如/etc/profile)。
  • 创建/dev/null的符号链接.mysql_history。只需执行一次:
shell> ln -s /dev/null $HOME/.mysql_history
1.3 syslog日志记录特征

    如果给出了 --syslog 选项,则mysql将交互式语句写入系统日志记录工具。消息日志记录具有以下特征。
    日志记录发生在“信息”级别。这对应于Unix/Linux系统日志功能上syslog的LOG_INFO优先级和Windows事件日志的EVENTLOG_INFORMATION_TYPE。
    消息大小限制为1024个字节。
    消息由标识符MysqlClient和这些值组成:

  • SYSTEM_USER
    操作系统用户名(登录名)或 -‌- (用户未知的情况下)
  • MYSQL_USER
    MySQL用户名(由–user选项指定 )或 -‌- (用户未知的情况下)
  • CONNECTION_ID
    客户端连接标识符。这与会话中CONNECTION_ID()的函数值相同。
  • DB_SERVER
    服务器主机,或者 -‌- (主机未知情况下)
  • DB
    默认数据库,或者 -‌- (如果未选择数据库)
  • QUERY
    记录的语句的文本。

    这是在Linux上使用 --syslog 生成的输出示例。格式化此输出以提高可读性;每条记录的消息实际上只占一行。

Feb  6 20:06:12 blog MysqlClient: SYSTEM_USER:'root', MYSQL_USER:'root', CONNECTION_ID:6, DB_SERVER:'--', DB:'--', QUERY:'show databases;'

2. mysql客户端服务器端帮助

mysql> help search_string

    如果为help 命令提供参数,则mysql将其用作搜索字符串,以从《 MySQL参考手册》的内容访问服务器端帮助。该命令的正确操作要求mysql使用帮助主题信息来初始化数据库中的帮助表。
    如果搜索字符串不匹配,则搜索失败:

mysql> help me

Nothing found
Please try to run 'help contents' for a list of all accessible topics

    使用help contents查看帮助类别的列表:

mysql> help contents
You asked for help about help category: "Contents"
For more information, type 'help <item>', where <item> is one of the
following categories:
   Account Management
   Administration
   Data Definition
   Data Manipulation
   Data Types
   Functions
   Functions and Modifiers for Use with GROUP BY
   Geographic Features
   Language Structure
   Plugins
   Storage Engines
   Stored Routines
   Table Maintenance
   Transactions
   Triggers

    如果搜索字符串匹配多个项目,则 mysql显示匹配主题的列表:

mysql> help logs
Many help items for your request exist.
To make a more specific request, please type 'help <item>',
where <item> is one of the following topics:
   SHOW
   SHOW BINARY LOGS
   SHOW ENGINE
   SHOW LOGS

    使用主题作为搜索字符串,以查看该主题的帮助条目:

mysql> help show binary logs
Name: 'SHOW BINARY LOGS'
Description:
Syntax:
SHOW BINARY LOGS
SHOW MASTER LOGS

Lists the binary log files on the server. This statement is used as
part of the procedure described in [HELP PURGE BINARY LOGS], that shows
how to determine which logs can be purged.

mysql> SHOW BINARY LOGS;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000015 |    724935 |
| binlog.000016 |    733481 |
+---------------+-----------+

    搜索字符串可以包含通配符%和u。它们与使用LIKE运算符执行的模式匹配操作具有相同的含义。例如,HELP rep% 返回以rep开头的主题列表:

mysql> HELP rep%
Many help items for your request exist.
To make a more specific request, please type 'help <item>',
where <item> is one of the following
topics:
   REPAIR TABLE
   REPEAT FUNCTION
   REPEAT LOOP
   REPLACE
   REPLACE FUNCTION

3. 从文本文件执行SQL语句

    在MySQL的客户端通常交互使用,如下所示:

shell> mysql db_name

    但是,也可以将SQL语句放入文件中,然后告诉mysql从该文件中读取其输入。为此,创建一个包含您要执行的语句的文本文件text_file 。然后调用 mysql,如下所示:

shell> mysql db_name < text_file

    如果将 USE db_name 语句作为文件中的第一条语句放置,则无需在命令行上指定数据库名称:

shell> mysql < text_file

    如果您已经在运行mysql,则可以使用source 或 . 命令执行SQL脚本文件:

mysql> source file_name
mysql> . file_name

    有时,您可能希望您的脚本向用户显示进度信息。为此,您可以插入如下语句:

SELECT '<info_to_display>' AS ' ';

    该语句显示输出 <info_to_display>。
    您也可以使用 --verbose 选项调用mysql,该选项使每个语句在产生结果之前显示。
    mysql在输入文件的开头忽略Unicode字节顺序标记(BOM)字符。以前,它会读取它们并将其发送到服务器,从而导致语法错误。BOM的存在不会导致 mysql更改其默认字符集。为此,请使用诸如 --default-character-set=utf8 的选项调用mysql。

在这里插入图片描述

参考文档

https://dev.mysql.com/doc/refman/5.7/en/mysql-batch-commands.html

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zsx0728/article/details/104191659
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢