SlideShare a Scribd company logo
1 of 6
Download to read offline
COMO SELECIONAR DADOS EM UMA TABELA QUE ESTÁ EM OUTRO
SERVIDOR
UTILIZANDO TABELAS FEDERATED
Muitas vezes temos a necessidade de realizar consultas ou até mesmo JOINs com tabelas que estão em
outro servidor MySQL/MariaDB. E no nosso cenário não tenos um MySQL Cluster, nem um MySQL Galera
Cluster, nem sequer uma replicação, seja isso por qualquer motivo(projetos diferentes, empresas
diferentes, etc…).
Para isso o MySQL tem(e faz muito tempo) uma engine específica, a engine FEDERATED. Sim ela permite
realizar uma conexão com outro servidor MySQL/MariaDB e executar uma consulta em uma tabela. Mas
tenha em mente que a performance vai depender de vários itens, como a velocidade da comunicação
pela internet/rede local, quantidade de dados e itens relacionados a performance em geral(estrutura da
tabela, índices, engine…).
No exemplo estou usando o MySQL 5.6.28, mas esse mesmo exemplo vai funcionar para o MySQL 5.5 e
5.7, no MySQL 5.1 e 5.0 não testei, se não for isso é muito parecido.
Para esse teste, estou usando 2 servidores que vou chamar de mysql56_1 e mysql56_2. O Objetivo é
realizar um query que tenha um JOIN com uma tabela que está no mysql56_1 e outra no mysql56_2.
No servidor mysql56_1, tenho o database cidades, com a tabela cidades. Nessa tabela eu tenho o UF e o
nome da cidade.
Florianópolis – Santa Catarina - Brasil
MySQL - MariaDB
Telefones: (48) 9948-2057
E-mail: contato@performancedb.com.br
Skype: diego.hellas
Site: www.performancedb.com.br
PERFORMANCEDB
No servidor mysql56_2, tenho o database estados, com a tabela uf. Nessa tabela eu tenho o UF e o
nome do estado.
O objetivo é fazer um select no servidor mysql56_1 e mostrar o nome da cidade e o nome do estado.
HABILITANDO A ENGINE
A engine FEDERATED não vem habilitada por padrão no MySQL, e a primeira coisa a ser feita é habilitar.
A engine já vem instalada, basta habilitar e isso é bem simples, vá até o seu my.cnf(normalmente em
/etc/my.cnf) e adicionar a palavra federated dentro da sessão do mysqld, salve e reinicie o serviço do
MySQL.
[mysqld]
federated
Florianópolis – Santa Catarina - Brasil
MySQL - MariaDB
Telefones: (48) 9948-2057
E-mail: contato@performancedb.com.br
Skype: diego.hellas
Site: www.performancedb.com.br
PERFORMANCEDB
Essa engine só precisa estar habilitada em um dos servidores. Apenas no servidor que a tabela será
criada.
No meu exemplo, eu habilitei no mysql56_1.
CRIANDO A TABELA
Temos duas opções para criar a tabela FEDERATED, podemos criar um SERVER CONNECTION ou
CONNETION. A diferença é que quando criamos um SERVER CONNECTION, podemos reutilizar a mesma
conexão para outras tabelas e a CONNECTION todos os dados da conexão devem ser declarados no
comando de CREATE TABLE.
CREATE SERVER
Esse é o modo que eu gosto de utilizar.
A primeira coisa que precisamos fazer é criar um servidor(Não um servidor físico, e sim uma conexão
com outro servidor).
Vou criar a conexão no mysql56_1 se conectando no mysql56_2.
CREATE SERVER conn_mysql56_2_estados
FOREIGN DATA WRAPPER mysql
OPTIONS (USER 'usr_estados', HOST '192.168.0.21', PASSWORD
'123', DATABASE 'estados');
Onde:
conn_mysql56_2_estados: é o nome da conexão, ele será utilizado no momento de criar a tabela
FEDERATED.
mysql: Em FOREIGN DATA WRAPPER mysql significa que é uma conexão com outro servidor MySQL,
esse valor não deve ser alterado, pois até o momento é a única disponível.
usr_estados: é o nome do usuário no servidor mysql56_2.
192.168.0.21: é o IP do mysql56_2, também pode ser utilizado DNS.
123: é a senha so usuário usr_estados.
Florianópolis – Santa Catarina - Brasil
MySQL - MariaDB
Telefones: (48) 9948-2057
E-mail: contato@performancedb.com.br
Skype: diego.hellas
Site: www.performancedb.com.br
PERFORMANCEDB
estados: é o nome do banco de dados que eu estou me conectando no servidor mysql56_2.
Agora podemos criar a tabela.
CREATE TABLE mysql56_2_uf (
uf char(2) NOT NULL,
nome varchar(50) DEFAULT NULL,
PRIMARY KEY (`uf`)
) ENGINE=FEDERATED DEFAULT CHARSET=latin1
CONNECTION='conn_mysql56_2_estados/uf';
Onde:
FEDERATED: é a engine da nossa “tabela remota”.
conn_mysql56_2_estados: é o nome da conxão criada no comando CREATE SERVER.
uf: é o nome da tabela alvo, ou seja, a tabela no servidor remoto que vamos fazer o link com a tabela
mysql56_2_uf.
Atnção! Veja que no momento em que criei a tabela mysql56_2_uf eu criei com a mesma estrutura que
da tabela uf do servidor mysql56_2, mas isso não é uma regra, a tabela pode ser criada apenas com as
colunas necessárias.
CONNECTION
A outra opção é não criar uma conexão com um servidor, mas sim declarar toda a string de conexão no
momento da criação da tabela.
CREATE TABLE mysql56_2_uf (
uf char(2) NOT NULL,
nome varchar(50) DEFAULT NULL,
PRIMARY KEY (`uf`)
) ENGINE=FEDERATED DEFAULT CHARSET=latin1
CONNECTION='mysql://usr_estados:123@192.168.0.21/estados/uf'
;
Onde:
FEDERATED: é a engine da nossa “tabela remota”.
mysql://: é o FOREIGN DATA WRAPPER esse valor não deve ser alterado, pois até o momento é a
única disponível.
usr_estados: é o nome do usuário no servidor mysql56_2.
Florianópolis – Santa Catarina - Brasil
MySQL - MariaDB
Telefones: (48) 9948-2057
E-mail: contato@performancedb.com.br
Skype: diego.hellas
Site: www.performancedb.com.br
PERFORMANCEDB
123: é a senha so usuário usr_estados.
192.168.0.21: é o IP do mysql56_2, também pode ser utilizado DNS.
estados: é o nome do banco de dados que eu estou me conectando no servidor mysql56_2.
uf: é o nome da tabela alvo, ou seja, a tabela no servidor remoto que vamos fazer o link com a tabela
mysql56_2_uf.
Atnção! Veja que no momento em que criei a tabela mysql56_2_uf eu criei com a mesma estrutura que
da tabela uf do servidor mysql56_2, mas isso não é uma regra, a tabela pode ser criada apenas com as
colunas necessárias.
UTILIZANDO A TABELA FEDERATED
Agora bata utilizar como se fosse uma tabela qualquer do seu servidor.
Vamos ao JOIN!
Espero que esse tutorial ajude muito vocês!
Florianópolis, 04 de Fevereiro de 2016
Cordialmente,
___________________________________
Diego Hellas
PERFORMANCEDB
Florianópolis – Santa Catarina - Brasil
MySQL - MariaDB
Telefones: (48) 9948-2057
E-mail: contato@performancedb.com.br
Skype: diego.hellas
Site: www.performancedb.com.br
PERFORMANCEDB

