sql >> Database >  >> RDS >> MariaDB

MariaDB en externe gegevens

MariaDB is een MySQL-vork, die oorspronkelijk was afgeleid van de 5.1-release van MySQL. In tegenstelling tot MySQL kan MariaDB externe gegevens gebruiken die zijn opgeslagen in niet-MariaDB-databases alsof de gegevens zijn opgeslagen in een standaard MariaDB-tabel. De gegevens worden niet in MariaDB geladen. Om met externe gegevens te werken, gebruikt MariaDB de CONNECT-opslagengine. Deze opslagengine is geïntroduceerd in MariaDB 10.0.

De CONNECT-opslagengine wordt meegeleverd met zowel de Windows- als de Linux-versie van de database, hoewel deze niet standaard wordt geladen. De CONNECT-opslagengine kan ODBC gebruiken om met externe gegevens te werken. ODBC is een database-neutrale interface waarmee ODBC-compatibele toepassingen zoals de CONNECT-opslagengine kunnen werken met elke database waarvoor een ODBC-stuurprogramma beschikbaar is. ODBC vertaalt de gegevensquery's van de toepassing naar iets dat de doeldatabase begrijpt.

ODBC heeft twee componenten:de ODBC-driver en de ODBC Driver Manager. Het ODBC-stuurprogramma is databasespecifiek, d.w.z. een Microsoft Access ODBC-stuurprogramma kan alleen communiceren met een Microsoft Access-database. De ODBC Driver Manager is de interface tussen de CONNECT-opslagengine en de ODBC-driver. De Driver Manager is verantwoordelijk voor het laden van de ODBC-driver en isoleert de applicatie (d.w.z. de storage-engine) van de component die met de database communiceert. Deze architectuur stelt MariaDB in staat om verbinding te maken met verschillende databases zonder dat er wijzigingen worden aangebracht in MariaDB.

Op Windows levert Microsoft een ODBC Driver Manager bij het besturingssysteem, en dit is degene die de CONNECT-opslagengine op dit platform gebruikt.

Op Linux gebruikt de CONNECT-opslagengine de unixODBC Driver Manager. Deze Driver Manager is meestal beschikbaar bij het besturingssysteem, maar is mogelijk niet standaard geïnstalleerd. Alle Easysoft ODBC-stuurprogramma's voor niet-Windows-platforms bevatten de unixODBC Driver Manager.

Samenvattend zijn de componenten die nodig zijn om MariaDB te verbinden met externe gegevens met behulp van ODBC:

Om de CONNECT-opslagengine uit te proberen, hebben we onze SQL Server- en Access ODBC-stuurprogramma's gebruikt met MariaDB op Linux en onze Salesforce ODBC-stuurprogramma met MariaDB op Windows.

Opmerking Als u een 64-bits versie van MariaDB gebruikt, moet u een 64-bits ODBC-stuurprogramma gebruiken. Als u een 32-bits versie van MariaDB gebruikt, moet u een 32-bits ODBC-stuurprogramma gebruiken.

De Connect Storage Engine laden

Ongeacht of u MariaDB op Linux of Windows gebruikt, dezelfde opdracht is vereist om de CONNECT-opslagengine te laden. Typ in een MySQL-clientshell:

INSTALL SONAME 'ha_connect';

Ervan uitgaande dat u het juiste ODBC-stuurprogramma voor uw doeldatabase hebt geïnstalleerd en een ODBC-gegevensbron hebt geconfigureerd, kunt u nu externe gegevens integreren met MariaDB.

Op Linux gebruikten we een kopie van de unixODBC Driver Manager die bij onze stuurprogramma's was geleverd, en dus moesten we de omgeving zo instellen dat die Driver Manager-bibliotheken zouden worden geladen.

# /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

Voorbeeld:MariaDB op Linux verbinden met Microsoft Access

