MariaDB là một bản fork của MySQL, ban đầu được bắt nguồn từ bản phát hành 5.1 của MySQL. Không giống như MySQL, MariaDB có thể sử dụng dữ liệu bên ngoài được lưu trữ trong cơ sở dữ liệu không phải MariaDB như thể dữ liệu được lưu trữ trong bảng MariaDB tiêu chuẩn. Dữ liệu không được tải vào MariaDB. Để làm việc với dữ liệu bên ngoài, MariaDB sử dụng công cụ lưu trữ CONNECT. Công cụ lưu trữ này đã được giới thiệu trong MariaDB 10.0.
Công cụ lưu trữ CONNECT được bao gồm trong cả phiên bản Windows và Linux của cơ sở dữ liệu, mặc dù nó không được tải theo mặc định. Công cụ lưu trữ CONNECT có thể sử dụng ODBC để làm việc với dữ liệu bên ngoài. ODBC là giao diện trung lập với cơ sở dữ liệu cho phép các ứng dụng tuân thủ ODBC như công cụ lưu trữ CONNECT hoạt động với bất kỳ cơ sở dữ liệu nào có sẵn trình điều khiển ODBC. ODBC chuyển các truy vấn dữ liệu của ứng dụng thành một thứ mà cơ sở dữ liệu đích hiểu được.
ODBC có hai thành phần:trình điều khiển ODBC và Trình quản lý trình điều khiển ODBC. Trình điều khiển ODBC dành riêng cho cơ sở dữ liệu, tức là trình điều khiển ODBC Microsoft Access sẽ chỉ nói chuyện với cơ sở dữ liệu Microsoft Access. Trình quản lý trình điều khiển ODBC là giao diện giữa công cụ lưu trữ CONNECT và trình điều khiển ODBC. Trình quản lý trình điều khiển chịu trách nhiệm tải trình điều khiển ODBC, cách ly ứng dụng (tức là công cụ lưu trữ) khỏi thành phần tương tác với cơ sở dữ liệu. Kiến trúc này cho phép MariaDB kết nối với các cơ sở dữ liệu khác nhau mà không có bất kỳ thay đổi nào đối với MariaDB.
Trên Windows, Microsoft cung cấp Trình quản lý trình điều khiển ODBC với hệ điều hành và đây là trình quản lý mà công cụ lưu trữ CONNECT sử dụng trên nền tảng này.
Trên Linux, công cụ lưu trữ CONNECT sử dụng Trình quản lý trình điều khiển unixODBC. Trình quản lý trình điều khiển này thường có sẵn với hệ điều hành, mặc dù có thể không được cài đặt theo mặc định. Tất cả các trình điều khiển Easysoft ODBC cho các nền tảng không phải Windows đều bao gồm Trình quản lý trình điều khiển unixODBC.
Tóm lại, các thành phần cần thiết để kết nối MariaDB với dữ liệu bên ngoài bằng cách sử dụng ODBC là:
Để thử công cụ lưu trữ CONNECT, chúng tôi đã sử dụng trình điều khiển SQL Server và Access ODBC với MariaDB trên Linux và trình điều khiển Salesforce ODBC của chúng tôi với MariaDB trên Windows.
Lưu ý Nếu bạn đang sử dụng MariaDB phiên bản 64 bit, bạn phải sử dụng trình điều khiển ODBC 64 bit. Nếu bạn đang sử dụng phiên bản 32-bit MariaDB, bạn phải sử dụng trình điều khiển ODBC 32-bit.
Đang tải công cụ lưu trữ kết nối
Bất kể bạn đang chạy MariaDB trên Linux hay Windows, cùng một lệnh là bắt buộc để tải công cụ lưu trữ CONNECT. Trong shell máy khách MySQL, nhập:
INSTALL SONAME 'ha_connect';
Giả sử bạn đã cài đặt trình điều khiển ODBC thích hợp cho cơ sở dữ liệu mục tiêu của mình và đã định cấu hình nguồn dữ liệu ODBC, giờ đây bạn có thể tích hợp dữ liệu bên ngoài với MariaDB.
Trên Linux, chúng tôi đang sử dụng bản sao của Trình quản lý trình điều khiển unixODBC được bao gồm trong các trình điều khiển của chúng tôi và vì vậy chúng tôi phải thiết lập môi trường để các thư viện Trình quản lý trình điều khiển đó được tải.
# /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
Ví dụ:Kết nối MariaDB trên Linux với Microsoft Access
Công cụ lưu trữ CONNECT cho phép bạn tạo bảng CONNECT trong MariaDB. Loại bảng CONNECT chỉ định cách dữ liệu bên ngoài sẽ được truy cập. Chúng tôi đang sử dụng trình điều khiển ODBC để kết nối với Access và do đó, loại bảng chính xác để sử dụng là "ODBC". Chúng tôi đã tạo một nguồn dữ liệu ODBC kết nối với cơ sở dữ liệu Northwind và đó là dữ liệu chúng tôi sẽ truy cập từ MariaDB. Nguồn dữ liệu được gọi là "Northwind" và chúng tôi cần đưa nguồn đó vào định nghĩa bảng CONNECT của mình:
$ /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)
Công cụ lưu trữ có thể tự động phát hiện cấu trúc bảng đích và do đó chỉ định tên cột / kiểu dữ liệu trong CREATE TABLE
tuyên bố không bắt buộc.
Ví dụ:Kết nối MariaDB trên Linux với Microsoft SQL Server
Ví dụ này sử dụng tabname
tùy chọn để giải quyết sự khác biệt giữa MariaDB và SQL Server. Chúng tôi muốn truy xuất một số dữ liệu AdventureWorks được lưu trữ trong Person.Address
bàn. Tuy nhiên, MariaDB không có ý tưởng về một lược đồ bảng, và vì vậy chúng tôi sẽ thay đổi tên của bảng thành "PersonAddress" trong MariaDB. Chúng tôi chỉ định tên bảng thực tế bằng tabname
, do đó, trình điều khiển ODBC SQL Server có thể chuyển tên bảng mà SQL Server nhận ra.
$ /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 | +-----------+
Bởi vì không có tương đương trực tiếp cho kiểu dữ liệu SQL Server uniqueidentifier
. Chúng ta phải ánh xạ loại này trong cột rowguid thành một MariaDB VARCHAR
gõ phím. Mặc dù đây là cột có vấn đề duy nhất, chúng tôi cần đưa các cột khác vào CREATE TABLE
tuyên bố. Nếu không, bảng sẽ chỉ chứa cột rowguid.
Ví dụ:Kết nối MariaDB trên Windows với Salesforce
Chúng tôi đang sử dụng phiên bản MariaDB 64 bit và do đó chúng tôi cần phải định cấu hình nguồn dữ liệu ODBC 64 bit cho phiên bản Salesforce mục tiêu của chúng tôi. (Nếu không, nỗ lực của chúng tôi để tạo loại bảng CONNECT sẽ không thành công với lỗi "Kiến trúc không khớp".) Để thực hiện việc này, chúng tôi đã sử dụng phiên bản 64-bit của Microsoft ODBC Data Source Administrator, nằm trong Control Panel. (Trên một số phiên bản Windows, có cả phiên bản 32-bit và 64-bit của Quản trị viên nguồn dữ liệu ODBC nằm trong Pa-nen điều khiển, tuy nhiên, kiến trúc của chúng được gắn nhãn rõ ràng nếu đúng như vậy.)
"Bảng" Salesforce mục tiêu của chúng tôi chứa NVARCHAR
cột mà công cụ lưu trữ CONNECT xử lý dưới dạng VARCHAR
S. CREATE TABLE
câu lệnh tạo ra các cảnh báo cho hiệu ứng này. ("ID cột là các ký tự rộng", v.v.)
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
Các tùy chọn kết nối MySQL / MariaDB khác
Tên | Mô tả |
---|---|
Trình kết nối MariaDB / ODBC | Đây là trình điều khiển ODBC cho MariaDB và có sẵn cho cả nền tảng Windows và Linux. Nó cho phép các ứng dụng tuân thủ ODBC như Microsoft Excel truy cập dữ liệu được lưu trữ trong MariaDB. |
Trình kết nối MySQL / ODBC | Đây là trình điều khiển ODBC cho MySQL và có sẵn cho các nền tảng Windows, Linux, UNIX và OS X. Nó cho phép các ứng dụng tuân thủ ODBC như Microsoft Excel truy cập vào dữ liệu được lưu trữ trong MySQL. |
MySQL Federated Engine | Công cụ này tương tự như công cụ lưu trữ CONNECT, tuy nhiên nó chỉ hỗ trợ dữ liệu được lưu trữ trong cơ sở dữ liệu MySQL bên ngoài. |