본문 바로가기

MySQL, MariaDB

MariaDB Storage Engine - Connect

https://mariadb.com 블로그 참조

오늘날의 응용 프로그램은 놀라울 정도로 다양한 데이터베이스와 플랫폼에서 실행되며 다양한 형식으로 데이터를 처리합니다. 기능과 성능, 특성이 서로 다른 다양한 RDBMS 및 NoSQL 데이터베이스와 서로 다른 인프라 스택에서 실행되는 서로 다른 시간에 구축된 어플리케이션이 있죠.
서로 다른 데이터베이스에 저장된 데이터들과 데이터 소스들을 실시간으로 결합시키기 위해서는 어떠한 메카니즘이 필요합니다.
마치 오라클의 GATEWAY와 비슷한 존재 말이죠.

MariaDB에서는 CONNECT 스토리지 엔진으로 이러한 기능을 지원합니다.


CONNECT 스토리지 엔진은 XML이나 엑셀 파일, 오라클이나 MSSQL과 같은 DBMS들의 테이블을 MariaDB에서 직접 쿼리할 수 있도록 연결 기능을 제공해주는 스토리지 엔진입니다.

CONNECT 스토리지 엔진은 실제 이 외에도 많은 MariaDB 서버 외부의 데이터들을 손쉽게 접근해서 참조할 수 있도록 해줍니다.

 

하지만, 모든 MariaDB 버전에서 connect 스토리지 엔진을 사용할 수 있는 것은 아닙니다.

MariaDB에서 connect 스토리지 엔진을 사용하기 위해서는 아래에 명시된 버전들에서만 사용이 가능하니 참고하시길 바랍니다.

Connect Version Introduced Maturity
Connect 1.06.0010 MariaDB 10.4.8, MariaDB 10.3.18, MariaDB 10.2.27 Stable
Connect 1.06.0007 MariaDB 10.3.6, MariaDB 10.2.14, MariaDB 10.1.33, MariaDB 10.0.35 Stable
Connect 1.06.0005 MariaDB 10.3.3, MariaDB 10.2.10, MariaDB 10.1.29, MariaDB 10.0.33 Stable
Connect 1.06.0004 MariaDB 10.3.2, MariaDB 10.2.9, MariaDB 10.1.28 Stable
Connect 1.06.0001 MariaDB 10.3.1, MariaDB 10.2.8, MariaDB 10.1.24, MariaDB 10.0.31 Beta
Connect 1.05.0003 MariaDB 10.3.0, MariaDB 10.2.5, MariaDB 10.1.22, MariaDB 10.0.30 Stable
Connect 1.05.0001 MariaDB 10.2.4, MariaDB 10.1.21, MariaDB 10.0.29 Stable
Connect 1.04.0008 MariaDB 10.2.2, MariaDB 10.1.17, MariaDB 10.0.27 Stable
Connect 1.04.0006 MariaDB 10.2.0, MariaDB 10.1.13, MariaDB 10.0.25 Stable
Connect 1.04.0005 MariaDB 10.1.10, MariaDB 10.0.23 Beta
Connect 1.04.0003 MariaDB 10.1.9 Beta
Connect 1.03.0007 MariaDB 10.1.5, MariaDB 10.0.20 Stable
Connect 1.03.0006 MariaDB 10.1.3, MariaDB 10.0.16 Beta
Connect 1.03.0005 MariaDB 10.1.2, MariaDB 10.0.15 Beta
Connect 1.03.0003 MariaDB 10.1.1, MariaDB 10.0.14 Beta
Connect 1.03.0002 MariaDB 10.0.13 Beta
Connect 1.02.0002 MariaDB 10.1.0, MariaDB 10.0.10 Beta
Connect 1.02.0001 MariaDB 10.0.8 Beta
Connect 1.01.0008 MariaDB 10.0.5 Beta
Connect 1.01.0007 MariaDB 10.0.4 Beta
Connect 1.01.0006 MariaDB 10.0.3 Experimental
Connect 1.01.0004 MariaDB 10.0.2 Experimental

