MariaDB to rozwidlenie MySQL, które początkowo wywodzi się z wersji 5.1 MySQL. W przeciwieństwie do MySQL, MariaDB może używać danych zewnętrznych przechowywanych w bazach danych innych niż MariaDB, tak jakby dane były przechowywane w standardowej tabeli MariaDB. Dane nie są ładowane do MariaDB. Do pracy z danymi zewnętrznymi MariaDB używa aparatu pamięci masowej CONNECT. Ten silnik pamięci został wprowadzony w MariaDB 10.0.
Aparat pamięci masowej CONNECT jest dołączony zarówno do wersji bazy danych dla systemu Windows, jak i Linux, chociaż nie jest ładowany domyślnie. Aparat pamięci masowej CONNECT może używać ODBC do pracy z danymi zewnętrznymi. ODBC to interfejs neutralny dla bazy danych, który umożliwia aplikacjom zgodnym z ODBC, takim jak silnik pamięci masowej CONNECT, współpracę z dowolną bazą danych, dla której dostępny jest sterownik ODBC. ODBC tłumaczy zapytania danych aplikacji na coś, co rozumie docelowa baza danych.
ODBC składa się z dwóch komponentów:sterownika ODBC i Menedżera sterowników ODBC. Sterownik ODBC jest specyficzny dla bazy danych, tzn. sterownik ODBC Microsoft Access będzie komunikował się tylko z bazą danych Microsoft Access. Menedżer sterowników ODBC to interfejs między aparatem pamięci masowej CONNECT a sterownikiem ODBC. Driver Manager odpowiada za ładowanie sterownika ODBC, izolując aplikację (tj. silnik pamięci masowej) od komponentu, który współdziała z bazą danych. Ta architektura umożliwia MariaDB łączenie się z różnymi bazami danych bez wprowadzania jakichkolwiek zmian w MariaDB.
W systemie Windows firma Microsoft dostarcza Menedżera sterowników ODBC z systemem operacyjnym i jest to ten, którego silnik pamięci masowej CONNECT używa na tej platformie.
W systemie Linux aparat pamięci masowej CONNECT korzysta z menedżera sterowników unixODBC. Ten Menedżer sterowników jest zwykle dostępny z systemem operacyjnym, chociaż może nie być instalowany domyślnie. Wszystkie sterowniki Easysoft ODBC dla platform innych niż Windows zawierają menedżera sterowników unixODBC.
Podsumowując, komponenty wymagane do połączenia MariaDB z danymi zewnętrznymi za pomocą ODBC to:
Aby wypróbować silnik pamięci masowej CONNECT, użyliśmy naszych sterowników SQL Server i Access ODBC z MariaDB w systemie Linux oraz naszego sterownika Salesforce ODBC z MariaDB w systemie Windows.
Uwaga Jeśli używasz 64-bitowej wersji MariaDB, musisz użyć 64-bitowego sterownika ODBC. Jeśli używasz 32-bitowej wersji MariaDB, musisz użyć 32-bitowego sterownika ODBC.
Ładowanie silnika Connect Storage
Niezależnie od tego, czy używasz MariaDB w systemie Linux czy Windows, to samo polecenie jest wymagane do załadowania aparatu magazynu CONNECT. W powłoce klienta MySQL wpisz:
INSTALL SONAME 'ha_connect';
Zakładając, że masz zainstalowany odpowiedni sterownik ODBC dla docelowej bazy danych i skonfigurowałeś źródło danych ODBC, możesz teraz zintegrować dane zewnętrzne z MariaDB.
W systemie Linux używaliśmy kopii menedżera sterowników unixODBC, który był dołączony do naszych sterowników, więc musieliśmy ustawić środowisko tak, aby te biblioteki Menedżera sterowników były ładowane.
# /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
Przykład:Połącz MariaDB w systemie Linux z Microsoft Access
Aparat pamięci masowej CONNECT umożliwia tworzenie tabeli CONNECT w MariaDB. Typ tabeli CONNECT określa sposób uzyskiwania dostępu do danych zewnętrznych. Do łączenia się z programem Access używamy sterownika ODBC, więc prawidłowym typem tabeli jest „ODBC”. Stworzyliśmy źródło danych ODBC, które łączy się z bazą danych Northwind i to są dane, do których będziemy uzyskiwać dostęp z MariaDB. Źródło danych nazywa się „Northwind” i musimy je uwzględnić w naszej definicji tabeli 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)
Mechanizm przechowywania może automatycznie wykryć strukturę tabeli docelowej, a tym samym określić nazwy kolumn/typy danych w CREATE TABLE
oświadczenie nie jest obowiązkowe.
Przykład:Połącz MariaDB w systemie Linux z Microsoft SQL Server
W tym przykładzie użyto tabname
możliwość obejścia różnicy między MariaDB i SQL Server. Chcemy pobrać niektóre dane AdventureWorks przechowywane w Person.Address
stół. Jednak MariaDB nie ma pomysłu na schemat tabeli, dlatego zmienimy nazwę tabeli na „PersonAddress” w MariaDB. Rzeczywistą nazwę tabeli podajemy za pomocą tabname
, dzięki czemu sterownik ODBC SQL Server może przekazać nazwę tabeli rozpoznawaną przez 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 | +-----------+
Ponieważ nie ma bezpośredniego odpowiednika dla typu danych SQL Server uniqueidentifier
. Musimy zmapować ten typ w kolumnie rowguid do MariaDB VARCHAR
rodzaj. Mimo że jest to jedyna problematyczna kolumna, musimy uwzględnić pozostałe w CREATE TABLE
oświadczenie. W przeciwnym razie tabela zawierałaby tylko kolumnę rowguid.
Przykład:połącz MariaDB w systemie Windows z Salesforce
Używamy 64-bitowej wersji MariaDB i dlatego musieliśmy skonfigurować 64-bitowe źródło danych ODBC dla naszego docelowego wystąpienia Salesforce. (W przeciwnym razie nasza próba utworzenia tabeli typu CONNECT zakończy się niepowodzeniem z błędem „Niezgodność architektury”.) W tym celu użyliśmy 64-bitowej wersji Administratora źródeł danych ODBC firmy Microsoft, który znajduje się w Panelu sterowania. (W niektórych wersjach systemu Windows w Panelu sterowania znajduje się zarówno 32-bitowa, jak i 64-bitowa wersja Administratora źródeł danych ODBC, jednak w takim przypadku ich architektura jest wyraźnie oznaczona.)
Nasza docelowa „tabela” Salesforce zawiera NVARCHAR
kolumny, które aparat pamięci masowej CONNECT obsługuje jako VARCHAR
s. CREATE TABLE
instrukcja generuje ostrzeżenia w tym celu. („Identyfikator kolumny to szerokie znaki” itd.)
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
Inne opcje łączności MySQL/MariaDB
Nazwa | Opis |
---|---|
Łącznik MariaDB/ODBC | Jest to sterownik ODBC dla MariaDB i jest dostępny zarówno dla platform Windows, jak i Linux. Umożliwia aplikacjom zgodnym z ODBC, takim jak Microsoft Excel, dostęp do danych przechowywanych w MariaDB. |
Łącznik MySQL/ODBC | Jest to sterownik ODBC dla MySQL i jest dostępny dla platform Windows, Linux, UNIX i OS X. Umożliwia aplikacjom zgodnym z ODBC, takim jak Microsoft Excel, dostęp do danych przechowywanych w MySQL. |
Sfederowany silnik MySQL | Jest to podobne do silnika przechowywania CONNECT, jednak obsługuje tylko dane przechowywane w zewnętrznych bazach danych MySQL. |