Быстрый вопрос: я создал команды, которые разогреют мою БД. Дело в том, что выборки большие. Когда я делаю такой выбор, я получаю все «jiba-jaba» в окне терминала. Как сделать так, чтобы mysql выполнял выбор «тихо»? не тратя много времени, чтобы печатать всю эту чушь в моем терминале?
mysql-клиент:
mysql> pager > /dev/null
PAGER set to '> /dev/null'
mysql> select 1;
1 row in set (0.00 sec)
mysql> \q
Bye
Таким образом, результат запросов не печатается, а только информация о времени подсчета строк.
Перенаправление ввода-вывода в оболочке
user@host$ mysql -e 'select 1' > /dev/null
user@host$
Вы можете перенаправить вывод любой команды - не только 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
Если цель - разогреть кеш, вы также можете сделать что-то вроде:
выберите max (concat (col1, col2)) из mytable, где ...
Движок вынужден читать реальные страницы для вычисления максимума (в любом случае с небольшими накладными расходами по сравнению с вводом-выводом)
Обратите внимание, что если вы выбираете только столбцы из индекса, только индекс красный, нет необходимости переходить к самой таблице («индекс обложки»).
В некоторых случаях вам может понадобиться именно это (загрузить в кеш только индекс)
Это работает с установками MySQL в Unix. Поскольку Windows не имеет ни / dev / null, ни команды пейджера в установке mysql, она не будет работать с mysql, установленным в Windows.
В 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 не будет работать для повторяющихся выборок.