Met de CONNECT-opslagengine kunt u een CONNECT-tabel maken in MariaDB. Het tabeltype CONNECT geeft aan hoe toegang wordt verkregen tot de externe gegevens. We gebruiken een ODBC-stuurprogramma om verbinding te maken met Access en daarom is het juiste tabeltype "ODBC". We hebben een ODBC-gegevensbron gemaakt die verbinding maakt met de Northwind-database, en dat zijn de gegevens waartoe we toegang zullen krijgen vanuit MariaDB. De gegevensbron heet "Northwind" en die moeten we opnemen in onze CONNECT-tabeldefinitie:

$ /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)

De opslagengine kan de structuur van de doeltabel automatisch detecteren en zo de kolomnamen / gegevenstypen specificeren in de CREATE TABLE verklaring is niet verplicht.

Voorbeeld:MariaDB op Linux verbinden met Microsoft SQL Server

Dit voorbeeld gebruikt de tabname optie om een ​​verschil tussen MariaDB en SQL Server te omzeilen. We willen enkele AdventureWorks-gegevens ophalen die zijn opgeslagen in het Person.Address tafel. MariaDB heeft echter niet het idee van een tabelschema en daarom zullen we de naam van de tabel wijzigen in "PersonAddress" in MariaDB. We specificeren de werkelijke tabelnaam met de tabname , zodat de SQL Server ODBC-driver de tabelnaam kan doorgeven die SQL Server herkent.

$ /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 |
+-----------+

Omdat er geen direct equivalent is voor het SQL Server-gegevenstype uniqueidentifier . We moeten dit type in de rowguid-kolom toewijzen aan een MariaDB VARCHAR type. Hoewel dit de enige problematische kolom is, moeten we de andere opnemen in de CREATE TABLE uitspraak. Anders zou de tabel alleen de kolom rowguid bevatten.

Voorbeeld:MariaDB op Windows verbinden met Salesforce

We gebruiken een 64-bits versie van MariaDB en daarom moesten we een 64-bits ODBC-gegevensbron configureren voor onze Salesforce-doelinstantie. (Anders mislukt onze poging om een ​​CONNECT-tabeltype te maken met de fout "Architectuur komt niet overeen".) Hiervoor hebben we de 64-bits versie van Microsoft ODBC Data Source Administrator gebruikt, die zich in het Configuratiescherm bevindt. (Op sommige versies van Windows bevindt zich zowel een 32-bits als een 64-bits versie van ODBC Data Source Administrator in het Configuratiescherm, maar hun architectuur is duidelijk aangegeven als dit het geval is.)

Onze doel-Salesforce-"tabel" bevat NVARCHAR kolommen, die door de CONNECT-opslagengine worden verwerkt als VARCHAR s. De CREATE TABLE statement genereert hiervoor waarschuwingen. ("Kolom-ID is brede tekens", enzovoort.)

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

Andere MySQL/MariaDB-connectiviteitsopties

Naam Beschrijving
MariaDB Connector/ODBC Dit is een ODBC-stuurprogramma voor MariaDB en is beschikbaar voor zowel Windows- als Linux-platforms. Het stelt ODBC-compatibele toepassingen zoals Microsoft Excel in staat om toegang te krijgen tot gegevens die zijn opgeslagen in MariaDB.
MySQL-connector/ODBC Dit is een ODBC-stuurprogramma voor MySQL en is beschikbaar voor Windows-, Linux-, UNIX- en OS X-platforms. Het stelt ODBC-compatibele toepassingen zoals Microsoft Excel in staat om toegang te krijgen tot gegevens die zijn opgeslagen in MySQL.
MySQL Federated Engine Dit is vergelijkbaar met de CONNECT-opslagengine, maar ondersteunt alleen gegevens die zijn opgeslagen in externe MySQL-databases.

  1. STRCMP() gebruiken om 2 strings in MySQL te vergelijken

  2. Moet ik !=of ​​<> gebruiken voor niet gelijk in T-SQL?

  3. Nieuwe AMD-processorfamilies zijn goed te vergelijken met nieuwe Intel-processors

  4. SQL DROP-KOLOM voor beginners