快速提问:我创建了一些命令来预热我的数据库。问题是这些选择很大。当我执行这样的选择时,我会将所有“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
。如果你想在终端上看到任何错误,你只需要重定向:stderr
stdout
stdout
$ mysql mydb < commands.sql > /dev/null
答案2
mysql 客户端:
mysql> pager > /dev/null PAGER set to '> /dev/null' mysql> select 1; 1 row in set (0.00 sec) mysql> \q Bye
这样,查询的结果就不会被打印,而只打印行数和时间信息。
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 不适用于重复选择。