MariaDB är en MySQL-gaffel, som ursprungligen härleddes från 5.1-utgåvan av MySQL. Till skillnad från MySQL kan MariaDB använda extern data lagrad i icke-MariaDB-databaser som om data lagrades i en standard MariaDB-tabell. Data laddas inte in i MariaDB. För att arbeta med extern data använder MariaDB lagringsmotorn CONNECT. Denna lagringsmotor introducerades i MariaDB 10.0.
CONNECT-lagringsmotorn ingår i både Windows- och Linux-versionen av databasen, även om den inte laddas som standard. CONNECT-lagringsmotorn kan använda ODBC för att arbeta med extern data. ODBC är ett databasneutralt gränssnitt som gör att ODBC-kompatibla applikationer som CONNECT-lagringsmotorn kan fungera med vilken databas som helst för vilken en ODBC-drivrutin är tillgänglig. ODBC översätter programmets datafrågor till något som måldatabasen förstår.
ODBC har två komponenter:ODBC-drivrutinen och ODBC-drivrutinshanteraren. ODBC-drivrutinen är databasspecifik, det vill säga en Microsoft Access ODBC-drivrutin kommer bara att prata med en Microsoft Access-databas. ODBC Driver Manager är gränssnittet mellan CONNECT-lagringsmotorn och ODBC-drivrutinen. Drivrutinhanteraren ansvarar för att ladda ODBC-drivrutinen, isolera applikationen (dvs. lagringsmotorn) från den komponent som interagerar med databasen. Denna arkitektur gör det möjligt för MariaDB att ansluta till olika databaser utan att några ändringar görs i MariaDB.
På Windows tillhandahåller Microsoft en ODBC-drivrutinshanterare med operativsystemet, och detta är det som CONNECT-lagringsmotorn använder på den här plattformen.
På Linux använder CONNECT-lagringsmotorn unixODBC Driver Manager. Denna drivrutinshanterare är vanligtvis tillgänglig med operativsystemet, även om den kanske inte är installerad som standard. Alla Easysoft ODBC-drivrutiner för icke-Windows-plattformar inkluderar unixODBC Driver Manager.
Sammanfattningsvis är komponenterna som krävs för att ansluta MariaDB till extern data med hjälp av ODBC:
För att testa CONNECT-lagringsmotorn använde vi vår SQL Server och Access ODBC-drivrutiner på med MariaDB på Linux och vår Salesforce ODBC-drivrutin med MariaDB på Windows.
Obs Om du använder en 64-bitarsversion av MariaDB måste du använda en 64-bitars ODBC-drivrutin. Om du använder en 32-bitarsversion av MariaDB måste du använda en 32-bitars ODBC-drivrutin.
Laddar Connect Storage Engine
Oavsett om du kör MariaDB på Linux eller Windows, krävs samma kommando för att ladda CONNECT-lagringsmotorn. Skriv:
i ett MySQL-klientskalINSTALL SONAME 'ha_connect';
Förutsatt att du har rätt ODBC-drivrutin för din måldatabas installerad och har konfigurerat en ODBC-datakälla, kan du nu integrera extern data med MariaDB.
På Linux använde vi en kopia av unixODBC Driver Manager som ingick i våra drivrutiner, och därför var vi tvungna att ställa in miljön så att dessa Driver Manager-bibliotek skulle laddas.
# /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
Exempel:Anslut MariaDB på Linux till Microsoft Access
CONNECT-lagringsmotorn gör att du kan skapa en CONNECT-tabell i MariaDB. Tabelltypen CONNECT anger hur externa data kommer att nås. Vi använder en ODBC-drivrutin för att ansluta till Access, så den korrekta tabelltypen att använda är "ODBC". Vi har skapat en ODBC-datakälla som ansluter till Northwind-databasen, och det är den data vi kommer åt från MariaDB. Datakällan kallas "Northwind" och vi måste inkludera det i vår CONNECT-tabelldefinition:
$ /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)
Lagringsmotorn kan automatiskt upptäcka måltabellstrukturen och så specificera kolumnnamnen/datatyperna i CREATE TABLE
uttalande är inte obligatoriskt.
Exempel:Anslut MariaDB på Linux till Microsoft SQL Server
Det här exemplet använder tabname
möjlighet att kringgå en skillnad mellan MariaDB och SQL Server. Vi vill hämta en del AdventureWorks-data lagrade i Person.Address
tabell. MariaDB har dock inte idén om ett tabellschema, så vi kommer att ändra namnet på tabellen till "PersonAddress" i MariaDB. Vi anger det faktiska tabellnamnet med tabname
, så att SQL Server ODBC-drivrutinen kan skicka vidare tabellnamnet som SQL Server känner igen.
$ /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 | +-----------+
Eftersom det inte finns någon direkt motsvarighet för SQL Server-datatypen uniqueidentifier
. Vi måste mappa denna typ i rowguid-kolumnen till en MariaDB VARCHAR
typ. Även om detta är den enda problematiska kolumnen måste vi inkludera de andra i CREATE TABLE
påstående. Annars skulle tabellen bara innehålla rowguid-kolumnen.
Exempel:Anslut MariaDB på Windows till Salesforce
Vi använder en 64-bitarsversion av MariaDB och vi behövde därför konfigurera en 64-bitars ODBC-datakälla för vår mål-Salesforce-instans. (Annars kommer vårt försök att skapa en CONNECT-tabelltyp att misslyckas med felet "Architecture mismatch".) För att göra detta använde vi 64-bitarsversionen av Microsoft ODBC Data Source Administrator, som finns i Kontrollpanelen. (På vissa versioner av Windows finns det både en 32-bitars och en 64-bitarsversion av ODBC Data Source Administrator på Kontrollpanelen, men deras arkitektur är tydligt märkt om så är fallet.)
Vår måltabell för Salesforce innehåller NVARCHAR
kolumner, som CONNECT-lagringsmotorn hanterar som VARCHAR
s. CREATE TABLE
uttalandet genererar varningar om detta. ("Kolumn-ID är breda tecken", och så vidare.)
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
Andra MySQL/MariaDB-anslutningsalternativ
Namn | Beskrivning |
---|---|
MariaDB Connector/ODBC | Detta är en ODBC-drivrutin för MariaDB och är tillgänglig för både Windows- och Linux-plattformar. Det gör det möjligt för ODBC-kompatibla applikationer som Microsoft Excel att komma åt data lagrade i MariaDB. |
MySQL Connector/ODBC | Detta är en ODBC-drivrutin för MySQL och är tillgänglig för Windows, Linux, UNIX och OS X-plattformar. Det gör det möjligt för ODBC-kompatibla applikationer som Microsoft Excel att komma åt data lagrade i MySQL. |
MySQL Federated Engine | Detta liknar CONNECT-lagringsmotorn, men det stöder endast data lagrade i externa MySQL-databaser. |