Лучший способ, чтобы выполнить несколько команд MySQL с помощью скрипта
Я хотел бы написать *.sh скрипт для выполнения нескольких команд MySQL.
В настоящее время я могу сделать что-то вроде следующего
mysql -h$host -u$user -p$password -e "drop database $dbname;"
mysql -h$host -u$user -p$password -e "create database $dbname;"
mysql -h$host -u$user -p$password -e "another MySQL command"
...
есть ли способ избежать ввода "mysql-h$host-u$user-p$password-e" каждый раз, когда я хочу выполнить команду MySQL?
4 ответов
Я думаю, что вы можете выполнять операторы MySQL из текстового файла, например
вот cmds.txt-файл, содержащий команды MySQL:
select colA from TableA;
select colB from TableB;
select colC from TableC;
чтобы выполнить их с помощью сценария оболочки, введите
mysql -h$host -u$user -p$password db_dbname < cmds.txt
таким образом, вы отделяете свои команды MySQL от своего сценария оболочки.
вы можете захотеть, чтобы ваш скрипт отображал вам информацию о ходе работы. Для этого вы можете вызвать mysql с опцией" --verbose".
для получения дополнительной информации см. https://dev.mysql.com/doc/refman/5.6/en/mysql-batch-commands.html
обратите внимание, что вы также можете использовать здесь doc для запросов в том же скрипте:
mysql -h$host -u$user -p$password db_dbname <<'EOF'
select colA from TableA;
select colB from TableB;
select colC from TableC;
EOF
обратите внимание, что я использовал 'EOF'
, а не EOF
в первой строке, чтобы предотвратить содержимое скрипта для отключения подстановки параметров (особенно `
может быть проблематично)
Также обратите внимание, что там стоит не будет никаких пробелов до финала EOF
(за исключением, если вы используете <<-
, а не <<
-- в этом случае ведущим символы табуляции удаляются):
mysql -h$host -u$user -p$password db_dbname <<- 'EOF'
↠select colA from TableA;
↠select colB from TableB;
↠select colC from TableC;
↠EOF
(заменить ↠
символ табуляции).
для получения дополнительной информации о синтаксисе here doc см. документация bash.
Вы можете использовать один multiquery:
mysql -h$host -u$user -p$password -e "drop database $dbname;create database $dbname;another MySQL command;"
просто напишите все ваши запросы разделяется ;
. Они будут бегать один за другим.
есть несколько способов, в Linux у вас есть:
из MySQL cli:
mysql> source mycmds.sql
С Использованием Труб:
echo "SELECT ..; INSERT ..;" | mysql ...
выполнение команд из файла с помощью труб или переадресации:
cat file.sql | mysql ... OR mysql .. < file.sql