sql >> Base de Datos >  >> RDS >> MariaDB

MariaDB y datos externos

MariaDB es una bifurcación de MySQL, que inicialmente se derivó de la versión 5.1 de MySQL. A diferencia de MySQL, MariaDB puede usar datos externos almacenados en bases de datos que no son de MariaDB como si los datos estuvieran almacenados en una tabla estándar de MariaDB. Los datos no se cargan en MariaDB. Para trabajar con datos externos, MariaDB utiliza el motor de almacenamiento CONNECT. Este motor de almacenamiento se introdujo en MariaDB 10.0.

El motor de almacenamiento CONNECT se incluye con la versión de Windows y Linux de la base de datos, aunque no se carga de forma predeterminada. El motor de almacenamiento CONNECT puede usar ODBC para trabajar con datos externos. ODBC es una interfaz independiente de la base de datos que permite que las aplicaciones compatibles con ODBC, como el motor de almacenamiento CONNECT, funcionen con cualquier base de datos para la que esté disponible un controlador ODBC. ODBC traduce las consultas de datos de la aplicación en algo que la base de datos de destino entienda.

ODBC tiene dos componentes:el controlador ODBC y el Administrador de controladores ODBC. El controlador ODBC es específico de la base de datos, es decir, un controlador ODBC de Microsoft Access solo se comunicará con una base de datos de Microsoft Access. El administrador de controladores ODBC es la interfaz entre el motor de almacenamiento CONNECT y el controlador ODBC. El administrador de controladores es responsable de cargar el controlador ODBC, aislando la aplicación (es decir, el motor de almacenamiento) del componente que interactúa con la base de datos. Esta arquitectura permite que MariaDB se conecte a diferentes bases de datos sin que se realice ningún cambio en MariaDB.

En Windows, Microsoft proporciona un administrador de controladores ODBC con el sistema operativo, y este es el que usa el motor de almacenamiento CONNECT en esta plataforma.

En Linux, el motor de almacenamiento CONNECT utiliza el administrador de controladores unixODBC. Este Administrador de controladores suele estar disponible con el sistema operativo, aunque es posible que no esté instalado de forma predeterminada. Todos los controladores ODBC de Easysoft para plataformas distintas de Windows incluyen el administrador de controladores unixODBC.

En resumen, los componentes necesarios para conectar MariaDB a datos externos mediante ODBC son:

Para probar el motor de almacenamiento CONNECT, usamos nuestros controladores ODBC de SQL Server y Access con MariaDB en Linux y nuestro controlador ODBC de Salesforce con MariaDB en Windows.

Nota Si utiliza una versión de MariaDB de 64 bits, debe utilizar un controlador ODBC de 64 bits. Si utiliza una versión de 32 bits de MariaDB, debe utilizar un controlador ODBC de 32 bits.

Cargar el motor de almacenamiento Connect

Independientemente de si está ejecutando MariaDB en Linux o Windows, se requiere el mismo comando para cargar el motor de almacenamiento CONNECT. En un shell de cliente MySQL, escriba:

INSTALL SONAME 'ha_connect';

Suponiendo que tiene instalado el controlador ODBC adecuado para su base de datos de destino y ha configurado una fuente de datos ODBC, ahora puede integrar datos externos con MariaDB.

En Linux, usábamos una copia de unixODBC Driver Manager que se incluía con nuestros controladores, por lo que tuvimos que configurar el entorno para que se cargaran esas bibliotecas de Driver Manager.

# /etc/init.d/mariadb stop
# export LD_LIBRARY_PATH=/usr/local/easysoft/unixODBC/lib:$LD_LIBRARY_PATH
# ldd /opt/mariadb/lib/plugin/ha_connect.so | grep odbc
        libodbc.so.1 => /usr/local/easysoft/unixODBC/lib/libodbc.so.1
        (0x00007f2a06ce8000)
# /etc/init.d/mariadb start

Ejemplo:conectar MariaDB en Linux a Microsoft Access

El motor de almacenamiento CONNECT le permite crear una tabla CONNECT en MariaDB. El tipo de tabla CONNECT especifica cómo se accederá a los datos externos. Usamos un controlador ODBC para conectarnos a Access, por lo que el tipo de tabla correcto que se debe usar es "ODBC". Hemos creado una fuente de datos ODBC que se conecta a la base de datos Northwind, y esos son los datos a los que accederemos desde MariaDB. La fuente de datos se llama "Northwind" y debemos incluirla en nuestra definición de tabla CONNECT:

$ /opt/mariadb/bin/mysql --socket=/opt/mariadb-data/mariadb.sock
MariaDB [(none)]> CREATE DATABASE MDB;
MariaDB [MDB]> USE MDB;
MariaDB [MDB]> INSTALL SONAME 'ha_connect';
MariaDB [MDB]> CREATE TABLE Customers engine=connect
                                      table_type=ODBC
                                      Connection='DSN=ACCESS_NORTHWIND;';
