Нетривиальный способ выгрузки mysql запроса в внешний файл с помощью утилит isql и script.

Зачем оно может быть нужно

При работе с базой данный mysql, расположенной на серевере, зачастую возникает необходимость выгрузки mysql запроса во внешний файл. Эту задачу, также, просто решить с помощью phpmyadmin, если не одно «но»: кодировка. Если база создавалась без учёта правильной кодировки то кириллические символы при выводе результата запроса могут выглядеть примерно так: ЗАО МАРЭМ+. В ubuntu 10.04, проблема с кодировкой решалась, настройкой odbc и подключением к базе посредством ООо-base от sun. Но на 12.04 с глубоко «зашитым» LibreOffice подключение через odbc не привела к желаемым результатам, вывод запроса оказался нечитаемым. Как временное решение проблемы можно предложить нижеследующий способ.

Настройка odbc в ubuntu-12.04

В начале необходимо установить в систему пакеты odbc (open data base connect) драйвера:

 sudo apt-get install unixodbc libmyodbc 

имена файлов настроек odbc можно увидеть введя в терминале:

 odbcinst -j 

вывод в 12.04 будет примерно таким:

unixODBC 2.2.14
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/user/.odbc.ini
SQLULEN Size.......: 4
SQLLEN Size........: 4
SQLSETPOSIROW Size.: 2

в файле /etc/odbcinst.ini необходимо указать файлы драйвера в системе:

sudo gedit /etc/odbcinst.ini 

в редакторе прописать:

[MySQL]
Description     = ODBC for MySQL
Driver          = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so
Setup		= sud/usr/lib/i386-linux-gnu/odbc/libodbcmyS.so
FileUsage       = 1 

Сервер и базу данных для подключения необходимо задавать либо в целом для системы в файле /etc/odbc.ini либо для текущего пользователя в файле /home/user/.odbc.ini (или ~/.odbc.ini, для правки этого файла необходимо ввести в терминале «gedit ~/.odbc.ini»). Пользовательский файл ~/.odbc.ini может выглядеть следующим образом:

[qdb]
ReadOnly=yes
Driver= MySQL
Server=127.0.0.1
Port=7777
USER=qdb_u
PASSWORD=qdb_password
Database=q_db

Тут необходимо заметить, что к серверу с БД, я подключаюсь с локальной машиной посредством ssh, введя в терминале

  ssh -L7777:localhost:3306 s_user@192.168.32.210 

где s_user - имя пользователя на сервере, а 192.168.32.210 - IP сервера;

Проверить настройки подключения в БД можно набрав в терминале

isql qdb

если всё указано правильно, должно вывестить следующее:

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 

При помощи утилиты isql, в том числе можно вводить запросы конструкции SELECT.

Вывод запроса SELECT во внешний файл на локальной машине

И так, исходные данные: имеется настроенное ssh подключение между локальной машиной и сервером и настроенное odbc подключение с базой данных. Подключаемся к серверу

 ssh -L7777:localhost:3306 s_user@192.168.32.210 

Открываем новое окно терминала Shift+Сtrl+t, и вводим примерно следующее:

script -t /home/user/имя_файла

тут: утилита script позволяет записывать всё, что происходит в терминале, а /home/user/имя_файла - собственно файл куда будет выводится запрос. Далее подключаемся к базе:

isql qdb

и вставляем в терминал требуемый запрос1). После исполнения запроса нажимаем Ctrl+C Ctrl+D, для выхода из script. Созданный файл можно открыть в Calc, выбрав в мастере импорта требуемые разделители, например точку с запятой и символ «|». В открытом файле остаётся только удалить несколько «лишних» строк и столбцов, а так же десяток другой пробелов в ячейках 2) и наш запрос готов к дальнейшей обработке.

Ссылки

1)
для удобства запрос можно предварительно записать в каком-нибудь редакторе, затем скопировать и вставить посредством меню мыши или комбинацией клавиш Shift+Ins
2)
это лучше сделать формулами или макросом