Зачем нужен ODBC
драйвер, а затем если Вы к примеру поднимаете связку Asterisk 16 + MySQL + ODBC
для хранения записи звонков и логов. Сейчас я все задокумментирую для последующих наработок от и до во всех нюансах.
Необходимые приготовления:
Система Ubuntu 18.04 Server amd64
которую разворачиваю с применением файла ответов через сервис FOG (Вот что значит раз сделав пользуюсь постоянно), как VM
в среде гипервизора Debian 10 + Proxmox 6
Содержание статьи:
- Подготавливаю после развертывания Ubuntu 18.04 Server на дальнейшую работу.
- Проверяю наличие odbc драйвера в дефолтных репозитариях Ubuntu 18.04 Server (Ubuntu Bionic):
- Так как пакета/коннектора ODBC нет в репозитариях, то буду устанавливать его скачиваю с официального сайта самую последнюю версия под свой дистрибутив:
- Распаковываю скачанный в предыдущем шаге «Шаг №3» архив и произвожу его инсталляцию в систему совместно с MySQL:
- Нужно инсталлировать драйвер:
- Создаю DSN:
- Проверить какие экземляры уже созданы:
Шаг №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)
После кликаю/навожу указатель мыши на строку «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
. Двигаюсь дальше:
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.