More Related Content

Viewers also liked

The Pain of Reform and China's Economic Rebirth
The Pain of Reform and China's Economic RebirthThe Pain of Reform and China's Economic Rebirth
The Pain of Reform and China's Economic Rebirth
Tom Shaw
 
Weekly Report-8new
Weekly Report-8newWeekly Report-8new
Weekly Report-8new
Shah Faisal
 
Hazel Nale's documents
Hazel Nale's documentsHazel Nale's documents
Hazel Nale's documents
Hazel Nale
 
Orpin Buiatrics Johnes 2016
Orpin Buiatrics Johnes 2016Orpin Buiatrics Johnes 2016
Orpin Buiatrics Johnes 2016
Peter Orpin
 

Viewers also liked (20)

BARÃO DE INOHAN 128 - 22 de junho de 2016
BARÃO DE INOHAN 128 - 22 de junho de 2016BARÃO DE INOHAN 128 - 22 de junho de 2016
BARÃO DE INOHAN 128 - 22 de junho de 2016
 
The Pain of Reform and China's Economic Rebirth
The Pain of Reform and China's Economic RebirthThe Pain of Reform and China's Economic Rebirth
The Pain of Reform and China's Economic Rebirth
 
Understanding Mind Mastery for Complete Mental Health
Understanding Mind Mastery for Complete Mental HealthUnderstanding Mind Mastery for Complete Mental Health
Understanding Mind Mastery for Complete Mental Health
 