참조:https://mariadb.com/kb/en/connect/

 

CONNECT

 

mariadb.com

실험용 버전, 베타 버전도 사용은 가능하겠지만, 안정된(Stable) 버전을 사용하는 것을 권장합니다.

 

여기서는 MariaDB to Oracle DB로의 Connect engine 테스트를 진행해봅니다.

Connect engine 구성 방법 및 순서

  1.  연결하고자 하는 대상  DB의 ODBC Driver 설치
  2.  ODBC 설치및 설정
  3.  연결테스트(ODBC-Oracle)
  4.  MariaDB(MySQL) Connected Engine Plugin 설치 및 설정 
  5.  연동 테스트(MariaDB or MySQL - Oracle) 

 

 

1. Oracle DB ODBC Driver 설치 (Oracle client 설치)

Oracle db ODBC Driver 설치를위해 OracleClient 를 설치 한다.

Oracle Client(https://www.oracle.com/database/technologies/oracle-database-software-downloads.html#19c) 에서 OS 및 적절한 버전의 client를 다운받는다 

rpm -ivh oracleclient/oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
rpm -ivh oracleclient/oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
rpm -ivh oracleclient/oracle-instantclient12.1-odbc-12.1.0.2.0-1.x86_64.rpm

RPM Package를 설치 합니다.

참고로 zip 파일로 내려 받아 압축을 풀어 사용 할 수도 있으며, 기본 설치시 Oracle client 는 /usr/lib/oracle/{version}/client64/lib/ 에 설치됩니다.

 

설치가 완료되면 오라클 클라이언트 Path를 환경변수에 설정합니다.

$ vi ~/.bash_profile 
$ export ORACLE_HOME=/usr/lib/oracle/12.1/client64 
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib 

// 저장후 이를 적용 하기 위하여 
$ source ~/.bash_profile 

//환경변수 확인 
$ env LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/:/usr/lib/oracle/12.1/client64/lib/:

 

2. ODBC 설치및 설정(연결테스트)

 

위의 그림에도 나와 있듯이 MariaDB(MySQL)에서 제공하는 CONNECT Storage Engine 은 ODBC를 사용 하므로 Odbc를 설치 한다. (ubuntu 는 당연히 apt-get install)

[root@TESTDB ~] yum install unixODBC 
[root@TESTDB ~] yum install unixODBC-devel

[수동 설치]

unixODBC 소스를 내려 받아 압축을 풀고 compile 하여 설치

$ ./configure 
$ make 
$ make install

 

설치시 기본 설치 경로는 /usr/local 이며 별도의 설치 경로를 주고자 하는 경우 컴파일시 다음 조건을 준다

예) ./configure --prefix=/usr/local/unixODBC

 

ODBC설정 파일(odbc.ini, odbcinst.ini)의 경로는  {prefix}/etc 에 존재 하며,

이를 변경 하고자 하는 경우  --sysconfdir 옵션을 이용 할 수 있다.

예) ./configure --sysconfdir=/etc

 

odbc 설정

odbc설정은 2개의 파일을 편집하여 설정 합니다.(odbc.ini, odbcinst.ini)

yum or apt-get을 이용하여 설치 한 경우 odbc.ini, odbcinst.ini 파일은 /etc 디렉토리에 있습니다.

 

[odbcinst.ini편집]

$ sudo vi /etc/odbcinst.ini 

[Oracle] 
Description = Oracle ODBC driver for Oracle 
Driver = /usr/lib/oracle/12.1/client64/lib/libsqora.so.12.1

Driver = oracle odbc client driver path

Driver = 오라클 client가 인스톨된 위치의 정확한 파일명을 주어야 합니다.

 

[odbc.ini편집]

$ sudo vi /etc/odbc.ini 

[Oracle] 
Driver = Oracle-12.1 
ServerName = //192.168.0.2:1521/ORCL 
UserName = system 
Password = manager 
Trace = yes 
TraceFile = /tmp/odbc_oracle.log

