Содержание
Нетривиальный способ выгрузки 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) и наш запрос готов к дальнейшей обработке.