Table of Contents
Avete mai avuto la necessità di accedere ai dati di un server MySQL da una istanza SQL Server? Ovviamente è possibile farlo utilizzando le tante funzionalità di export e import previste dai due sistemi, ma in questo caso intendiamo proprio la possibilità di effettuare delle vere e proprie query in tempo reale, così da poter utilizzare i dati presenti sul server MySQL all'interno di JOIN, MERGE e altri comandi similari.
In questo articolo cercheremo di spiegare come è possibile farlo creando un apposito Linked Server (Server Collegato, nella traduzione italiana), una funzionalità di SQL Server che può essere utilizzata per accedere ad altre sorgenti di dati attraverso una serie di provider disponibili: nello specifico, vedremo come è possibile creare un Linked Server che punti a una istanza MySQL ubicata su una macchina accessibile tramite LAN.
Installare il MySQL Connector
La prima cosa da fare è scaricare il MySQL Connector per ODBC e installarlo sulla macchina che ospita l'istanza SQL Server sulla quale vogliamo creare il Linked Server. Questa operazione è fondamentale per rendere il server in grado di potersi connettere a MySQL.
L'ultima versione del MySQL Connector per ODBC può essere scaricata al seguente indirizzo:
Assicuratevi di scaricare la versione adatta all'architettura della macchina (x86 o x64). Inoltre, potrebbe essere necessario installare l'ultima versione dei seguenti bundle:
- Microsoft Data Access Components (MDAC) (ad oggi 2.8 SP1), scaricabile a questo indirizzo.
- Microsoft Visual C++ Redistributable Package (ad oggi 2015-2019), scaricabile a questo indirizzo.
Una volta installato il connector, sarà possibile creare il Linked Server.
Creare il Linked Server
Il Linked Server può essere creato in due modi:
- Aggiungendo un Data Source dedicato tramite lo strumento ODBC Data Source presente nel Pannello di Controllo di Windows.
- Senza aggiungere un Data Source dedicato, ovvero configurando le impostazioni di connessione direttamente all'interno del Linked Server.
La prima modalità è indubbiamente più laboriosa, ma da un punto di vista di sicurezza è preferibile in quanto, come avremo modo di vedere tra poco, consente di evitare la presenza della connection string in chiaro, evitando quindi di dover esporre le credenziali di accesso a MySQL.
Con Data Source dedicato
Per creare il Linked Server mediante l'aggiunta di un Data Source dedicato, eseguire le seguenti operazioni:
- Navigare all'interno del Pannello di Controllo > Strumenti di amministrazione, quindi lanciate lo strumento Origini Dati ODBC (32 bit o 64 bit a seconda dell'architettura della macchina).
- Selezionare la tab DNS di sistema, quindi fare click su Aggiungi per aggiungere un nuovo Data Source.
- Nella finestra Crea nuova origine dati che si aprirà, selezionare il Driver MySQL Unicode, come illustrato nella screenshot seguente, quindi fare click su Fine.
- Nella finestra successiva sarà possibile configurare il Data Source inserendo il nome, una breve descrizione, e ovviamente i dati di connessione, comprensivi di username, password e database predefinito. La screenshot seguente mostra un esempio di compilazione per la connessione a un database installato sulla porta MySQL di default raggiungibile tramite un dato indirizzo di rete locale.
IMPORTANTE: Prendete nota del Data Source Name che sceglierete, in quanto dovrete utilizzarlo più avanti.
Subito dopo aver compilato i parametri del caso, sarà possibile verificare la connessione al server MySQL facendo click sul pulsante Test: inutile dire che, affinché il test funzioni, è necessario che il server risulti accessibile, quindi occorrerà configurare l'eventuale firewall nel modo opportuno.
Una volta creato il Data Source, occorrerà creare il Linked Server vero e proprio. Il modo migliore per farlo è utilizzando SQL Server Management Studio (SSMS), lo strumento gratuito fornito da Microsoft per gestire istanze SQL Server locali e/o remote: l'ultima versione (ad oggi la 18.5) è disponibile a questo indirizzo.
Una volta scaricato e installato SSMS, utilizzatelo per connettetevi all'istanza SQL Server sulla quale desiderate creare il Linked Server. Dalla finestra denominata Object Explorer espandete il nodo Server Objects, quindi fate click con il tasto destro su Linked Servers e selezionate New Linked Server, come nella screenshot seguente:
Nella schermata che si aprirà sarà possibile impostare i parametri del linked server nel seguente modo:
- Linked Server: il nome da assegnare al Linked Server, ovvero quello che dovrete utilizzare all'interno delle varie query.
- Server Type: il tipo di server a cui ci si connette: poiché intendiamo connetterci a un Server MySQL, selezionate Other data source.
- Provider: Il provider da utilizzare per la connessione: poiché il connector per MySQL funziona tramite ODBC, selezionare Microsoft OLE DB Provider for ODBC Drivers.
- Product name: Inserite MySQL.
- Data Source: inserite il Data Source Name relativo al Data Source creato in precedenza (nell'esempio illustrato nella screenshot di poco fa il nome è "Mantis Bug Tracker").
Una volta configurati i parametri generali, spostatevi nella tab Security, dove sarà necessario:
- Selezionare l'opzione Be made using this security context.
- Inserire nuovamente le credenziali di autenticazione per connettersi al Database MySQL.
Fatto questo, sarà possibile fare click sul pulsante OK e completare la creazione del Linked Server.
Senza Data Source dedicato
Nel caso in cui si preferisse creare il Linked Server senza un Data Source dedicato, sarà possibile farlo direttamente dello strumento SSMS, evitando quindi tutta la parte legata al Pannello di Controllo e allo strumento ODBC Data Source, svolgendo le seguenti operazioni:
- Lanciare SQL Server Management Studio (SSMS).
- Collegarsi al Server SQL su cui si desidera creare il Linked Server.
- Dalla finestra Object Explorer espandere il nodo Server Objects, quindi click con il tasto destro su Linked Servers e selezionare New Linked Server.
- Creare il Linked Server come illustrato nella screenshot seguente:
- Come si può vedere, stavolta anziché specificare il nome del Data Source (che non abbiamo creato) è necessario indicare la Connection String da utilizzare per connettersi al Database, che dovrà avere questo formato:
1 |
Driver={MySQL ODBC 8.0 Unicode Driver};DATABASE=database_name;OPTION=134217728;PWD=user_password;UID=user_identification;SERVER=server_name |
- Una volta inserita la Connection String, passare alla tab Security e compilarla nello stesso modo indicato in precedenza, ovvero:
- selezionando l'opzione Be made using this security context.
- Inserendo le credenziali di autenticazione per connettersi al Database MySQL.
Utilizzare il Linked Server
Una volta creato il Linked Server è possibile interrogarlo nei seguenti modi:
- Tramite la cosiddetta "three dot notation", ovvero la sintassi utilizzata da SQL Server per effettuare query sui server collegati:
1 |
SELECT * FROM [MANTIS (MYSQL)]...[mantis_bug_table]; |
- Tramite la funzione OPENQUERY, utilizzabile nel seguente modo:
1 |
SELECT * FROM OPENQUERY([MANTIS (MYSQL)], 'SELECT * FROM mantis.mantis_bug_table'); |
In entrambi i casi, se i passaggi illustrati saranno stati svolti correttamente, riusciremo a visualizzare i dati presenti nella tabella MySQL direttamente da SQL Server.
La differenza principale tra le due modalità illustrate è che la three dot notation prevede l'utilizzo della sintassi T-SQL, mentre la funzione OPENQUERY consente l'utilizzo della sintassi tipica di MySQL, con tutte le funzioni supportate dal server MySQL collegato: sarà quindi possibile utilizzare funzionalità specifiche di quel database, come ad esempio l'utilissimo comando LIMIT.
Conclusione
Per il momento è tutto: ci auguriamo che questa guida possa essere d'aiuto a tutti quegli sviluppatori e sistemisti alla ricerca di un modo sicuro ed efficace per connettere questi due utilissimi DBMS. Alla prossima!