Driver = Oracle (odbcinst.ini 에서 동일한 이름 사용)

ServerName = //192.168.0.2:1521/ORCL

serverName 은 oracle DB 의 정보를 정확하게 기입 합니다.

 

3. 연결테스트(ODBC-Oracle)

odbc 에서 제공 하는 isql툴을 이용해서 접속을 확인 합니다.

 

$ isql Oracle 
+---------------------------------------+ 
| Connected!                            | 
|                                       | 
| sql-statement                         | 
| help [tablename]                      | 
| quit                                  | 
|                                       | 
+---------------------------------------+ 
SQL> 
SQL> select * from emp; 
+-------+-----------+----------+-------+--------------------+---------- 
| EMPNO | ENAME     | JOB      | MGR   | HIREDATE           | SAL 
+-------+-----------+----------+-------+--------------------+---------- 
| 7369  | SMITH     | CLERK    | 7902  | 1980-12-17 00:00:00| 800 
… 
+-------+-----------+----------+-------+--------------------+---------- 
SQLRowCount returns -1 
15 rows fetched 
SQL>

테이블 및 데이터 테스트 쿼리 사용 작동 확인 중 에러가 발생 하는 경우 isql –v Oracle 으로 에러메세지를 출력 하여 확인

 

4. MariaDB(MySQL) Connected Engine Plugin 설치 및 설정

mariadb connected engine 설치 및 활성화 Connected Engine은 mariaDB에서 plugin 형태로 제공되며, 버전 10.2 이상 상위 버전에서 지원 합니다. (10.0 이하 버전은 지원이 중단)

root database 접속 후 플러그인 되어 있는 엔진 중 connect engine이 설치 되어 있고 활성화 되어 있는지 확인

 

$ mysql -uroot -p 
MariaDB [(none)]>show engines; 
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ 
| Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints | 
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ 
| CONNECT            | YES     | Management of External Data (SQL/MED), including many file formats         | NO           | NO   | NO         |
...

 

CONNECT Engine plug-in이 설치 되어 있는지 확인한다.

CONNECT Engine plug-in이 설치 되어 있지 않을 경우 connect-engine을 설치 합니다. 

 

//connect-engine 인스톨 후, 엔진 추가 및 확인
$ yum install mariadb-connect-engine 
$ mysql -uroot -p 
MariaDB [(none)]> INSTALL SONAME 'ha_connect'; 
MariaDB [(none)]> show engines; 
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ 
| Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints | 
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ 
| CSV                | YES     | CSV storage engine                                                         | NO           | NO   | NO         | 
| MRG_MyISAM         | YES     | Collection of identical MyISAM tables                                      | NO           | NO   | NO         | 
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                  | NO           | NO   | NO         | 
| BLACKHOLE          | NO      | /dev/null storage engine (anything you write to it disappears)             | NULL         | NULL | NULL       | 
| MyISAM             | YES     | MyISAM storage engine                                                      | NO           | NO   | NO         | 
| CONNECT            | YES     | Management of External Data (SQL/MED), including many file formats         | NO           | NO   | NO         | 
| InnoDB             | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        | 
| ARCHIVE            | NO      | Archive storage engine                                                     | NULL         | NULL | NULL       | 
| FEDERATED          | YES     | FederatedX pluggable storage engine                                        | YES          | NO   | YES        | 
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                         | NO           | NO   | NO         | 
| Aria               | YES     | Crash-safe tables with MyISAM heritage                                     | NO           | NO   | NO         | 
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ 
11 rows in set (0.01 sec)

 

 

 

connect plugin 엔진 패키지를 설치하는 모습...

