Search This Blog

Thursday, November 22, 2018

MySQL Connector/ODBC 8.0 on Linux

Microsoft ရဲ့ MsSQL server ကို ODBC driver သုံးပြီး C++ နဲ့ သုံးခဲ့ သလိုပဲ Oracle ရဲ့ MySQL server ကို လည်း MySQL Connector/ODBC 8.0 driver ကို တပ်ဆင်ပြီး အသုံးပြု နိုင်ပါတယ်။ ကောင်းတဲ့ အချက်က တော့ C++ program တွေကို ဘာမှ ပြောင်းစရာ မလိုပဲ DSN ကို ပဲ ပြောင်းပြီး သုံးလိုက် ရုံပါပဲ။

SBC အမျိုးမျိုး၊ Platforms အမျိုးမျိုးမှာ သုံးချင်တာမို့ MySQL Connector/ODBC 8.0 ကို source ကနေ build လုပ်ပြီး တပ်ဆင် အသုံးပြု တဲ့ အကြောင်း ဆွေးနွေး ပါမယ်။ စစခြင်း အောက်က tools တွေကို စက်ထဲမှာ တပ်ဆင်ထားဖို့ လိုပါတယ်။
sudo apt install mysql-client libmysqlclient-dev
sudo apt install unixodbc unixodbc-dev
sudo apt install libgtk-3-dev cmake
sudo apt install libssl-dev


  1. Source ကိုရယူခြင်း
  2. Build နှင့် Install လုပ်ခြင်း
  3. DSN
  4. အကိုးအကားများ


Source ကိုရယူခြင်း

Connector/ODBC ကို အောက်က link မှာ ရယူနိုင် ပါတယ်။ Source ကနေ build လုပ်ချင်တာမို့ Select Operating System မှာ Source Code ကိုရွေးပြီး၊ Select OS Version မှာ Generic Linux (Architecture Independent) ကို ရွေးလိုက် ပါမယ်။

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


Figure 1. Download Connector/ODBC


ရလာတဲ့ ဖိုင်ကို extract လုပ်ပြီးတဲ့ အခါ၊ build လုပ်ဖို့ အတွက် အခန်း တစ်ခု ဖွဲ့လိုက် ပါမယ်။
$ tar zxvf ~/Downloads/mysql-connector-odbc-8.0.13-src.tar.gz
$ cd mysql-connector-odbc-8.0.13-src/
$ mkdir build
$ cd build


Build နှင့် Install လုပ်ခြင်း

ရလာတဲ့ source ကို ခုနက ဖန်တီးလိုက် တဲ့ build အခန်း ထဲ သွားပြီး unixodbc နဲ့ တွဲသုံးဖို့ အတွက် အောက်က အတိုင်း cmake နဲ့ build လုပ်ပြီး၊ install လုပ်နိုင် ပါတယ် [Ora18a]။
$ cmake .. -G "Unix Makefiles" -DWITH_UNIXODBC=1
$ make
$ sudo make install
အကယ်၍ MySQL နဲ့ ပတ်သက်တဲ့ headers နဲ့ libraries တွေကို ရှာမတွေ့ တဲ့ ပြဿနာ ပေါ်ခဲ့ရင် အောက်က လိုမျိုး သတ်မှတ် ပေးဖို့ လိုနိုင် ပါတယ်။
$ export MYSQL_INCLUDE_DIR=/usr/local/mysql/include
$ export MYSQL_LIB_DIR=/usr/local/mysql/lib
$ export MYSQL_DIR=/usr/local/mysql
ပြီးတဲ့ အခါ /usr/local/lib ထဲမှာ
  1. libmyodbc8a.so
  2. libmyodbc8w.so
  3. libmyodbc8S.so
ဆိုတဲ့ ဖိုင်တွေကို တွေ့ရ ပါမယ်။ libmyodbc8a.so က ASCII အတွက် ဖြစ်ပြီး၊ libmyodbc8w.so က Unicode အတွက် driver ဖြစ်ပါတယ်။ libmyodbc8S.so က setup အတွက်ပါ။ ဖိုင်တွေကို အောက်က command နဲ့လည်း ရှာနိုင် ပါတယ်။
$ find / -name 'lib*odbc*.so'


DSN