DDOT SUMMER 2014
DDOT SUMMER 2014DDOT SUMMER 2014
DDOT SUMMER 2014
 
bule
bulebule
bule
 
Manuales administrativos
Manuales administrativosManuales administrativos
Manuales administrativos
 
El liderazgo para manana
El liderazgo para mananaEl liderazgo para manana
El liderazgo para manana
 
Weekly Report-8new
Weekly Report-8newWeekly Report-8new
Weekly Report-8new
 
Resume 2016
Resume 2016Resume 2016
Resume 2016
 
31653
3165331653
31653
 
Reunión informativa: La voz de las familias
Reunión informativa: La voz de las familiasReunión informativa: La voz de las familias
Reunión informativa: La voz de las familias
 
Hazel Nale's documents
Hazel Nale's documentsHazel Nale's documents
Hazel Nale's documents
 
Task 7
Task 7Task 7
Task 7
 
Task 7
Task 7Task 7
Task 7
 
Plantilla para programar ABP en Educación Infantil
Plantilla para programar ABP en Educación InfantilPlantilla para programar ABP en Educación Infantil
Plantilla para programar ABP en Educación Infantil
 
Email Spam Project
Email Spam ProjectEmail Spam Project
Email Spam Project
 
Science CV (2016)
Science CV (2016)Science CV (2016)
Science CV (2016)
 
Orpin Buiatrics Johnes 2016
Orpin Buiatrics Johnes 2016Orpin Buiatrics Johnes 2016
Orpin Buiatrics Johnes 2016
 
Task 7
Task 7Task 7
Task 7
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 

Similar to Como selecionar dados em uma tabela que está em outro servidor

Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Dalton Martins
 
Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4
Carlos Santos
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29
Juliana Nascimento
 
LabMM4 (T17 - 12/13)
LabMM4 (T17 - 12/13)LabMM4 (T17 - 12/13)
LabMM4 (T17 - 12/13)
Carlos Santos
 
Mysql cluster quick start webinar
Mysql cluster quick start webinarMysql cluster quick start webinar
Mysql cluster quick start webinar
henriquesidney
 
Mysql sintax
Mysql sintaxMysql sintax
Mysql sintax
wdojr
 

Similar to Como selecionar dados em uma tabela que está em outro servidor (20)

Prog web 05-php-mysql
Prog web 05-php-mysqlProg web 05-php-mysql
Prog web 05-php-mysql
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
 
Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4Aula 01 PHP+MySQL - LabMM4
Aula 01 PHP+MySQL - LabMM4
 
Aula 05 acessando o mysql
Aula 05   acessando o mysqlAula 05   acessando o mysql
Aula 05 acessando o mysql
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29
 
3260 php truquesmagicos
3260 php truquesmagicos3260 php truquesmagicos
3260 php truquesmagicos
 
LabMM4 (T17 - 12/13)
LabMM4 (T17 - 12/13)LabMM4 (T17 - 12/13)
LabMM4 (T17 - 12/13)
 
Programando com estilo e Performance
Programando com estilo e Performance Programando com estilo e Performance
Programando com estilo e Performance
 
Programando em PHP com Estilo
Programando  em PHP com EstiloProgramando  em PHP com Estilo
Programando em PHP com Estilo
 
UNIFAL - MySQL Stored Routines - 5.0/5.6
UNIFAL - MySQL Stored Routines - 5.0/5.6UNIFAL - MySQL Stored Routines - 5.0/5.6
UNIFAL - MySQL Stored Routines - 5.0/5.6
 
