Зачем нужен ODBC драйвер, а затем если Вы к примеру поднимаете связку Asterisk 16 + MySQL + ODBC для хранения записи звонков и логов. Сейчас я все задокумментирую для последующих наработок от и до во всех нюансах.

Необходимые приготовления:

Система Ubuntu 18.04 Server amd64 которую разворачиваю с применением файла ответов через сервис FOG (Вот что значит раз сделав пользуюсь постоянно), как VM в среде гипервизора Debian 10 + Proxmox 6

Содержание статьи:

  1. Подготавливаю после развертывания Ubuntu 18.04 Server на дальнейшую работу.
  2. Проверяю наличие odbc драйвера в дефолтных репозитариях Ubuntu 18.04 Server (Ubuntu Bionic):
  3. Так как пакета/коннектора ODBC нет в репозитариях, то буду устанавливать его скачиваю с официального сайта самую последнюю версия под свой дистрибутив:
  4. Распаковываю скачанный в предыдущем шаге «Шаг №3» архив и произвожу его инсталляцию в систему совместно с MySQL:
  5. Нужно инсталлировать драйвер:
  6. Создаю DSN:
  7. Проверить какие экземляры уже созданы:

Шаг №1: Подготавливаю после развертывания Ubuntu 18.04 Server на дальнейшую работу.

ekzorchik@srv-bionic:~$ hg clone --insecure https://ekzorchik@172.35.35.8/hg/dproject

ekzorchik@srv-bionic:~$ sudo ./dproject/default

ekzorchik@srv-bionic:~$ sudo reboot

ekzorchik@navy:~$ ssh -l ekzorchik 172.33.33.14

ekzorchik@srv-bionic:~$ uname -a && lsb_release -a

Linux srv-bionic 4.15.0-70-generic #79-Ubuntu SMP Tue Nov 12 10:36:11 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.3 LTS
Release: 18.04
Codename: bionic

ekzorchik@srv-bionic:~$

Шаг №2: Проверяю наличие odbc драйвера в дефолтных репозитариях Ubuntu 18.04 Server (Ubuntu Bionic):

ekzorchik@srv-bionic:~$ apt-cache search libmyodbc
libreoffice-base-drivers - Database connectivity drivers for LibreOffice

ekzorchik@srv-bionic:~$

Ответ пакета нет.

Шаг №3: Так как пакета/коннектора ODBC нет в репозитариях, то буду устанавливать его скачиваю с официального сайта самую последнюю версия под свой дистрибутив:

https://dev.mysql.com/downloads/connector/odbc/

  • Select Operating System: Ubuntu Linux
  • Select OS Version: Ubuntu Linux 18.04 (x86, 64-bit)

Скачиваю ODBC коннектор для Ubuntu 18.04

После кликаю/навожу указатель мыши на строку «No thanks, just start my download» и получаю полную гиперссылку и скачиваю через wget:

ekzorchik@srv-bionic:~$ wget https://dev.mysql.com/get/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.18-linux-ubuntu18.04-x86-64bit.tar.gz

Шаг №4: Распаковываю скачанный в предыдущем шаге «Шаг №3» архив и произвожу его инсталляцию в систему совместно с MySQL:

ekzorchik@srv-bionic:~$ tar zxf mysql-connector-odbc-8.0.18-linux-ubuntu18.04-x86-64bit.tar.gz

ekzorchik@srv-bionic:~$ mv mysql-connector-odbc-8.0.18-linux-ubuntu18.04-x86-64bit mysql-connector-odbc

ekzorchik@srv-bionic:~$ sudo apt-get install libodbc1 odbcinst1debian2 unixodbc mysql-client mysql-server -y

ekzorchik@srv-bionic:~$ sudo mysqladmin -u root password 712mbddr@

ekzorchik@srv-bionic:~$ sudo mysql -u root -p712mbddr@ -e "show databases\G"
mysql: [Warning] Using a password on the command line interface can be insecure.
*************************** 1. row ***************************
Database: information_schema
*************************** 2. row ***************************
Database: mysql
*************************** 3. row ***************************
Database: performance_schema
*************************** 4. row ***************************
Database: sys

Синтаксис запуска:

myodbc-installer <Object> <Action> [Options]

Результат должен быть следующим:

ekzorchik@srv-bionic:~$ ./mysql-connector-odbc/bin/myodbc-installer -d -l
вывод пуст, а должен быть, как → MySQL

Разбираюсь почему, ранее уже работало, а что изменилось?

Шаг №5: Нужно инсталлировать драйвер:

ekzorchik@srv-bionic:~$ sudo cp mysql-connector-odbc/lib/libmyodbc8* /usr/lib/x86_64-linux-gnu/odbc/

ekzorchik@srv-bionic:~$ sudo ./mysql-connector-odbc/bin/myodbc-installer -d -a -n "MySQL" -t "DRIVER=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc8w.so;"
Success: Usage count is 1