[root@zabbix plugin]# yum install -y MariaDB-connect-engine 
Loaded plugins: langpacks 
epel/x86_64/metalink                                                                                                             | 5.7 kB  00:00:00 
epel                                                                                                                                   | 5.4 kB  00:00:00 
extras                                                                                                                                 | 3.6 kB  00:00:00 
gitlab_gitlabce/x86_64/signature                                                                                               |  862 B  00:00:00 
gitlab_gitlabce/x86_64/signature                                                                                           | 1.0 kB  00:00:00 !!! 
gitlab_gitlab-cesource/signature                                                                                               |  836 B  00:00:00 
gitlab_gitlab-cesource/signature                                                                                           |  951 B  00:00:00 !!! 
gitlab_gitlabee/x86_64/signature                                                                                              |  862 B  00:00:00 
gitlab_gitlabee/x86_64/signature                                                                                           | 1.0 kB  00:00:00 !!! 
gitlab_gitlab-eesource/signature                                                                                              |  836 B  00:00:00 
gitlab_gitlab-ee-source/signature                                                                                          |  951 B  00:00:00 !!! 
mariadb-main                                                                                                                     | 2.9 kB  00:00:00 
mariadb-maxscale                                                                                                                | 2.4 kB  00:00:00 
mariadb-tools                                                                                                                     | 2.9 kB  00:00:00 
percona-release-noarch                                                                                                        | 2.9 kB  00:00:00 
percona-release-x86_64                                                                                                        | 2.9 kB  00:00:00 
updates                                                                                                                            | 3.6 kB  00:00:00 
zabbix                                                                                                                              | 2.9 kB  00:00:00 
zabbix-non-supported                                                                                                          |  951 B  00:00:00 
(1/4): epel/x86_64/group_gz                                                                                                  |  95 kB  00:00:00 
(2/4): epel/x86_64/updateinfo                                                                                                | 1.0 MB  00:00:00 
(3/4): epel/x86_64/primary_db                                                                                                | 6.7 MB  00:00:00 
(4/4): percona-release-x86_64/7/x86_64/primary_db                                                                    | 1.0 MB  00:00:01 
(1/2): gitlab_gitlab-ce/x86_64/primary                                                                                      | 2.1 MB  00:00:02 
(2/2): gitlab_gitlab-ee/x86_64/primary                                                                                      | 2.3 MB  00:00:02 
gitlab_gitlab-ce                                                                                                                   568/568 
gitlab_gitlab-ee                                                                                                                   552/552 
Resolving Dependencies 
--> Running transaction check 
---> Package MariaDB-connect-engine.x86_64 0:10.2.31-1.el7.centos will be installed 
--> Processing Dependency: MariaDB-server = 10.2.31-1.el7.centos for package: MariaDB-connect-engine-10.2.31-1.el7.centos.x86_64 
--> Running transaction check 
---> Package MariaDB-server.x86_64 0:10.2.20-1.el7.centos will be updated 
---> Package MariaDB-server.x86_64 0:10.2.31-1.el7.centos will be an update 
--> Finished Dependency Resolution 

Dependencies Resolved 

================================================================================
 Package                                                   Arch           Version                  Repository                          Size 
================================================================================
Installing: 
 MariaDB-connect-engine                           x86_64  10.2.31-1.el7.centos           mariadb-main                     539 k 
Updating for dependencies:  MariaDB-server  x86_64  10.2.31-1.el7.centos           mariadb-main                      24 M 

Transaction Summary 
================================================================================Install  1 Package 
Upgrade             ( 1 Dependent package) 

Total size: 24 M 
Total download size: 539 k 
Downloading packages: 
MariaDB-connect-engine-10.2.31-1.el7.centos.x86_64.rpm                                                            | 539 kB  00:00:02 
Running transaction check 
Running transaction test 
Transaction test succeeded 
Running transaction 
  Updating   : MariaDB-server-10.2.31-1.el7.centos.x86_64                                                             1/3 
