URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 95723
[ Назад ]

Исходное сообщение
"Выполнение пакета sql-команд в sh-скриптах"

Отправлено Raul , 08-Авг-14 10:18 
Всем привет.
Я очень начинающий в linux'е, поэтому извиняюсь, если буду выражаться коряво.

Дано:
Нужно сделать скрипт, который подключается к БД, делает оттуда селект, результат селекта кладёт в файл, отключается от БД.

Моё решение - создаю скрипт, в который пишу следующее:
mysql -uUserName -pPassword
use DatabaseName
select a1,a2 from TableName name into outfile /Dir/File;
exit

В итоге при выполнении скрипта получаю строку
mysql>
т.е. отрабатывает только первая строчка скрипта, а дальше ожидается интерактив от меня.
Очевидно, что нужно, чтобы блок, находящийся между входом и выходом из БД выполнялся как команды в БД, а не как строчки скрипта, применимые к ОС.
Подскажите пожалуйста, в какую сторону копать(хотя бы как это в поисковике назвать).


Содержание

Сообщения в этом обсуждении
"Выполнение пакета sql-команд в sh-скриптах"
Отправлено fx , 08-Авг-14 10:37 
> Подскажите пожалуйста, в какую сторону копать

man mysql


"Выполнение пакета sql-команд в sh-скриптах"
Отправлено Raul , 08-Авг-14 11:39 
Спасибо большое, Вы мне очень помогли.

P.S. Для тех, кто задастся подобным вопросом решение:
Создаётся скрипт типа
rm -f /tmp/1
mysql -uUserName -pPassword < /dir/BatchFile (скармливаем содержимое файла mysql'ю)

Содержание BatchFile
use DataBaseName;
select ....;
exit;

Сжато, но ёмко можно прочитать вот здесь http://dev.mysql.com/doc/refman/5.5/en/batch-mode.html


"Выполнение пакета sql-команд в sh-скриптах"
Отправлено Maxim , 08-Авг-14 11:07 
Я бы сделал средствами mysql:
SELECT * FROM name_table
INTO OUTFILE '/tmp/name_file.csv' FIELDS TERMINATED BY ';' ;

или так:
% mysql -e "SELECT account, shell FROM passwd" -N cookbook > shells.txt


"Выполнение пакета sql-команд в sh-скриптах"
Отправлено zd3n , 08-Авг-14 11:14 
>[оверквотинг удален]
> use DatabaseName
> select a1,a2 from TableName name into outfile /Dir/File;
> exit
> В итоге при выполнении скрипта получаю строку
> mysql>
> т.е. отрабатывает только первая строчка скрипта, а дальше ожидается интерактив от меня.
> Очевидно, что нужно, чтобы блок, находящийся между входом и выходом из БД
> выполнялся как команды в БД, а не как строчки скрипта, применимые
> к ОС.
> Подскажите пожалуйста, в какую сторону копать(хотя бы как это в поисковике назвать).

А если так

mysql -uUserName -pPassword
use DatabaseName
select a1,a2 from TableName name into outfile /Dir/File;
go
exit


"Выполнение пакета sql-команд в sh-скриптах"
Отправлено Maxim , 08-Авг-14 11:31 
#!/bin/bash
mysql -uUserName -pPassword -e "select a1,a2 from TableName name ;" -N DatabaseName > /Dir/File
exit

"Выполнение пакета sql-команд в sh-скриптах"
Отправлено Raul , 08-Авг-14 11:41 
> #!/bin/bash
> mysql -uUserName -pPassword -e "select a1,a2 from TableName name ;" -N DatabaseName
> > /Dir/File
> exit

Всем большое спасибо, Вы меня прямо спасли:)


"Выполнение пакета sql-команд в sh-скриптах"
Отправлено ShyLion , 13-Авг-14 07:39 
> Всем привет.
> Я очень начинающий в linux'е, поэтому извиняюсь, если буду выражаться коряво.
> Дано:
> Нужно сделать скрипт, который подключается к БД, делает оттуда селект, результат селекта
> кладёт в файл, отключается от БД.
> Моё решение - создаю скрипт, в который пишу следующее:
> mysql -uUserName -pPassword
> use DatabaseName
> select a1,a2 from TableName name into outfile /Dir/File;
> exit

man sh

mysql -uUserName -pPassword << EOS
use DatabaseName
select a1,a2 from TableName name into outfile /Dir/File;
EOS

вообще указывать пароль в командной строке несекьюрно, его видно через список процессов.


"Выполнение пакета sql-команд в sh-скриптах"
Отправлено Raul , 13-Авг-14 11:14 
> вообще указывать пароль в командной строке несекьюрно, его видно через список процессов.

Да, согласен, но это БД чисто для внутреннего вспомогательного пользования, т.е. в принципе там можно работать вообще без пароля:)