sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB &externa data

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

  1. Hur man skapar PL/SQL svag referensmarkör i Oracle Database

  2. T-SQL tisdag #65:Lär ut något nytt

  3. Hur Setseed() fungerar i PostgreSQL

  4. Funktioner kontra procedurer i Oracle