- MySQL: Run Query from Bash Script or Linux Command Line
- MySQL: Execute SQL Queries From The Linux Shell
- MySQL: Run SQL Queries From A Bash Script
- Как выполнить запрос MySQL из командной строки Linux
- Как выполнить запрос MySQL из командной строки
- Заключение
- Похожие записи:
- Работаем с MySQL через командную строку
- Что делать если вижу знаки вопросов вместо текста в MySQL?
- Как сделать бэкап базы mysql через консоль Linux?
- Заключение
- Комментарии 2
MySQL: Run Query from Bash Script or Linux Command Line
Sometimes it is needed to run some MySQL queries from the Linux command-line interface without accessing the interactive MySQL prompt.
For example, when it is required to schedule a backup of MySQL database or to automate execution of some SQL queries with a Bash script.
In this article i will show the most useful, from my point of view, options of the MySQL command-line client and show how to run multiple SQL queries to a database from a Bash script.
Cool Tip: List MySQL users, their passwords and granted privileges from the command-line prompt! Read more →
MySQL: Execute SQL Queries From The Linux Shell
Execute SQL query from the Linux command-line:
$ mysql -u USER -pPASSWORD -e "SQL_QUERY"
-pPASSWORD: This is not a typo! There should not be a space between your password and the -p when you pass it on the command-line!
Run SQL query on the explicitly specified database:
$ mysql -u USER -pPASSWORD -D DATABASE -e "SQL_QUERY"
Run SQL query on the explicitly specified host:
$ mysql -u USER -pPASSWORD -h HOSTNAME -e "SQL_QUERY"
Suppressing column headings:
$ mysql -u USER -pPASSWORD -N -e "SQL_QUERY"
$ mysql -u USER -pPASSWORD -B -e "SQL_QUERY"
Save the output to a file:
$ mysql -u USER -pPASSWORD -e "SQL_QUERY" > FILE
Cool Tip: Create a MySQL database and GRANT ALL PRIVILEGES on it to a user! Simple and clear MySQL tutorial with good examples! Read more →
The most useful MySQL options when executing SQL queries from the Linux command-line or a Bash script:
Option | Description |
---|---|
—user , -u | The MySQL user name to use when connecting to the server. |
—password , -p | The password to use when connecting to the server. |
—database , -D | The database to use. |
—host , -h | Connect to the MySQL server on the given host. |
—skip-column-names , -N | Do not write column names in results. |
—batch , -B | Print results using tab as the column separator, with each row on a new line. |
MySQL: Run SQL Queries From A Bash Script
Note that here shouldn’t be any spaces just before the second EOF tag, otherwise it will be considered as a part of the SQL query.
By the way, you can rename the EOF to anything you want, e.g.
Cool Tip: Do you have a backup? You MUST have it! Backup MySQL databases from the command-line! This is really easy! Read more →
Use the following construction if you need to run multiple SQL queries from a Bash script:
mysql -u USER -pPASSWORD SQL_QUERY 1 SQL_QUERY 2 SQL_QUERY N EOF
#!/bin/bash mysql -u root -psecretКак выполнить запрос MySQL из командной строки Linux
MySQL - это популярная база данных, используемая многими веб-сайтами и организациями по всему миру. Обычно для подключения к базе данных MySQL и выполнения SQL-запросов люди заходят в консоль MySQL или в GUI-инструмент типа Workbench. Но иногда вам может понадобиться выполнить запросы MySQL непосредственно из командной строки или терминала. Иногда вам даже может понадобиться добавить его в сценарий оболочки. В этой статье мы узнаем, как запустить запрос MySQL из командной строки.
Как выполнить запрос MySQL из командной строки
Вы можете легко выполнить запрос MySQL из командной строки, используя команду MySQL вместе с опцией -e.
mysql -h [хост] -u [имя пользователя] -p [пароль] [база данных] -e [SQL_запрос]
В приведенной выше команде необходимо указать имя пользователя, пароль, имя базы данных для соединения с базой данных MySQL. После опции -e необходимо указать SQL-запрос, который будет выполняться.
Вот простой пример выполнения SQL-запроса при подключении к локальной базе данных.
mysql -utest_user -ptest_password -hlocalhost db -e "SELECT * FROM table;".
Вы также можете опустить аргумент имени базы данных 'db', если вы ссылаетесь на нее в SQL-запросе.
mysql -utest_user -ptest_password -hlocalhost -e "SELECT * FROM db.table;"
Добавление точки с запятой в конце SQL-запроса необязательно. Но если вы хотите выполнить несколько SQL-запросов, вам необходимо разделить их с помощью точки с запятой, как показано в следующем примере.
mysql -utest_user -ptest_password -hlocalhost -e "SELECT * FROM db.table; SELECT * from db.table2;"
Вы также можете выполнять отдельные команды MySQL с опцией -e, если хотите.
mysql -utest_user -ptest_password -hlocalhost -e "SELECT * FROM db.table;" mysql -utest_user -ptest_password -hlocalhost -e "SELECT * FROM db.table2;"
Вы также можете хранить свои SQL-запросы в файле и указать MySQL прочитать этот файл. Допустим, у вас есть файл queries.txt
SELECT * FROM db.table; SELECT * FROM db.table2;
Теперь, если вы хотите выполнить запросы в файле queries.txt, вы можете сделать это с помощью следующей команды. В этом случае MySQL будет читать входные данные из файла queries.txt.
mysql -utest_user -ptest_password -hlocalhost < queries.txt
Ключевым моментом, на который следует обратить внимание, является то, что вы должны указать ваш SQL-запрос в двойных кавычках. Если приведенный выше синтаксис команды вам не подходит, попробуйте заключить SQL-запрос в одинарные кавычки.
Также, если ваш SQL-запрос сам содержит двойные кавычки, то их нужно убрать, добавив перед ними обратную косую черту.
Результат вышеприведенного запроса будет выведен на консоль. Если вы хотите сохранить этот результат в другом файле, вам нужно будет использовать операторы перенаправления. Вот пример сохранения результата запроса MySQL в файл test.txt.
mysql -utest_user -ptest_password -hlocalhost -e "SELECT * FROM db.table;" > /home/user/test.txt
Одним из преимуществ выполнения запросов MySQL в командной строке является то, что вы можете передавать вывод другим командам Linux в соответствии с вашими требованиями. Вот простой пример, в котором мы передаем вывод запроса MySQL команде grep.
$ mysql -utest_user -ptest_password -hlocalhost -e "SELECT * FROM db.table;" | grep 'abc'
Заключение
В этой статье мы узнали, как выполнять запросы MySQL из командной строки, сохранять их вывод в файлы и даже передавать их другим командам Linux для дальнейшей обработки. Вы можете эффективно использовать их в сценарии оболочки для автоматического получения данных, их обработки и принятия мер в зависимости от полученной информации.
Похожие записи:
Работаем с MySQL через командную строку
Если на экране появляется приветствие mysql, то всё прошло ok.
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 344 Server version: 5.5.28-0ubuntu0.12.04.3 (Ubuntu) Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>Для выхода из командной строки mysql можно написать exit, в linux достаточно нажать ctrl+C. Теперь можно писать любые mysql-запросы. Чтобы запрос выполнился, в конце обязательно нужно поставит точку с запятой ";". При написании длинных запросов удобно делать enter`ом переход на следующую строку. А после полного написание запроса поставить ";" и нажать "enter".
Для работы с конкретной базой данных нужно её выбрать с помощью оператора use. Показать все базы данных:
Результатом будет что то вроде этого:
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | jeka | | linky | | mysql | | performance_schema | | phpmyadmin | | test | +--------------------+ 7 rows in set (0.00 sec)mysql> use jeka Database changedПосмотреть названия всех таблиц в конкретной базе данных (после выполнения use):
Просмотреть структуру таблицы (имена и тип полей):
mysql> describe post_estimations; +------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------------+------+-----+---------+-------+ | post_id | int(10) unsigned | YES | MUL | NULL | | | user_id | int(10) unsigned | YES | MUL | NULL | | | estimation | float(2,1) unsigned | NO | | NULL | | | date | int(10) unsigned | NO | | NULL | | +------------+---------------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)Достать информацию о юзере с >
mysql> SELECT * FROM users WHERE > Бэкап структуры таблицы, а точнее sql-запрос на её созданиеshow create table table_name;Если в конце запроса поставить не ; а \G, то результат будет показан другим образом - иногда весьма удобно, если таблица имеет много полей:
select * from update__v4_errors where >Посмотреть, какие запросы выполняются в данный момент на сервере MySQL:
Учтите, что будут отображены еще не выполненные (активные) запросы, поэтому show processlist; актуальная команды только для нагруженных БД, в других случаях маловероятно, что команда что то покажет.
Подробнее о том, как изменять структуру mysql-таблиц (alter table).
Что делать если вижу знаки вопросов вместо текста в MySQL?
Это проблема с кодировкой. Вероятно в my.ini файле mysql-сервера не добавлено:
[mysqld] init-connect='SET NAMES utf8'Нужно добавить в .ini файл либо выполнить в консоли команду "SET NAMES utf8", после чего во время текущей сессии отображаться русский текст в mysql-консоли будет без проблем:
mysql> set names utf8; Query OK, 0 rows affected (0.00 sec)Как сделать бэкап базы mysql через консоль Linux?
Сделать бэкап базы database в файл dump_name.sql
mysqldump -u [username] -p [password] [database] > [dump_name.sql][username] – имя пользователя который имеет доступ к базе данных.
[password] – пароль пользователя.
[database] – имя базы данных.
[dump_name.sql] – имя файла, дампа на выходе.Развернуть базу из файла через командную строку
mysql -u [username] -p [password] [database] < [dump_to_restore.sql][username] – имя пользователя который имеет доступ к базе данных.
[password] – пароль пользователя.
[database] – имя базы данных.
[dump_to_restore.sql] – имя файла, из которого поднимаем базуСделать дамп структуры одной таблицы mysql (без данных):
mysqldump -u[user] -p[password] -h[host] [database] [table_name] --no-data > /path/dump_name.sqlНапример, задампим таблицу users из базы данных mydatabase:
mysqldump -uroot mydatabase users > users.dump.sqlРазвернуть mysql-dump в БД с именем database_name:
mysql -uroot database_name < users.dump.sqlЕщё одна интересная штука. Выполнять из консоли, не требуется предварительно подключаться к mysql (mysql>). Вывести список таблиц базы данных, не подключаясь непосредственно к mysql:
mysql -uroot -e 'show tables' database_name && echo donemysql> show variables like '%incr%';Заключение
Может показаться, что писать запросы в командной строке не удобно. Но это заблуждение. На слабых машинах phpmyadmin работает не так шустро как хотелось бы. Тем более не на всех серверах стоят морды с phpmyadmin, adminer и т.д. Linux + mysql в терминале реально повысили мою производительность.
Дата добавления: 11 лет назад
mysql
- Как в mysql лучше всего хранить ip адрес? 1 ответ
- Как переименовать таблицу в MySQL? Решено!
- Как очистить все таблицы в базе данных mysql? 0 ответов
- mysqldump только структуры таблиц 1 ответ
- MySQL ошибки Lost connection to MySQL server at 'waiting for initial communication packet' 1 ответ
- MySQL - изменение полей, структуры таблицы 0 комментариев
- Запросы инъекции для mysql 0 комментариев
- Доступ к mysql из-вне4 комментария
- Mysql перенос таблиц из одной базы данных в другую 0 комментариев
- Анализ производительности MySQL с использованием performance_schema 0 комментариев
Комментарии 2
Последнее время я использую Valentina Studio для работы с MySQL. Очень хороший и бесплатный инструмент, рекомендую посмотреть. http://www.valentina-db.com/en/valentina-studio-overview
Viktor, спасибо. Судя по скринам, штука интересная.
Правда, уж больно много зависимостей она имеет.. Как решу проблему с зависимостями, отпишусь.
eugene-PC:www eugene$ eugene$ sudo rpm -ivh ~/Загрузки/vstudio_x64_5_lin.rpm
rpm: RPM should not be used directly install RPM packages, use Alien instead!
rpm: However assuming you know what you are doing.
ошибка: Неудовлетворенные зависимости:
ld-linux-x86-64.so.2()(64bit) нужен для vstudio-5.3.0-2.x86_64
ld-linux-x86-64.so.2(GLIBC_2.3)(64bit) нужен для vstudio-5.3.0-2.x86_64
libc.so.6()(64bit) нужен для vstudio-5.3.0-2.x86_64
libc.so.6(GLIBC_2.2.5)(64bit) нужен для vstudio-5.3.0-2.x86_64
libc.so.6(GLIBC_2.3)(64bit) нужен для vstudio-5.3.0-2.x86_64
libc.so.6(GLIBC_2.3.3)(64bit) нужен для vstudio-5.3.0-2.x86_64
libc.so.6(GLIBC_2.3.4)(64bit) нужен для vstudio-5.3.0-2.x86_64
libc.so.6(GLIBC_2.4)(64bit) нужен для vstudio-5.3.0-2.x86_64
libdl.so.2()(64bit) нужен для vstudio-5.3.0-2.x86_64
libdl.so.2(GLIBC_2.2.5)(64bit) нужен для vstudio-5.3.0-2.x86_64
libgcc_s.so.1()(64bit) нужен для vstudio-5.3.0-2.x86_64
libgcc_s.so.1(GCC_3.0)(64bit) нужен для vstudio-5.3.0-2.x86_64
libgcc_s.so.1(GCC_3.4)(64bit) нужен для vstudio-5.3.0-2.x86_64
libgdk-x11-2.0.so.0()(64bit) нужен для vstudio-5.3.0-2.x86_64
libgdk_pixbuf-2.0.so.0()(64bit) нужен для vstudio-5.3.0-2.x86_64
libglib-2.0.so.0()(64bit) нужен для vstudio-5.3.0-2.x86_64