MysqlUbuntu23 Ottobre 2016by Daniele Carnovale0DB Mysql remoto con tabelle Federated

Connessione db Mysql remoto con tabelle federated

Una esigenza molto importante per chi lavora con su database mysql è quella di gestire più istanze del DBMS come una sola entità logica.
Questo è molto utile quando si vuole fare una join di due tabelle che stanno su due database differenti e su server distinti.
Io personalmente, utilizzo spesso questa funzionalità anche quando voglio effettuare backup o copie di singole tabelle su server differenti.
Vediamo velocemente come questo è possibile su mysql.

Come al solito specifico il mio ambiente di sviluppo.

  • Ubuntu Server 14.04
  • Mysql 5.6 (la funzionalità federated è attivabile dalla versione 5.5 in poi)

Chiameremo “Server Client” il server da cui si vuole leggere/accedere alle tabelle federated. “Server federated” il server da cui leggere le tabelle.

Iniziamo con i comandi shell

Come prima cosa verifichiamo se mysql sul server da cui leggere è abilitato alla funzionalità federated.

connettersi al db con user e password ed eseguire il comando

mysql> show engines;

+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine     | Support | Comment                                                        | Transactions | XA   | Savepoints |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE  | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV        | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| FEDERATED  | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| ARCHIVE    | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance         | NO           | NO   | NO         |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
8 rows in set (0.00 sec)

Se nel risultato nel sul rigo federated troviamo yes non c’è bisogno di effettuare modifiche al file my.conf
Nell’eventualità (come nel mio caso) troviamo NO, bisogna aggiungere un’istruzione per mysql.
digitiamo il comando per modificare il file my.cnf

nano /etc/mysql/my.cnf 

nella sezione[mysqld] aggiungi la linea

federated

riavvia e verifica con il comando

service mysql restart
show engines

Una volta abilitata la funzionalità federated siamo pronti a collegarci da qualsiasi altro server a qualsiasi tabella o database presente sul server federated.
Per poter effettuare una connessione alle tabelle bisogna replicarle sul server “client”.
sul Server/PC client, replicare la tabella da federare con la stessa struttura

CREATE TABLE `nometabella` (
 `CodAnag` int(10) unsigned NOT NULL AUTO_INCREMENT
.....
.....
 
)ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='mysql://user:password@IP_SERVER_Federated:3306/nomedb/nometabella';

Note e suggerimenti

Da notare che la tabella chiude con una connessione di tipo mysql://..
Bisogna fare attenzione ai parametri di connessione da inserire.
Innanzitutto l’utente (user:password) deve essere abilitato alla connessione verso il server federated ed avere almeno i permessi di lettura sulla tabella.
Un altro problema relativo alla connessione esterna potrebbe essere l’IP dal quale ci si vuole collegare (IP Server Client), esso deve avere i permessi di accesso sia al server federated che all’installazione di mysql sul server stesso.

Se tutto funziona, la tabella appena creata è utilizzabile in ogni modo sul server client.
NB: La tabella creata non è una copia della tabella federated ma è l’istanza originale quindi ogni modifica su di essa si riperquote sul server federated. Io consiglio sempre di creare utenti ad-hoc con permessi di sola lettura sulle tabelle federated.

Mysql tabelle federated privilegi
Mysql privilegi alle tabelle federated
utente mysql per tabelle federated
Utente per mysql per l’utilizzo di tabelle federated

Leave a Reply

Your email address will not be published. Required fields are marked *