ekzorchik@srv-bionic:~$ sudo ./mysql-connector-odbc/bin/myodbc-installer -d -l
MySQL

Вот теперь в выводе есть MySQL. Двигаюсь дальше:

Шаг №6: Создаю DSN:

ekzorchik@srv-bionic:~$ sudo mysql-connector-odbc/bin/myodbc-installer -s -a -c2 -n "test" -t "DRIVER=MySQL;SERVER=127.0.0.1;DATABASE=mysql;UID=root;PWD=712mbddr@"
Success

Шаг №7: Проверить какие экземляры уже созданы:

ekzorchik@srv-bionic:~$ odbcinst -l -s -q
[test]
ekzorchik@srv-bionic:~$ cat /etc/odbc.ini

[test]
Driver=MySQL
SERVER=127.0.0.1
UID=root
PWD=712mbddr@
DATABASE=mysql
PORT=3306

ekzorchik@srv-bionic:~$ sudo find / -name myodbc-installer
/home/ekzorchik/mysql-connector-odbc/bin/myodbc-installer

ekzorchik@srv-bionic:~$ sudo cp mysql-connector-odbc/bin/myodbc-installer /bin/

ekzorchik@srv-bionic:~$ myodbc-installer -s -l c2 -n "test"

Name: test
Driver: MySQL
Server: 127.0.0.1
Uid: root
Pwd: 712mbddr@
Database: mysql
Port: 3306
Options:

ekzorchik@srv-bionic:~$ cat /etc/odbcinst.ini

[MySQL]
Driver=/usr/lib/x86_64-linux-gnu/libmyodbc8w.so
UsageCount=1
isql DSN [UID [PWD]] [options]

ekzorchik@srv-bionic:~$ isql --help
unixODBC 2.3.4

ekzorchik@srv-bionic:~$ isql test
[ISQL]ERROR: Could not SQLConnect

Вопрос почему ошибка?

ekzorchik@srv-bionic:~$ dpkg -l | grep odbc
ii libodbc1:amd64 2.3.4-1.1ubuntu3 amd64 ODBC library for Unix
ii odbcinst 2.3.4-1.1ubuntu3 amd64 Helper program for accessing odbc ini files
ii odbcinst1debian2:amd64 2.3.4-1.1ubuntu3 amd64 Support library for accessing odbc ini files
ii unixodbc 2.3.4-1.1ubuntu3 amd64 Basic ODBC tools

ekzorchik@srv-bionic:~$ sudo apt-get install strace -y

ekzorchik@srv-bionic:~$ strace -f -s 128 -tt -o /tmp/trace.log isql test -v
[S1000][unixODBC][MySQL][ODBC 8.0(w) Driver]Access denied for user 'root'@'localhost'
[ISQL]ERROR: Could not SQLConnect

ekzorchik@srv-bionic:~$ tail -f /tmp/trace.log
1431 20:01:56.430890 close(3) = 0
1431 20:01:56.430988 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
1431 20:01:56.431019 write(1, "[S1000][unixODBC][MySQL][ODBC 8.0(w) Driver]Access denied for user 'root'@'localhost'\n", 86) = 86
1431 20:01:56.431158 write(2, "[ISQL]ERROR: Could not SQLConnect\n", 34) = 34
1431 20:01:56.431285 fstat(4, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 9), ...}) = 0
1431 20:01:56.431332 close(4) = 0
1431 20:01:56.431390 fstat(5, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 8), ...}) = 0
1431 20:01:56.431419 close(5) = 0
1431 20:01:56.431635 exit_group(1) = ?
1431 20:01:56.432116 +++ exited with 1 +++

Нашел в чем проблема — неправильно создан экземляр DSNниже правильно и после успешно подключаюсь к экземляру:

ekzorchik@srv-bionic:~$ sudo nano /etc/odbc.ini

[test]
Description = MySQL connection to 'test' database
Driver=MySQL
SERVER=localhost
USER=root
PASSWORD=712mbddr@
DATABASE=mysql
PORT=3306
Socket = /var/run/mysqld/mysqld.sock
[tost]
Description = MySQL connection to 'tost' database
Driver=MySQL
SERVER=localhost
USER=root
PASSWORD=712mbddr@
DATABASE=mysql
PORT=3306
Socket = /var/run/mysqld/mysqld.sock

После не забываем сохранить внесенные изменения в odbc.ini

ekzorchik@srv-bionic:~$ sudo isql test -v
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
SQL> show tables;
+-----------------------------------------------------------------+
| Tables_in_mysql |
+-----------------------------------------------------------------+
| columns_priv |
| db |
| engine_cost |
| event |
| func |
| general_log |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+-----------------------------------------------------------------+
SQLRowCount returns 31
31 rows fetched
SQL>
SQL> quit

ekzorchik@srv-bionic:~$

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

На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.