unixODBC က သုံးမယ့် ODBC driver ကို သိဖို့ လိုတဲ့ အတွက် register လုပ်ပေး ပါမယ် [Coo18a, Ora18b]။ အဲဒီ အတွက် /etc/odbcinst.ini ကို edit လုပ်ဖို့ အောက်က အတိုင်း ဖွင့်နိုင် ပါတယ်။
$ sudo nano /etc/odbcinst.ini
ဖိုင်ပွင့် လာတဲ့ အခါ အဲဒီ အထဲမှာ အောက်က အတိုင်း ဖြည့်ပြီး ctrl+o နဲ့ ctrl+x နှိပ် သိမ်းပြီး ပိတ်လိုက် ပါမယ်။
[myodbc8a]
Description     = Connector/ODBC 8.0 ANSI Driver DSN
Driver          = /usr/local/lib/libmyodbc8a.so
Setup           = /usr/local/lib/libmyodbc8S.so

[myodbc8w]
Description     = Connector/ODBC 8.0 UNICODE Driver DSN
Driver          = /usr/local/lib/libmyodbc8w.so
Setup           = /usr/local/lib/libmyodbc8S.so
အဲဒီနောက် ODBC Data Source Name (DSN) တွေကို /etc/odbc.ini ထဲမှာ သတ်မှတ် နိုင် ပါတယ်။
$ sudo nano /etc/odbc.ini
နဲ့ ဖိုင်ကို edit လုပ်ဖို့ ဖွင့်ပြီး၊ အဲဒီ အထဲမှာ အောက်က အတိုင်း ဖြည့််လိုက် ပါမယ်။
[ODBC Data Sources]
myodbc8w     = MyODBC 8.0 UNICODE Driver DSN
myodbc8a     = MyODBC 8.0 ANSI Driver DSN

[myodbc8w]
Driver       = /usr/local/lib/libmyodbc8w.so
Description  = Connector/ODBC 8.0 UNICODE Driver DSN
SERVER       = localhost
PORT         = 3306
USER         =
Password     =
Database     = mytest
OPTION       = 3
SOCKET       =

[myodbc8a]
Driver       = /usr/local/lib/libmyodbc8a.so
Description  = Connector/ODBC 8.0 ANSI Driver DSN
SERVER       = localhost
PORT         = 3306
USER         =
Password     =
Database     = mytest
OPTION       = 3
SOCKET       =
အဲဒီ မှာ USER အတွက် username နဲ့ Password တို့ကို ဖြည့်ချင်ရင် ဖြည့်နိုင် ပါတယ်။ SOCKET ကို ဘာမှ ဖြည့် စရာ မလို ပါဘူး။ အကယ်၍ socket error ရှိရင်တော့ အောက်က အတိုင်း mysqld.sock ရဲ့ path ကို ဖြည့်နိုင် ပါတယ်။
SOCKET       = /var/run/mysqld/mysqld.sock


Database ကို စမ်းသပ် အသုံးပြုဖို့ အတွက် isql ဆိုတဲ့ command line tool ကို သုံးပြီး myodbc8a ကို အောက်ပါ အတိုင်း ဆက်ကြည့် ပါမယ်။
$ isql -v myodbc8a
အကယ်၍ lib ကိုဖွင့် မရပဲ file not found ဆိုတဲ့ ပြဿနာ တက်ရင်တော့ လိုအပ်တဲ့ client library ကို အောက်ပါ အတိုင်း ကူးထည့် ပေးနိုင် ပါတယ်။
$ sudo cp /usr/local/mysql/lib/libmysqlclient.so.21 /usr/local/lib/
အဲဒီ နောက်မှာ တော့ အောက်က link မှာ ဖော်ပြထားတဲ့ ODBC client application တွေမှာ DSN အသစ် ကို သုံးပြီး ဆက်သွယ် အသုံးပြု လို့ ရပါပြီ။

Using MS SQL Server from C++ with wxWidgets

အကိုးအကားများ



[Ora18a] Oracle. Building Connector/ODBC from a Source Distribution on Unix. 2018.
url: https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-installation-source-unix.html.

[Ora18b] Oracle. Configuring a Connector/ODBC DSN on Unix. 2018.
url: https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-dsn-unix.html.

[Coo18a] Cool Emerald. Using Microsoft SQL Server from Linux Machines with ODBC & FreeTDS. 2018.
url: http://cool-emerald.blogspot.com/2018/10/using-microsoft-sql-server-from-linux.html.