MariaDB [MDB]> SELECT CompanyName FROM Customers WHERE CustomerID = 'VICTE';
+----------------------+
| CompanyName          |
+----------------------+
| Victuailles en stock |
+----------------------+
1 row in set (0.02 sec)

El motor de almacenamiento puede detectar automáticamente la estructura de la tabla de destino y, por lo tanto, especificar los nombres de columna/tipos de datos en CREATE TABLE declaración no es obligatoria.

Ejemplo:conectar MariaDB en Linux a Microsoft SQL Server

Este ejemplo usa el tabname opción para evitar una diferencia entre MariaDB y SQL Server. Queremos recuperar algunos datos de AdventureWorks almacenados en Person.Address mesa. Sin embargo, MariaDB no tiene la idea de un esquema de tabla, por lo que cambiaremos el nombre de la tabla a "PersonAddress" en MariaDB. Especificamos el nombre real de la tabla con tabname , por lo que el controlador ODBC de SQL Server puede pasar el nombre de la tabla que reconoce SQL Server.

$ /opt/mariadb/bin/mysql --socket=/opt/mariadb-data/mariadb.sock
MariaDB [(none)]> CREATE DATABASE MSSQL;
MariaDB [(none)]> USE MSSQL;
MariaDB [MSSQL]> INSTALL SONAME 'ha_connect';
MariaDB [MSSQL]> CREATE TABLE PersonAddress engine=connect
                                            table_type=ODBC
                                            tabname='Person.Address'
                                            Connection='DSN=SQLSERVER_ADVENTUREWORKS;';
ERROR 1105 (HY000): Unsupported SQL type -11
MariaDB [MSSQL]> \! grep -- -11 /usr/local/easysoft/unixODBC/include/sqlext.h 
#define SQL_GUID                                (-11)
MariaDB [MSSQL]> CREATE TABLE PersonAddress (  AddressID int,  
                                                AddressLine1 varchar(60),  
                                                AddressLine2 varchar(60),
                                                City varchar(30),
                                                StateProvinceID int,
                                                PostalCode varchar(15),
                                                rowguid varchar(64),
                                                ModifiedDate datetime )
                                 engine=connect
                                 table_type=ODBC 
                                 tabname='Person.Address'
                                 Connection='DSN=SQLSERVER_SAMPLE;';
MariaDB [MSSQL]> SELECT City FROM PersonAddress WHERE AddressID = 32521;
+-----------+
| City      |
+-----------+
| Sammamish |
+-----------+

Porque no existe un equivalente directo para el tipo de datos de SQL Server uniqueidentifier . Tenemos que asignar este tipo en la columna rowguid a MariaDB VARCHAR tipo. Aunque esta es la única columna problemática, debemos incluir las demás en CREATE TABLE declaración. De lo contrario, la tabla solo contendría la columna rowguid.

Ejemplo:conectar MariaDB en Windows a Salesforce

Estamos usando una versión de 64 bits de MariaDB y, por lo tanto, necesitábamos configurar una fuente de datos ODBC de 64 bits para nuestra instancia de Salesforce de destino. (De lo contrario, nuestro intento de crear un tipo de tabla CONNECT fallará con un error de "Discordancia de arquitectura"). Para hacer esto, usamos la versión de 64 bits de Microsoft ODBC Data Source Administrator, que se encuentra en el Panel de control. (En algunas versiones de Windows, hay una versión de 32 bits y una de 64 bits del Administrador de fuente de datos ODBC ubicado en el Panel de control, sin embargo, su arquitectura está claramente etiquetada si este es el caso).

Nuestra "tabla" objetivo de Salesforce contiene NVARCHAR columnas, que el motor de almacenamiento CONNECT maneja como VARCHAR s. El CREATE TABLE declaración genera advertencias a tal efecto. ("El ID de la columna tiene caracteres anchos", etc.)

CREATE DATABASE SALESFORCE;
USE SALESFORCE;
INSTALL SONAME 'ha_connect';
CREATE TABLE Product2 engine=connect
                      table_type=ODBC
                      Connection='DSN=64-bit Salesforce System ODBC DSN;';
SELECT Description FROM Product2

ODBC Driver for SQL Server, SQL Azure
ODBC Driver for Salesforce.com, Force.com, Database.com

Otras opciones de conectividad de MySQL/MariaDB

Nombre Descripción
Conector MariaDB/ODBC Este es un controlador ODBC para MariaDB y está disponible para plataformas Windows y Linux. Permite que las aplicaciones compatibles con ODBC, como Microsoft Excel, accedan a los datos almacenados en MariaDB.
Conector MySQL/ODBC Este es un controlador ODBC para MySQL y está disponible para las plataformas Windows, Linux, UNIX y OS X. Permite que las aplicaciones compatibles con ODBC, como Microsoft Excel, accedan a los datos almacenados en MySQL.
Motor federado MySQL Esto es similar al motor de almacenamiento CONNECT, sin embargo, solo admite datos almacenados en bases de datos MySQL externas.