DB Link z SQL Server do MySQL

W jaki sposób połączyć się z SQL Server do MySQL

Jeśli chcesz połączyć się z serwera SQL Server do MySQL, np w celu pobierania danych z MySQL powinieneś w tym celu wykonać kilka działań. Na początek warto m.in.:

  • zainstalować sterownik ODBC MySQL i właściwie go skonfigurować.
  • upewnić się, czy masz możliwość dodawania i edycji systemowych źródeł danych DSN
  • posiadać uprawnienia do bazy master na Serwerze SQL Server

Co ciekawe w ten sposób można sterować bazami MySQL z poziomu SQL Server. Możesz np pobierać dane ze stron www, jeśli posiadasz dostępy do ich baz danych. Większość standardowych stron www opartych jest o bazy MySQL, stąd też taki link bazodanowy jest przydatny chociażby do analizy treści strony, wykonywania operacji masowych itp.

Sam sterownik ODBC do MySQL ściągniesz bez większych problemów ze strony MySQL. Możesz go znaleźć pod tym adresem: link. Najlepiej wybrać wersję 32 lub 64 MSI Installer w zależności od tego, czy korzystasz z 64, czy też 32 bitowego systemu operacyjnego. Po pobraniu sterownika zainstaluj go z opcjami standardowymi. W razie konieczności zrestartuj komputer.

Jeśli interesuje Cię utworzenie linku bazodanowego łączącego dwa serwery SQL Server, sprawa jest jeszcze prostsza i opisywałem ją w tym artykule: DB Link SQL Server.

Konfiguracja połączenia ODBC MySQL

Jeśli poprawnie zainstalowałeś sterownik ODBC do MySQL, otwórz konfigurację połączeń ODBC wpisując w menu Start frazę ODBC lub ODBCAD32. Powinno pojawić się okno konfiguracji sterowników. Upewnij się, czy masz dostęp do zakładki Systemowe DSN. Jeśli nie posiadasz takich uprawnień musisz je załatwić u administratorów systemu. Jeśli posiadasz uprawnienia, postępuj zgodnie ze wskazówkami opisanymi poniżej.

SQL Server Przykłady - Wybór sterownika ODBC MySQL
SQL Server Przykłady – Wybór sterownika ODBC MySQL

Sama nazwa DSN jest skrótem od nazwy źródła danych, a więc Data Source Name. W pierwszej kolejności powinniśmy dodać nowe źródło danych do Systemowych DSN. By to zrobić, kliknij przycisk dodaj oraz spośród sterowników ODBC wybierz sterownik, który zainstalowałeś do bazy MySQL Unicode. W moim przypadku będzie to MySQL ODBC 5.3 Unicode Driver.

SQL Server Przykłady - Wybór sterownika ODBC
SQL Server Przykłady – Wybór sterownika ODBC

Jeśli wykonałeś prawidłowo poprzednie kroku powinno pojawić się okno konfiguracji sterownika ODBC. Powinieneś wprowadzić w nim Twoją nazwę źródła danych, jego opis, ip serwera bazy lub host, jeśli korzystasz z połączenia TCP/IP tak jak jest to w moim przypadku. Standardowy port połączenia z bazą MySQL to 3306. Standardowo wprowadź login i hasło do bazy. Po wprowadzeniu loginu i hasła możesz już wybrać bazę na serwerze MySQL, z którą chcesz się połączyć. Na koniec przetestuj połączenie. Pamiętaj też, że jeśli łączysz się z bazą np Twojego dostawcy hostingu powinieneś odpowiednio skonfigurować hosting, by Serwer MySQL przyjmował połączenia z zewnątrz.

SQL Server Przykłady - Konfiguracja sterownika ODBC MySQL
SQL Server Przykłady – Konfiguracja sterownika ODBC MySQL

Jeśli wykonałeś poprawnie wszystkie powyższe kroki, konfiguracja sterownika ODBC została zakończona. Kolejne działania będziesz już wykonywał na bazie SQL Server.

