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

7 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';"
      1. Thanks.. And what this option means «-B -e»? You can reply russian language

  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.

  3. Nice Article to Read and Reply.

  4. Hi
    Can we use bash variables for username, dbname. Like
    dbuser=us
    dbname=mydb
    And use them in mysql command like
    Mysql -u$dbuser.
    If so it can be used please provide an example

  5. If the query is using backsticks then EOF at the beginning of query should be ‘EOF’

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.