MySQL: Выполнить Запрос из Bash-скрипта или Командной Строки в Linux

Иногда возникает необходимость выполнить MySQL запрос из командной строки в Linux, без непосредственного подключения к интерактивной консоли MySQL.

Например, когда нужно настроить бэкап баз данных MySQL по расписанию или автоматизировать выполнение SQL-запросов с помощью Bash-скрипта.

В данной статье я приведу самые полезные, с моей точки зрения, опции MySQL-клиента для командной строки и покажу как выполнять множество SQL-запросов к базе из Bash-скрипта.

Дельный Совет: Узнайте, как легко получить список пользователей MySQL, посмотреть их пароли и привилегии из командной строки! Читать далее →

MySQL: Запросы Из Командной Строки В Linux

Выполнить SQL-запрос из командной строки:

$ mysql -u ПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -e "SQL_ЗАПРОС"

-pПАРОЛЬ: Это не опечатка! Между -p и паролем не должно быть пробела, если вы хотите задать его из командной строки!

Выполнить SQL-запрос к явно указанной базе данных:

$ mysql -u ПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -D БАЗА_ДАННЫХ -e "SQL_ЗАПРОС"

Выполнить SQL-запрос на явно указанном хосте:

$ mysql -u ПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -h ИМЯ_ХОСТА -e "SQL_ЗАПРОС"

Не выводить заголовки (названия) столбцов:

$ mysql -u ПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -N -e "SQL_ЗАПРОС"

Убрать декоративное обрамление:

$ mysql -u ПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -B -e "SQL_ЗАПРОС"

Сохранить вывод в файл:

$ mysql -u ПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ -e "SQL_ЗАПРОС" > ФАЙЛ

Дельный Совет: Создайте базу данных в MySQL и дайте пользователю все права на нее — GRANT ALL PRIVILEGES! Простое и понятное руководство по MySQL с хорошими примерами! Читать далее →

Самые полезные опции MySQL-клиента при выполнении SQL-запросов из Bash-скрипта или командной строки в Linux:

Опция Описание
--user, -u Имя пользователя под которым осуществляется подключение к MySQL-серверу.
--password, -p Какой использовать пароль при подключении к серверу.
--database, -D Какую базу данных использовать.
--host, -h К какому MySQL-серверу подключаться.
--skip-column-names, -N Убрать названия колонок из вывода.
--batch, -B Вывести результат используя табуляцию в качестве разделителя колонок и печатать каждое поле с новой строки.

MySQL: Запросы Из Bash-скрипта

Чтобы выполнить несколько SQL-запросов или один длинный запрос разбитый на несколько строк я использую конструкцию <<EOF...EOF.

Часть <<EOF сообщает оболочке, что я передаю SQL-запрос состоящий из нескольких строк, вплоть до закрывающего тега EOF.

Обратите внимание, что перед закрывающим тегом EOF не должно быть пробелов, иначе он будет воспринят как часть SQL-запроса.

Кстати, вы можете переименовать EOF на что угодно если хотите, например на <<MY_QUERY...MY_QUERY.

Дельный Совет: У вас есть бэкап? Он ОБЯЗАН у вас быть! Бэкапте базы данных MySQL из командной строки! Это действительно просто! Читать далее →

Используйте следующую конструкцию, чтобы выполнить несколько SQL-запросов из Bash-скрипта:

mysql -u ПОЛЬЗОВАТЕЛЬ -pПАРОЛЬ <<EOF
SQL_ЗАПРОС_1
SQL_ЗАПРОС_2
SQL_ЗАПРОС_N
EOF

Пример Bash-скрипта:

#!/bin/bash
mysql -u root -psecret <<MY_QUERY
USE mysql
SHOW tables
MY_QUERY

3 Replies to “MySQL: Выполнить Запрос из Bash-скрипта или Командной Строки в Linux”

  1. Hi I am running a query using -e. I am trying to run multiple queries like this

    mysql -h localhost -usupport -pabc123 -B -e ‘use test; select * from price.sku where dispsku=’test01′ ;’
    This throws me an error that unknown column in test01 in where clause

    However i can run
    mysql -h localhost -usupport -pabc123 -B -e ‘show databases; show databases;’
    and I get two outputs of both ‘show databases ;» statement.

    I have sucessfully executed my first query through bash but I am not able to run with -e as of now.

    1. Hello. You should use double quotes:

      mysql -h localhost -usupport -pabc123 -B -e "use test; select * from price.sku where dispsku='test01';"
  2. Hello
    Is that popssible to pass parameters to a SQL file called in script bash ?
    Like ; «mysql -h localhost -usupport -pabc123 -B -e SqlDir/sqlFile.sql $param1 ?
    Inside sqlFile i would have :
    «select * from orders where ordernumber=$param1»
    t.

Добавить комментарий