Konfiguracja Linked Server w SQL Server

By połączyć się z poziomu SQL Server do bazy MySQL powinieneś odpowiednio skonfigurować SQL Server. By utworzyć DB link, uruchom następujący kod, konfigurujący Twój link do bazy MySQL. Link w tym przykładzie nazwiemy MYSQL_1 i w ten sposób będziemy się do niego odwoływać. W poniższym kodzie zmień parametry odpowiednie dla Twojego połączenia. Są to:

  • @datasrc – nazwa źródła danych, którą wprowadzałeś w Systemowych DSN konfigurując ODBC
  • @srvproduct – powiel w tym miejscu także nazwę źródła danych jak wyżej
  • @provstr – zmień tylko jeśli korzystasz z innego sterownika, niż ten, który wybraliśmy w powyższym punkcie
  • SERVER – wprowadź ip lub host swojego serwera dokładnie taki, jaki podawałeś w konfiguracji sterownika ODBC
  • DATABASE – nazwa bazy MySQL
  • USER – nazwa usera do Twojej bazy MySQL
  • PASSWORD – hasło do Twojej bazy MySQL
  • @catalog – najczęściej nazwa bazy MySQL
--tomaszkenig.pl
EXEC master.dbo.sp_addlinkedserver 
@server = N'MYSQL_1', 
@srvproduct=N'MySQL_tomaszkenig_pl', 
@provider=N'MSDASQL', 
@datasrc=N'MySQL_tomaszkenig_pl', 
@provstr=N'DRIVER=(MySQL ODBC 5.3 Unicode Driver);
SERVER=127.0.0.1;PORT=3306;DATABASE=nazwa_bazy;
 USER=moja_nazwa_usera ;PASSWORD=moje_haslo;OPTION=3;', @catalog=N'nazwa_bazy'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'MYSQL_1', @useself=N'False', @locallogin=NULL, @rmtuser=NULL, @rmtpassword=NULL
GO

Jeśli powyższą konfigurację wykonałeś poprawnie, a nazwa Twojego db linku do MySQL to MYSQL_1, uruchom poniżej zapisany skrypt:

--tomaszkenig.pl
EXEC master.dbo.sp_serveroption @server=N'MYSQL_1', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'MYSQL_1', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'MYSQL_1', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'MYSQL_1', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'MYSQL_1', @optname=N'rpc', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'MYSQL_1', @optname=N'rpc out', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'MYSQL_1', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'MYSQL_1', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'MYSQL_1', @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'MYSQL_1', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'MYSQL_1', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'MYSQL_1', @optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'MYSQL_1', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO

Jeśli poprawnie dodałeś link bazodanowy powinien on się pojawić w SSMS w katalogu Server Objects >Linked Servers

SQL Server Przykłady - Link bazodanowy do MySQL
SQL Server Przykłady – Link bazodanowy do MySQL

Wykonywanie operacji DML na MySQL z poziomu SQL Server

Masz już działające połączenie. Co powinieneś zrobić, by np pobierać dane z MySQL za pośrednictwem SQL Server? Wystarczy w SQL Server wprowadzić polecenie odsyłające do linku bazodanowego. Select z poziomu SQL Server dla bazy MySQL wykonujemy w następującej składni z użyciem openquery:

--tomaszkenig.pl
SELECT * FROM openquery(Nazwa_db_linku, 'kod SQL w MySQL');

Przykład:

--tomaszkenig.pl
SELECT * FROM openquery(MYSQL_1, 'SELECT ID, post_content, post_author FROM nazwa_bazy.wp_posts');
SQL Server Przykłady - Odczyt MySQL z SQL Server
SQL Server Przykłady – Odczyt MySQL z SQL Server

Jeśli chciałbyś poszerzyć swoją wiedzę na temat SQL Server, zachęcam do zapoznania się z kursem SQL Server, który zamieszczam pod tym adresem: Kurs SQL Server. Odsyłam także do innych przykładów dla SQL Server.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *