Сегодня я покажу, как много нюансов было чтобы установить интерфейс ODBC позволяющий языкам программирования взаимодействовать с базой данных MySQL на Ubuntu 22.04 Server. Данный интерфейс у меня будет применять для взаимосвязи Asterisk 16 и базы данных. По крайней мере так себе это пока представляю на плане, а как будет в реале уже будет в реалии. Плюс мне просто хочется разобрать поставленную задачу, как заметка на будущее.

Шаг №1: Обновляю информацию об установленных пакетов и обновляю установленные пакеты до версии самых последних в текущем релизе Ubuntu 22.04 Server из стандартных репозитариев:

ekzorchik@srv-us2204a:~$ sudo rm -Rf /var/lib/apt/lists
ekzorchik@srv-us2204a:~$ sudo nano /etc/update-manager/release-upgrades
[DEFAULT]
Prompt=never
ekzorchik@srv-us2204a:~$ sudo nano /etc/apt/apt.conf.d/02proxy
Acquire::http { Proxy "http://172.35.35.16:3142"; };
ekzorchik@srv-us2204a:~$ sudo apt-get update && sudo apt-get -y upgrade
ekzorchik@srv-us2204a:~$ sudo reboot
ekzorchik@srv-us2204a:~$ uname -a && lsb_release -a
Linux srv-us2204a 5.15.0-37-generic #39-Ubuntu SMP Wed Jun 1 19:16:45 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04 LTS
Release:        22.04
Codename:       jammy
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ sudo rm -Rf /var/lib/apt/lists
ekzorchik@srv-us2204a:~$ sudo nano /etc/update-manager/release-upgrades
[DEFAULT]
Prompt=never
ekzorchik@srv-us2204a:~$ sudo nano /etc/apt/apt.conf.d/02proxy
Acquire::http { Proxy "http://172.35.35.16:3142"; };
ekzorchik@srv-us2204a:~$ sudo apt-get update && sudo apt-get -y upgrade
ekzorchik@srv-us2204a:~$ sudo reboot
ekzorchik@srv-us2204a:~$ uname -a && lsb_release -a
Linux srv-us2204a 5.15.0-37-generic #39-Ubuntu SMP Wed Jun 1 19:16:45 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04 LTS
Release:        22.04
Codename:       jammy
ekzorchik@srv-us2204a:~$

На заметку: IP-адрес 172.35.35.16 – это виртуальная машина на моем сервере где работает сервис apt-cacher-ng цель которого кэшировать устанавливаемые пакеты дабы после обращаться к нему, а не в интернет.

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

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

Увы, пакета нет.

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

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

  • Select Operating System: Linux - Generic
  • Select OS Version: выбираю Linux – Generic (glibc 2.12) (x86, 64-bit)

Получаю ссылку и скачиваю архив:

ekzorchik@srv-us2204a:~$ wget https://dev.mysql.com/get/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.29-linux-glibc2.12-x86-64bit.tar.gz
ekzorchik@srv-us2204a:~$ tar zxf mysql-connector-odbc-8.0.29-linux-glibc2.12-x86-64bit.tar.gz
ekzorchik@srv-us2204a:~$ mv mysql-connector-odbc-8.0.29-linux-glibc2.12-x86-64bit mysql-connector-odbc
ekzorchik@srv-us2204a:~$ ls mysql-connector-odbc/lib/libmyodbc8w.so
mysql-connector-odbc/lib/libmyodbc8w.so
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ sudo mkdir -p /usr/lib/x86_64-linux-gnu/odbc
ekzorchik@srv-us2204a:~$ sudo cp mysql-connector-odbc/lib/libmyodbc8* /usr/lib/x86_64-linux-gnu/odbc/

Шаг №4: Устанавливаю Mysql сервис:

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

Шаг №5: Меняю схему авторизации в Mysql на mysql_native_password:

ekzorchik@srv-us2204a:~$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
default-authentication-plugin=mysql_native_password

Шаг №6: Перезапускаю MySQL сервис:

ekzorchik@srv-us2204a:~$ sudo systemctl restart mysql && sudo systemctl status mysql | head -n5
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-06-10 15:33:25 MSK; 14ms ago
    Process: 2232 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
   Main PID: 2241 (mysqld)
ekzorchik@srv-us2204a:~$

Шаг №7: Задаю пароль на учетную запись root сервиса MySQL с учетом измененной схемы авторизации:

ekzorchik@srv-us2204a:~$ sudo mysql -u root -e "alter user 'root'@'localhost' identified with mysql_native_password by '712mbddr@';"

Шаг №8: Инсталлирую драйвер ODBC:

ekzorchik@srv-us2204a:~$ 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-us2204a:~$
ekzorchik@srv-us2204a:~$ sudo ./mysql-connector-odbc/bin/myodbc-installer -d -l
MySQL
ekzorchik@srv-us2204a:~$

Шаг №9: Создаю DSN к примеру, под именем test:

ekzorchik@srv-us2204a:~$ 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
ekzorchik@srv-us2204a:~$

Шаг №10: Проверяю какие экземпляры уже созданы:

ekzorchik@srv-us2204a:~$ odbcinst -l -s -q
[test] <- это и есть созданный экземпляр DSN
ekzorchik@srv-us2204a:~$ cat /etc/odbc.ini
[test]
Driver=MySQL
SERVER=127.0.0.1
UID=root
PWD=712mbddr@
DATABASE=mysql
NO_SCHEMA=1
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ sudo find / -name myodbc-installer
/home/ekzorchik/mysql-connector-odbc/bin/myodbc-installer
ekzorchik@srv-us2204a:~$ sudo cp mysql-connector-odbc/bin/myodbc-installer /bin/
ekzorchik@srv-us2204a:~$ myodbc-installer -s -l c2 -n "test"
myodbc-installer: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory
ekzorchik@srv-us2204a:~$

Устраняю ошибку с модулем:

ekzorchik@srv-us2204a:~$ ls /usr/lib/x86_64-linux-gnu | grep libssl
libssl3.so
libssl.so.3
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1l-1ubuntu1.3_amd64.deb
ekzorchik@srv-us2204a:~$ sudo dpkg -i libssl1.1_1.1.1l-1ubuntu1.3_amd64.deb
ekzorchik@srv-us2204a:~$ ls /usr/lib/x86_64-linux-gnu | grep libssl
libssl3.so
libssl.so.1.1
libssl.so.3
ekzorchik@srv-us2204a:~$

Повторяю, команду на подключение к экземпляру test:

ekzorchik@srv-us2204a:~$ myodbc-installer -s -l c2 -n "test"
Name:                test
Driver:              MySQL
Server:              127.0.0.1
Uid:                 root
Pwd:                 712mbddr@
Database:            mysql
Options:
        NO_SCHEMA
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ sudo isql test
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> quit
ekzorchik@srv-us2204a:~$

Подключение выполнено успешно.

Итого, я успешно разобрал как установить ODBC драйвер для взаимодействия с MySQL на Ubuntu 22.04 Server, данная заметка пригодится мне, когда я буду задействовать этот драйвер в Asterisk размещая записи CDR (Call Detail Records) и CEL (Channel Event Logging) в таблице MySQL.

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