e²½e³?: /usr/lib/systemd/system/mariadb.service(i¼)e¡œ i?€i?¥e?i??i?μe??e?¤ 
  Installing : MariaDB-connect-engine-10.2.31-1.el7.centos.x86_64                                                   2/3 
  Cleanup    : MariaDB-server-10.2.20-1.el7.centos.x86_64                                                             3/3 
  Verifying  : MariaDB-connect-engine-10.2.31-1.el7.centos.x86_64                                                  1/3 
  Verifying  : MariaDB-server-10.2.31-1.el7.centos.x86_64                                                              2/3 
  Verifying  : MariaDB-server-10.2.20-1.el7.centos.x86_64                                                              3/3 

Installed: 
  MariaDB-connect-engine.x86_64 0:10.2.31-1.el7.centos 

Dependency Updated: 
  MariaDB-server.x86_64 0:10.2.31-1.el7.centos 

Complete!

connect 스토리지 엔진 패키지를 설치하고 plugin 경로에 ha_connect.so 바이너리 파일이 존재하는지 확인합니다.

 

 

 

 

5. 연동 테스트(MariaDB or MySQL - Oracle)

이제  MariaDB에서 Oracle로 직접 연결해 보자. 

 

MariaDB [testdb]> CREATE TABLE emp_oracle ENGINE=CONNECT CONNECTION='DSN=ORCL;UID=system;PWD=manager' `TABLE_TYPE`=ODBC `tabname`='emp' ; 
Query OK, 0 rows affected (0.04 sec) 
MariaDB [testdb]> select * from emp_oracle;


+-------+-----------+----------+-------+--------------------+---------- 
| EMPNO | ENAME     | JOB      | MGR   | HIREDATE           | SAL 
+-------+-----------+----------+-------+--------------------+---------- 
| 7369  | SMITH     | CLERK    | 7902  | 1980-12-17 00:00:00| 800 
… 
+-------+-----------+----------+-------+--------------------+---------- 
15 rows in set (0.11 sec) 
MariaDB [testdb]>

위 처럼 oracle DB의  emp Table을 직접 조회 할수 있다. 

접속 유저의 권한이 있다면 Insert, Update 역시 가능하다.

한계점은 당연히 존재 한다.

Blob/Text 등의 data Type은 지원하지 못한다.

또한, Oracle, MySQL등에서 지원하는 LinkDB , LinkedServer처럼 한번 연결로 모든 테이블 액세스는 되지 않는다. 

테이블당 링크 테이블을 생성해 이용해야 한다.

(이 부분은 필요한 Oracle에 view를 생성하고 이 View Table를 이용하는 편법을 이용할 수 있다)

 

[참고] 

테스트를 하면서 LD_LIBRARY 문제가 발생했다.

이유는 MariaDB(MySQL) 의 구동이 MySQL Damon에 의해서 실행되는데 MySQL User에 LD_LIBRARY Path 설정이 되지 않아서 발생하는 오류 였다.

이럴경우 아래와 같이 LD_LIBRARY 를 추가 할 수 있다.

 

[Oracle library 추가 방법]

/etc/ld.so.conf.d/ 디렉토리에 파일(*.conf)을 만들어 추가 
cd  /etc/ld.so.conf.d/ 
vi oracle.conf 
/usr/lib/oracle/12.2/client64/lib

프로젝트 중

고객에게 문자 발송 데이터를 만들어 문자 발송 시스템으로 데이터를 넣어 주어야 하는 프로젝트가 있었다,

고객 정보는 Oracle DB에 있었고,

문자 발송 대상 고객리스트는 엑셀로 전달되었다.

여러가지 문제로 해당 시스템은 MariaDB로 구성되어 있어서 엑셀로 전달되는 대상 고객 정보를 고객 DB(Oracle)에서 얻어와야 하는데 한번에 전달되는 엑셀의 고객수가 100만건이 넘었다. 

고객정보 소스는 엑셀이고, 고객 ID를 이용해서 필요한 고객정보(Oracle DB)를 얻어와야 하는데  100만건이 넘는 데이터를 프로그램에서 loop 를 돌면서 처리 하기에는 속도의 문제가 있었으나 Connected engine을 이용해 query 한번으로 처리 할수 있었다...



출처: https://cirius.tistory.com/1609 [바부의 세상살아가기]