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. |