MySQL и командная строка

Аватар пользователя Konstantin Komelin

Вам когда-нибудь приходилось работать с MySQL через командную строку? Случается, что под рукой не оказывается ни phpMyAdmin, ни HeidiSQL, например, когда приходится заходить на сервер клиента по SSH, не имея возможность установить какой-либо софт. В таких случаях выручает командная строка, она же консоль.

Я пользуюсь консолью постоянно и собираюсь показать вам несколько трюков при работе с MySQL.

Основы

Работа с MySQL всегда начинается с авторизации. И здесь все невероятно просто, вам нужно всего лишь передать ваш логин и пароль параметрами командной строки.

mysql –uUSERNAME –pPASSWORD

Таким образом, вы открываете сеанс работы с MySQL сервером.

Так вы можете просмотреть список всех баз данных:

SHOW DATABASES;

Не забывайте ставить точку с запятой в конце каждой команды, это говорит серверу, что команда закончена.

Переключиться на нужную базу данных можно, используя команду USE:

USE database;

Ну и, конечно, посмотреть, что же внутри таблиц находится, можно командой SELECT:

SELECT * FROM table;

Выйти из сеанса работы еще проще, чем зайти:

EXIT

Дальше я приведу несколько примеров работы через консоль.

Экспорт базы данных в файл

mysqldump –uUSERNAME –pPASSWORD DATABASE > DATABASE.sql

Импорт базы данных из файла

mysql –uUSERNAME –pPASSWORD DATABASE < DATABASE.sql

Запуск MySQL запроса из консоли

mysql -uUSERNAME -pPASSWORD -e "SHOW DATABASES;"

Запуск произвольной команды из сеанса MySQL под Linux

На десерт очень занимательная возможность, которая, я уверен, понравится как новичкам, так и профи – запуск любых команд и приложений прямо из сеанса MySQL.

Заливаем дамп базы из файла в базу, не выходя из сеанса MySQL:

mysql> \! mysql –uUSERNAME –pPASSWORD DATABASE < DATABSE.sql

Выводим список процессов Linux:

mysql> \! top

Оценим объем логических разделов жесткого диска:

mysql> \! df -h

Надеюсь, теперь вы по-новому взглянули на MySQL и получили несколько степеней свободы в работе с этой замечательной СУБД без использования дополнительных приложений.

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

А возможность сохранять статью как черновик позволит писать в несколько подходов, не боясь потерять предыдущие наработки.

Призываю писать и делиться опытом!

Комментарии

Аватар пользователя kalabro

Действительно, иногда

Действительно, иногда приходится лезть напрямую в базу.
Если у вас есть Drush (а он обязан у вас быть), то подключиться к текущей базе данных в MySQL или даже в PostgreSQL можно простой командой, не вспоминая и не подбирая строку подключения и её параметры:

drush sqlc

Далее всё как обычно.

Аватар пользователя Konstantin Komelin

Спасибо, kalabro, за полезное

Спасибо, kalabro, за полезное дополнение! Никогда не пользовался этой командой драша, теперь буду ))

Аватар пользователя Anton

mysql> \! mysql –uUSERNAME

mysql> \! mysql –uUSERNAME –pPASSWORD DATABASE < DATABSE.sql

нельзя так делать. т.к. пароль станет доступен другим пользователям системы, но говоря уже о том, что он останется в bash_history

Аватар пользователя Konstantin Komelin

Согласен, не безопасно.

Согласен, не безопасно.
А как на счет?

mysql> \! mysql –uUSERNAME –p DATABASE < DATABSE.sql

Должен быть запрошен пароль.

Аватар пользователя bsyomov

HeidiSQL как и большинство

HeidiSQL как и большинство подобных программ, умеет работать через ssh туннель, поэтому возможность доступа к базе данных только изнутри по ssh не помешает воспользоваться вам столь удобным инструментом.
!В случае HeidiSQL, для работы туннелей должен быть установлен Putty, и указан путь до plink.exe в настройках соединения.

Для заливки дампа (а точнее исполнения внешнего SQL скрипта) не выходя из оболочки, нет необходимости выполнять внешние команды. Делается это так:

mysql> source /path/to/file.sql

Ещё полезно знать о том, что формат вывода результата SQL запроса или команды можно изменить c табличного на построчный:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

mysql> show databases\G
*************************** 1. row ***************************
Database: information_schema
*************************** 2. row ***************************
Database: mysql
*************************** 3. row ***************************
Database: performance_schema
3 rows in set (0.00 sec)

Это бывает очень удобно, особенно в тех случаях, когда выводится много столбцов, и табличный вид ломается, становясь не читаемым.