mysql 不打印选择输出到终端

mysql 不打印选择输出到终端

快速提问:我创建了一些命令来预热我的数据库。问题是这些选择很大。当我执行这样的选择时,我会将所有“jiba-jaba”都输入到我的终端窗口中。如何让 mysql '安静地'执行选择?而不是花很长时间将所有垃圾打印到我的终端中?

答案1

您可以使用 shell 的 i/o 重定向运算符重定向任何命令(不仅仅是 MySQL)的输出。例如,在 bash 中:

$ mysql mydb < commands.sql > /dev/null 2>&1

这将启动 MySQL 命令行客户端,将其连接到本地系统上的“mydb”(假设您有权访问),从文件中读取 SQL 命令commands.sql并将所有输出转储到/dev/null

如果您希望保存输出以供事后审查,则可以将其重定向到文件而不是/dev/null

$ mysql mydb < commands.sql > output.txt 2>&1

重定向以及2>&1。如果你想在终端上看到任何错误,你只需要重定向:stderrstdoutstdout

$ mysql mydb < commands.sql > /dev/null

答案2

  1. mysql 客户端:

    mysql> pager > /dev/null
    PAGER set to '> /dev/null'
    mysql> select 1;
    1 row in set (0.00 sec)
    
    mysql> \q
    Bye
    

    这样,查询的结果就不会被打印,而只打印行数和时间信息。

  2. shell 中的 IO 重定向

    user@host$ mysql -e 'select 1' > /dev/null
    user@host$
    

答案3

如果目的是预热缓存,您还可以执行以下操作:

从 mytable 中选择 max(concat(col1,col2)),其中...

引擎被迫读取真实页面来计算最大值(相对于 I/O 来说开销很小)

请注意,如果您仅从索引中选择列,则只有索引为红色,无需转到表本身(“覆盖索引”)。
在某些情况下,您可能正是想要这样(仅将索引加载到缓存中)

答案4

这在 Unix 安装的 mysql 上有效。由于 Windows 在 mysql 安装中既没有 /dev/null 也没有 pager 命令,因此它无法在安装在 Windows 上的 mysql 上工作。

在 Windows Mysql 上(在 Unix 上也是如此),您可以使用 SELECT 1 INTO OUTFILE 'file_name' 或设置变量并使用 SELECT 1 INTO @var; 查看此处的文档:http://dev.mysql.com/doc/refman/5.0/en/select.html

请记住,您无法覆盖输出文件,因此 INTO Outfile 不适用于重复选择。

相关内容