Introdução ao BD Postgre
Introdução ao BD PostgreIntrodução ao BD Postgre
Introdução ao BD Postgre
 
Mysql cluster quick start webinar
Mysql cluster quick start webinarMysql cluster quick start webinar
Mysql cluster quick start webinar
 
Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHP
 
PHP e Mysql - DELETE
PHP e Mysql - DELETEPHP e Mysql - DELETE
PHP e Mysql - DELETE
 
MySQL 5.7 Multi-Source Replication
MySQL 5.7 Multi-Source ReplicationMySQL 5.7 Multi-Source Replication
MySQL 5.7 Multi-Source Replication
 
Alo mundojpa
Alo mundojpaAlo mundojpa
Alo mundojpa
 
Conectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbcConectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbc
 
Mysql sintax
Mysql sintaxMysql sintax
Mysql sintax
 
PHP e Mysql - INSERT
PHP e Mysql - INSERTPHP e Mysql - INSERT
PHP e Mysql - INSERT
 
PHP e Mysql - INSERT
PHP e Mysql - INSERTPHP e Mysql - INSERT
PHP e Mysql - INSERT
 

Como selecionar dados em uma tabela que está em outro servidor

  • 1. COMO SELECIONAR DADOS EM UMA TABELA QUE ESTÁ EM OUTRO SERVIDOR UTILIZANDO TABELAS FEDERATED
  • 2. Muitas vezes temos a necessidade de realizar consultas ou até mesmo JOINs com tabelas que estão em outro servidor MySQL/MariaDB. E no nosso cenário não tenos um MySQL Cluster, nem um MySQL Galera Cluster, nem sequer uma replicação, seja isso por qualquer motivo(projetos diferentes, empresas diferentes, etc…). Para isso o MySQL tem(e faz muito tempo) uma engine específica, a engine FEDERATED. Sim ela permite realizar uma conexão com outro servidor MySQL/MariaDB e executar uma consulta em uma tabela. Mas tenha em mente que a performance vai depender de vários itens, como a velocidade da comunicação pela internet/rede local, quantidade de dados e itens relacionados a performance em geral(estrutura da tabela, índices, engine…). No exemplo estou usando o MySQL 5.6.28, mas esse mesmo exemplo vai funcionar para o MySQL 5.5 e 5.7, no MySQL 5.1 e 5.0 não testei, se não for isso é muito parecido. Para esse teste, estou usando 2 servidores que vou chamar de mysql56_1 e mysql56_2. O Objetivo é realizar um query que tenha um JOIN com uma tabela que está no mysql56_1 e outra no mysql56_2. No servidor mysql56_1, tenho o database cidades, com a tabela cidades. Nessa tabela eu tenho o UF e o nome da cidade. Florianópolis – Santa Catarina - Brasil MySQL - MariaDB Telefones: (48) 9948-2057 E-mail: contato@performancedb.com.br Skype: diego.hellas Site: www.performancedb.com.br PERFORMANCEDB
  • 3. No servidor mysql56_2, tenho o database estados, com a tabela uf. Nessa tabela eu tenho o UF e o nome do estado. O objetivo é fazer um select no servidor mysql56_1 e mostrar o nome da cidade e o nome do estado. HABILITANDO A ENGINE A engine FEDERATED não vem habilitada por padrão no MySQL, e a primeira coisa a ser feita é habilitar. A engine já vem instalada, basta habilitar e isso é bem simples, vá até o seu my.cnf(normalmente em /etc/my.cnf) e adicionar a palavra federated dentro da sessão do mysqld, salve e reinicie o serviço do MySQL. [mysqld] federated Florianópolis – Santa Catarina - Brasil MySQL - MariaDB Telefones: (48) 9948-2057 E-mail: contato@performancedb.com.br Skype: diego.hellas Site: www.performancedb.com.br PERFORMANCEDB
  • 4. Essa engine só precisa estar habilitada em um dos servidores. Apenas no servidor que a tabela será criada. No meu exemplo, eu habilitei no mysql56_1. CRIANDO A TABELA Temos duas opções para criar a tabela FEDERATED, podemos criar um SERVER CONNECTION ou CONNETION. A diferença é que quando criamos um SERVER CONNECTION, podemos reutilizar a mesma conexão para outras tabelas e a CONNECTION todos os dados da conexão devem ser declarados no comando de CREATE TABLE. CREATE SERVER Esse é o modo que eu gosto de utilizar. A primeira coisa que precisamos fazer é criar um servidor(Não um servidor físico, e sim uma conexão com outro servidor). Vou criar a conexão no mysql56_1 se conectando no mysql56_2. CREATE SERVER conn_mysql56_2_estados FOREIGN DATA WRAPPER mysql OPTIONS (USER 'usr_estados', HOST '192.168.0.21', PASSWORD '123', DATABASE 'estados'); Onde: conn_mysql56_2_estados: é o nome da conexão, ele será utilizado no momento de criar a tabela FEDERATED. mysql: Em FOREIGN DATA WRAPPER mysql significa que é uma conexão com outro servidor MySQL, esse valor não deve ser alterado, pois até o momento é a única disponível. usr_estados: é o nome do usuário no servidor mysql56_2. 192.168.0.21: é o IP do mysql56_2, também pode ser utilizado DNS. 123: é a senha so usuário usr_estados. Florianópolis – Santa Catarina - Brasil MySQL - MariaDB Telefones: (48) 9948-2057 E-mail: contato@performancedb.com.br Skype: diego.hellas Site: www.performancedb.com.br PERFORMANCEDB
  • 5. estados: é o nome do banco de dados que eu estou me conectando no servidor mysql56_2. Agora podemos criar a tabela. CREATE TABLE mysql56_2_uf ( uf char(2) NOT NULL, nome varchar(50) DEFAULT NULL, PRIMARY KEY (`uf`) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='conn_mysql56_2_estados/uf'; Onde: FEDERATED: é a engine da nossa “tabela remota”. conn_mysql56_2_estados: é o nome da conxão criada no comando CREATE SERVER. uf: é o nome da tabela alvo, ou seja, a tabela no servidor remoto que vamos fazer o link com a tabela mysql56_2_uf. Atnção! Veja que no momento em que criei a tabela mysql56_2_uf eu criei com a mesma estrutura que da tabela uf do servidor mysql56_2, mas isso não é uma regra, a tabela pode ser criada apenas com as colunas necessárias. CONNECTION A outra opção é não criar uma conexão com um servidor, mas sim declarar toda a string de conexão no momento da criação da tabela. CREATE TABLE mysql56_2_uf ( uf char(2) NOT NULL, nome varchar(50) DEFAULT NULL, PRIMARY KEY (`uf`) ) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='mysql://usr_estados:123@192.168.0.21/estados/uf' ; Onde: FEDERATED: é a engine da nossa “tabela remota”. mysql://: é o FOREIGN DATA WRAPPER esse valor não deve ser alterado, pois até o momento é a única disponível. usr_estados: é o nome do usuário no servidor mysql56_2. Florianópolis – Santa Catarina - Brasil MySQL - MariaDB Telefones: (48) 9948-2057 E-mail: contato@performancedb.com.br Skype: diego.hellas Site: www.performancedb.com.br PERFORMANCEDB
  • 6. 123: é a senha so usuário usr_estados. 192.168.0.21: é o IP do mysql56_2, também pode ser utilizado DNS. estados: é o nome do banco de dados que eu estou me conectando no servidor mysql56_2. uf: é o nome da tabela alvo, ou seja, a tabela no servidor remoto que vamos fazer o link com a tabela mysql56_2_uf. Atnção! Veja que no momento em que criei a tabela mysql56_2_uf eu criei com a mesma estrutura que da tabela uf do servidor mysql56_2, mas isso não é uma regra, a tabela pode ser criada apenas com as colunas necessárias. UTILIZANDO A TABELA FEDERATED Agora bata utilizar como se fosse uma tabela qualquer do seu servidor. Vamos ao JOIN! Espero que esse tutorial ajude muito vocês! Florianópolis, 04 de Fevereiro de 2016 Cordialmente, ___________________________________ Diego Hellas PERFORMANCEDB Florianópolis – Santa Catarina - Brasil MySQL - MariaDB Telefones: (48) 9948-2057 E-mail: contato@performancedb.com.br Skype: diego.hellas Site: www.performancedb.com.br PERFORMANCEDB