8/17/2019 SGBD_Atualizado
1/30
UNIVERSIDADE DE SOROCABAPRÓ-REITORIA ACADÊMICA
PROGRAMA DE PÓS-GRADUAÇÃO EM MBA EM BUSINESS INTELLIGENCE
Everton Luiz Belarmino
João PauloWilbert Canno
SISTEMA DE GERENCIAMENTO DE BANCO DE DADOS
MYSQL
Sorocaba/SP2016
8/17/2019 SGBD_Atualizado
2/30
LISTA DE FIGURAS
Figura 1: Armazenamento dos bancos de dados no diretório principal ....................................... 5
Figura 2: Banco de dados sshop .................................................................................................... 5
Figura 3: Tabela MyISAM - diretório ............................................................................................. 6
Figura 4: Tabela InnoDB - Diretório ............................................................................................... 8Figura 5 - Resultado do Select na tabela projetos – Maio/2016 ................................................. 10
Figura 6 - Resultado do Select na tabela projetos selecionando campos específicos –
Maio/2016 ................................................................................................................................... 11
Figura 7 - Resultado do Select na tabela projetos com WHERE – Maio/2016 ............................ 11
Figura 8 - Resultado do Select na tabela projetos com Where e Like – Maio/2016 ................... 12
Figura 9 - Resultado do comando mysqlshow – Maio/2016 ...................................................... 14
Figura 10 - Replicação em três fases – Maio/2016 ..................................................................... 21
Figura 11 - Replicação em três fases – Maio/2016 ..................................................................... 27
Figura 12 - Replicação em três fases – Maio/2016 ..................................................................... 28
http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897596http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897596http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897596http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897599http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897599http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897599http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897601http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897601http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897601http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897602http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897602http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897602http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897603http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897603http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897603http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897603http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897602http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897601http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897599http://c/Users/paulo/Desktop/SGBD_Atualizado.docx%23_Toc450897596
8/17/2019 SGBD_Atualizado
3/30
Sumário
INTRODUÇÃO ............................................................................................................................ 4
OBJETIVO ................................................................................................................................... 4
BANCO DE DADOS MYSQL .................................................................................................... 4
Definição: ................................................................................................................................. 4
Gravação e Fragmentação do Dado: .................................................................................. 4
A ENGINE MyISAM ................................................................................................................... 6
Principais Características da Engine MyISAM................................................................... 6
A ENGINE INNODB ................................................................................................................... 7
Principais Características da Engine InnoDB .................................................................... 8
Considerações sobre as ferramentas: ................................................................................ 8
FRAGMENTAÇÃO DO MYSQL ............................................................................................... 9
CONSULTA DE DADOS E ÍNDICES .................................................................................... 10
METADADOS E DICIONÁRIOS DE DADOS ...................................................................... 13
REDUNDÂNCIA CONTROLADA ........................................................................................... 14
CONTROLE DE CONCORRÊNCIA ...................................................................................... 15
SEGURANÇA ........................................................................................................................... 16
RESTRIÇÕES DE INTEGRIDADE ........................................................................................ 17
ACESSO CONTROLADO ....................................................................................................... 17REPLICAÇÃO (Total e Parcial) .............................................................................................. 20
Visão geral da replicação .................................................................................................... 20
Como funciona a replicação ............................................................................................... 21
CLUSTER .................................................................................................................................. 22
NDB ........................................................................................................................................ 22
Arquitetura ............................................................................................................................. 24
Replicação ............................................................................................................................. 24
Particionamento de dados horizontal ................................................................................ 24
Hybrid Storage ...................................................................................................................... 25
APIs SQL e NoSQL .............................................................................................................. 26
Implementação ..................................................................................................................... 26
CONSIDERAÇÕES FINAIS .................................................................................................... 28
REFERÊNCIAS .................................................................................................................... 29
8/17/2019 SGBD_Atualizado
4/30
4
INTRODUÇÃODevido a disciplina de sistemas de gerenciamento de banco de dados
(SGBD), e as inúmeras ferramentas de armazenamento de dados disponíveis
no mercado, escolhemos o MySQL. Uma ferramenta Open Source atualmente
da Oracle sua concorrente paga. Estaremos estudando seu funcionamento e
as suas características “internas” que a cercam.
OBJETIVOO objetivo do trabalho é fazer uma pesquisa mais a fundo sobre o SGBD
do MYSQL, entendendo como trabalha, como se comporta internamente, quais
suas necessidades e possibilidades de uso. Buscamos entender o porque ela étão usada no mercado diante de um mercado tão amplo.
BANCO DE DADOS MYSQL
Definição:
O MySQL é um sistema gerenciador de banco de dados relacional de
código aberto usado na maioria das aplicações gratuitas para gerir suas bases
de dados. O serviço utiliza a linguagem SQL (Structure Query Language –
Linguagem de Consulta Estruturada), que é a linguagem mais popular para
inserir, acessar e gerenciar o conteúdo armazenado num banco de dados.
É um dos sistemas de banco de dados Open Source mais populares no
mundo.
Gravação e Fragmentação do Dado:
O MySQL faz o armazenamento de cada banco de dados como um
subdiretório do seu diretório principal.
8/17/2019 SGBD_Atualizado
5/30
5
Figura 1: Armazenamento dos bancos de dados no diretório principal
Fonte: Os autores.
Ao criar uma tabela, o MySQL armazena a definição da tabela em um
arquivo (.frm) como o mesmo nome da tabela. Por exemplo, ao criar uma
tabela chamada cliente, o MySQL armazena a definição da tabela como
cliente.frm. Ou um diretório com o nome do banco e os arquivos de cada tabela
no banco de dados específico.
Figura 2: Banco de dados sshop
Fonte: Os autores.
8/17/2019 SGBD_Atualizado
6/30
6
Assim como vários sistemas de arquivos GNU/Linux, possui várias
ferramentas de armazenamento. Cada uma dessas ferramentas possui suas
particularidades, o servidor de banco de dados se comunica através delas
transparentemente com as aplicações na camada de consultas.
As ferramentas de armazenamento não interpretam SQL* nem se
comunicam umas com as outras, elas simplesmente respondem às requisições
do servidor.
A ENGINE MyISAMO MyISAM oferece um bom acordo entre desempenho e características
úteis, como indexação de texto completo, compactação e funções espaciais
(GIS).
No disco, o MySQL representa cada tabela MyISAM usando três arquivos:
um arquivo de formato que armazena a definição da estrutura da tabela, um
aquivo de dados que armazena o conteúdo das tuplas da tabela e um arquivo
de index que armazena cada índice da tabela. A saber, o formato, os dados e
os arquivos de índices para uma tabela chamda “tabelaexemplo”, são gerados
os arquivos “tabelaexemplo.frm”, “tabelaexemplo.MYD” e “tabelaexemplo.MYI”.
Figura 3: Tabela MyISAM - diretório
Fonte: Os autores.
Principais Características da Engine MyISAM
• MyISAM tem o manipulador de colunas AUTO_INCREMENT mais
flexível dentre todos os mecanismos de armazenamento.
8/17/2019 SGBD_Atualizado
7/30
7
• Tabelas MyISAM podem ser convertidas de forma rápida,
comprimidas e definidas como somente leituras para salvar espaço
em disco. MyISAM bloqueia tabelas inteiras, não linha.
• É possível inserir novas linhas na tabela enquanto consultas
selecionadas estão rodando nela (inserções concorrentes).
• Certos modificadores de programação são permitidos para alterar
as prioridades de requisições, LOW_PRIORITY, HIGH_PRIORITY
e DELAYED. MySQL suporta checagem e reparação de tabelas
MyISAM.
• Os comandos usados para checar os erros de uma tabela e
consertá-los são CHECK TABLE mytable e REPAIR table.
Também é possível usar a ferramenta de linha de comando
myisamchk para checar e reparar tabelas quando o servidor estiver
off-line.
• Você pode criar índices nos primeiros 500 caracteres das colunas
BLOB e TEXT nas tabelas MyISAM.
• O MyISAM suporta índices de textos completos FULLTEXT e tipo
de dados espaciais, o que indexa palavras individuais para
operações complexas de busca.
A ENGINE INNODBInnoDB foi desenvolvido para processamento de transação,
principalmente para o processamento de muitas transações de vida curta. Seu
desempenho e recuperação de travamento automático também o tornam
popular para armazenamentos não-transacional.
O InnoDB utiliza arquivos para a armazenamento conhecidos comotablespace. Uma tablespace é gerenciado unicamente pelo InnoDB sozinho.
Para as altas concorrências ele usa MVCC (Controle de Concorrência de
versão múltipla) com os quatro níveis de isolamento padrão do SQL. Tabelas
InnoDB são construídas em um índice agrupado, as estruturas de índice do
InnoDB são muito diferentes das estruturas da maioria das outras ferramentas
de armazenamento do MySQL. Como um resultado, ele oferece buscas de
chave primária muito rápida.
8/17/2019 SGBD_Atualizado
8/30
8
Figura 4: Tabela InnoDB - Diretório
Principais Características da Engine InnoDB
• Cada tabela InnoDB é representada no disco por um arquivo .frm
no diretório principal do banco de dados, assim como os dados e
índices são armazenados no tablespace InnoDB. • O InnoDB tem suporte a transações, com commit e rollback. Isto
fornece atomicidade, consistência, nível de isolamento e
durabilidade dos dados. Múltiplo versionamento é usado para isolar
uma transação de outra.
• InnoDB fornece auto recuperação em caso de queda do servidor
ou do host em que o servidor esteja rodando.
• O MySQL gerencia querys de contenções para tabelas InooDB
usando múltiplos versionamentos em conjunto com o bloqueio de
linhas em nível. Assim, cada transação tem sua própria visão do
banco de dados e mantém o nível de contenção no mínimo. O
resultado é uma boa manipulação de concorrência, mesmo que um
cliente faça um mix de consultas e escritas no banco.
• InnoDB suporta chaves estrangeiras e integridade referencial,
incluindo deletes e updates em cascatas.
• O formato de armazenamento em tablesapace pode ser portátil em
algumas situações, dessa forma o InnoDB pode ser copiado diretamente
para outro host e usando pelo servidor.
Considerações sobre as ferramentas:
• Se sua aplicação exigir transações, InnoDB é a escolha mais
comprovada, estável e bem integrada.
8/17/2019 SGBD_Atualizado
9/30
9
• MyISAM é uma boa escolha se uma tarefa não exigir transações e
realizar primariamente consultas SELECT ou INSERT.
• Tabelas MyISAM geralmente se corrompem mais facilmente e
demoram mais para recuperar-se do que tabelas InnoDB.
• Somente MyISAM suporta indexações Geoespacial e FULLTEXT
no MySQL.
• Somente InnoDB trabalha em conformidade com a ACID.
FRAGMENTAÇÃO DO MYSQLNo MySQL, quando você excluir registros de um espaço de tabela não é
remapeado automaticamente. O problema com isto é que se uma tabela de
executar muitas operações DELETE, o espaço físico da mesa será cada vez
mais fragmentado e reduzido desempenho.
Para a correção deste problema também usamos as ferramentas MyISAM
ou InnoDB, ambas ao executar o comando OPTIMIZE TABLE, fazem
uma desfragmentação automática da tabela corrigindo este problema.
É altamente recomendável usar este comando periodicamente,
especialmente em tabelas que são mais declarações de exclusão de registros.
Nas tabelas MyISAM o OPTIMIZE TABLE faz o seguinte:
Se a tabela tem linhas deletadas ou divididas, repara a tabela.
Se as páginas de índice não estão organizadas, as organiza.
Se as estatísticas da tabela não estão atualizadas (e a reparação não
pode ser completada organizando o índice), as atualiza.
Para tabelas InnoDB, o OPTIMIZE TABLE é ligado ao ALTER TABLE,
que recria a tabela para atualizar as estatísticas do índice e liberar espaço não
utilizado no índice clusterizado.
Comando SQL para verificar quais as tabelas mais fragmentadas:
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH, DATA_FREE, (DATA_FREE*100/DATA_LENGTH) as PRC FROM INFORMATION_SCHEMA.TABLES WHERE (DATA_FREE*100/DATA_LENGTH);
O comando acima mostra no campo PRC o percentual de fragmentaçãolevando em consideração o 'DATA_LENGTH' e o 'DATA_FREE', teoricamente
quanto maior o datafree mais fragmentada está a tabela, porém este comando
8/17/2019 SGBD_Atualizado
10/30
10
mostra também as tabelas InnoDB, onde o 'datafree' pode ter um valor maior efixo, isto não indica fragmentação.
Para verificar as engines das tabelas e também poder visualizar o
'DATA_FREE' você pode rodar o seguinte comando:SHOW TABLE STATUS;
Qualquer valor no campo 'DATA_FREE' das tabelas MyIsam é indício defragmentação.
CONSULTA DE DADOS E ÍNDICES Para realizar consultas no banco de dados MYSQL usamos o comando
SELECT com as declarações dos dados que buscamos, podemos tambémrefinar essa consulta através da inclusão de funções na declaração original.
A forma básica das consultas é:
“SELECT * FROM projetos”
Fonte: ELIAS PRACIANO OS TUTORIAIS DO GEEK de março/2014 . Disponível em:
. Acesso em: 11 mai. 2016.
Essa consulta retornará todas as colunas e linhas contidas na tabela.
Partindo desse princípio podemos ir refinando a consulta declarando os
campos que desejamos que sejam mostrados como a seguir:
“SELECT id_projeto, nome_projeto FROM projetos”
Figura 5 - Resultado do Select na tabela projetos – Maio/2016
https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/http://wiki.locaweb.com.br/pt-br/Arquivo:Right-arrow-32.png
8/17/2019 SGBD_Atualizado
11/30
11
Figura 6 - Resultado do Select na tabela projetos selecionando campos específicos – Maio/2016
Fonte: ELIAS PRACIANO OS TUTORIAIS DO GEEK de março/2014. Disponível em:
. Acesso em: 11 mai. 2016.
Logo essa consulta mostrará apenas duas colunas com seu dados, o
id_projeto e o nome_projeto. Utilizando a Cláusula condicional (WHERE) nasconsultas, obtemos um resultados mais objetivo ainda como veremos abaixo:
“SELECT id_projeto, nome_projeto FROM projetos WHERE nome_projeto =
“ Aylmer ”;
Figura 7 - Resultado do Select na tabela projetos com WHERE – Maio/2016
Fonte: ELIAS PRACIANO OS TUTORIAIS DO GEEK de março/2014. Disponível em:
. Acesso em: 11 mai. 2016.
Logo obtemos todos os projetos cujo nome é Aylmer. Abaixo um exemplo
do uso do (LIKE) que recebe um termo parcial para a busca e retorna todos os
nome_projeto que iniciem com o termo passado para a consulta.
SELECT nome_projeto FROM projetos WHERE nome_projeto LIKE
'Mo%';
https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/
8/17/2019 SGBD_Atualizado
12/30
12
Fonte: ELIAS PRACIANO OS TUTORIAIS DO GEEK de março/2014. Disponível em:
. Acesso em: 11 mai. 2016.
Existem outras funções que poderão ser introduzidas para adequar daforma mais clara as consultas a serem realizadas, e retornar os resultados
mais precisos possíveis juntamente com a lógica aplicada.
Continuaremos falando sobre consultas a seguir, porém, introduziremos o
conceito de índices no assunto.
No banco de dados MySQL os índices podem ser criados com
considerável facilidade, tanto no momento da concepção da tabela quanto em
uma tabela já existente.Primeiramente veremos como criar o índice junto com a tabela.
CREATE TABLE CLIENTES(
Codigo INT,Nome VARCHAR(50),INDEX (Codigo)
);
Caso já possua a tabela sem o índice, é possível introduzir posteriormenteatravés do comando CREATE:
CREATE INDEX idx_CLIENTES_CODIGO ON CLIENTES(Codigo);Ou ALTER TABLE tabela ADD INDEX(campo1,campo2,campo3);
Com índices no banco de dados posso aumentar a velocidade das minhas
consultas em 100 vezes e em alguns casos muito mais do que isso. Mas é
preciso ter cuidado ao criá-los, pois para cada inclusão ou atualização feita nobanco de dados o índice também precisa ser atualizado.
Figura 8 - Resultado do Select na tabela projetos com Where e Like – Maio/2016
https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/
8/17/2019 SGBD_Atualizado
13/30
13
Como boa prática é recomendada utilizar índices em campos como: data,
número e strings pequenos, pois para cada consulta, o MySQL seleciona o
melhor índice a partir de critérios por ele definidos.
METADADOS E DICIONÁRIOS DE DADOSQuando falamos de “metadados”, estamos falando sobre os dados sobre
outros dados, assim sendo, qualquer coisa que descreva os bancos de dados,
como o oposto de ser o conteúdo do banco de dados, é metadados. Assim
nomes de colunas, banco de dados, usuários, versões e a maioria dos
resultados strings de SHOW, são metadados.
No MySQL os metadados tratados estão disponíveis na
information_schema, o manuseio dos metadados é tarefa do DBA.
A information_schema é a estrutura de dicionário de dados utilizada pelo
MySQL, funcionando como um repositório central para metadados de qualquer
banco de dados.
Na information_schema podemos ter:
Todo schema de objetos.
Estatística do Servidor(Conexões, uso de CPU, Bytes enviados e
recebidos).
Privilégios.
Store procedure e Views.
Podemos acessar os information_schemas de duas formas, uma dela sé
através do comando SELECT. Exemplos abaixo:
SELECT * FROM information_schema.tables WHERE table_schema =
nome_da_database'
SELECT * FROM information_schema.columns WHERE table_name =
'nome_da_tabela'
SELECT * FROM information_schema.views
Ou através dos comandos show e desc, também podemos obter os
metadados de uma forma mais fácil no MySQL.
Algumas instruções SHOW suportadas no MySQL:
8/17/2019 SGBD_Atualizado
14/30
14
show databases: Lista o nome das bases disponíveis
show tables: Lista as tabelas do banco atual
show tables from nomedabase: Lista as tabelas do banco especificado
na consulta, sem precisar de um use. show columns from table_name ou desc table_name: Exibe a
estrutura da coluna para aquela tabela
show index from table_name: Exibe as informações sobre os indices e
a coluna indexada na tabela
show create table: Exibe o esqueleto da tabela, a forma da qual ela foi
criada.
Existe também o cliente mysqlshow, que pode ser utilizada no shell para
retornar a lista das bases de dados disponíveis. Exemplo:
Figura 9 - Resultado do comando mysqlshow – Maio/2016
Fonte: SQL PARA TODOS de agosto/2015. Disponível em:
. Acesso em: 11 mai.
2016.
REDUNDÂNCIA CONTROLADAO MySQL desenvolveu uma solução conhecida como MySQL Cluster,
que consiste em prover capacidade de fail-over automático com o intuito de
prover alta disponibilidade para o banco de dados. Vale destacar que o
termo fail-over significa que havendo problema em um dos componentes
do cluster , outro elemento o substituirá imediatamente, mantendo todo o
sistema em operação como se nada tivesse ocorrido.
https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/
8/17/2019 SGBD_Atualizado
15/30
15
CONTROLE DE CONCORRÊNCIANo Mysql o controle de concorrência é feito em dois níveis: no nível do
servidor e no nível da ferramenta de armazenamento. Como vimos
anteriormente as ferramentas de armazenamento transacionais do MySQL,
como InnoDB, Falcon e PBXT, não usa um simples mecanismo de bloqueio de
linha. Em seu lugar, elas usam um bloqueio em nível de linha em conjunto com
uma técnica para aumentar concorrência conhecida como controle de
concorrência de versão múltipla (MVCC).
MVCC funciona mantendo um snapshot dos dados como eles existiam
em algum ponto no tempo. Isso significa que transações podem enxergar uma
visualização consistente dos dados, não importa quanto
tempo elas executem. Também significa que diferentes transações podem ver
dados diferentes nas mesmas tabelas ao mesmo tempo.
Cada ferramenta de armazenamento implementa MVCC de maneira diferente.
Temos o exemplo de uso do MVCC explicando o comportamento do InnoDB.
InnoDB implementa MVCC armazenando em cada linha dois valores
adicionais, escondidos, que registram quando a linha foi criada e quando ela
expirou (ou foi deletada). Em vez de armazenar os horários reais que estes
eventos ocorreram, a linha armazena o número da versão do sistema na horaem que o evento ocorreu. Este é um número que incrementa toda vez que uma
transação começa. Cada transação mantém seu próprio registro da versão do
sistema atual, na data em que ele iniciou. Toda consulta tem de checar os
números de versão de cada linha em relação à versão da transação.
SELECT
InnoDB deve examinar cada linha para garantir que ela se adapte a doiscritérios:
• InnoDB deve encontrar uma versão da linha que é no mínimo tão velha
quanto a transação (por exemplo, sua versão deve ser menor ou igual à versão
da transação). Isso garante que a linha existia antes da transação começar, ou
que a transação criou ou alterou a linha.
• A versão de apagamento da linha deve ser indefinida ou maior do que a
versão da transação. Isso garante que a linha não foi deletada antes datransação iniciar.
8/17/2019 SGBD_Atualizado
16/30
16
Linhas que passam nos dois testes podem ser retornadas como o resultado da
consulta.
INSERT
InnoDB registra o número da versão do sistema atual com a nova linha.
DELETE
InnoDB registra o número da versão do sistema atual como o ID de
apagamento da linha.
UPDATE
InnoDB escreve uma nova cópia da linha, usando o número da versão do
sistema para a versão da nova linha. Ele também escreve o número da versão
do sistema com a versão de apagamento da velha linha.
SEGURANÇA O MySQL implementa um sistema de autenticação bastante robusto que
é realizado em dois estágios. O primeiro verifica se o usuário pode conectar ao
banco de dados e o segundo verifica se o usuário tem privilégios para realizar
operações no banco de dados. O segundo estágio, portanto, é verificado a
cada operação realizada pelo usuário.
Este sistema de privilégios é armazenado usando a própria estrutura do
sistema em um banco de dados especial chamado mysql e deve ter o acesso
permitido apenas para o usuário root.
Para aceitar a conexão de um usuário, o MySQL não considera apenas o
próprio usuário, mas também a máquina de onde o usuário está conectando.Dessa forma, você pode permitir o acesso de um determinado usuário somente
de algumas máquinas específicas, bloqueando seu acesso de outros hosts que
podem não ser confiáveis.
Existem duas maneiras de conceder privilégios aos usuários: usando os
comandos GRANT e REVOKE, ou alterando diretamente as tabelas do banco
de dados mysql. A melhor escolha é usar os comandos GRANT/REVOKE, pois
o MySQL já altera as tabelas automaticamente, não sendo necessário entenderem detalhes o significado de cada tabela e suas respectivas colunas. Se você
8/17/2019 SGBD_Atualizado
17/30
17
alterar os privilégios manual- 3 Segurança com o MySQL mente além do risco
de manipular dados de forma errada, vocé pode se esquecer de executar o
comando FLUSH PRIVILEGES para tornar as alterações ativas. Veremos um
pouco mais no capitulo “Acesso Controlado”.
RESTRIÇÕES DE INTEGRIDADEO InnoDB implementa as restrições de
integridade CASCADE, RESTRICT, SET NULL e SET DEFAULT. No primeiro
caso, ao se remover um registro da tabela referenciada pela chave estrangeira
os registros relacionados àquele removido serão eliminados em todas as
tabelas relacionadas. ORESTRICT não permite a remoção de registros que
possuam relacionamentos em outras tabelas. Os dois últimos atribuem os
valores DEFAULT ou NULL para as chaves estrangeiras cujos registros
relacionados foram excluídos.
ACESSO CONTROLADOO MySQL possui um mecanismo que permite limitar o acesso de um
usuário a apenas um banco, tabela ou coluna, além de poder controlar o
acesso de acordo com o host a partir de onde está sendo feita a conexão com
o servidor. Pode-se ainda, conceder privilégios diferentes para cada host de
onde o usuário possa estabelecer a conexão.
O MySQL armazena as informações dos seus usuários em 4 tabelas que
estão localizadas no banco de dados mysql. Estas tabelas são
a user , db, tables_priv e columns_priv. A tabela user armazena as
informações de todos os usuários do banco e os privilégios globais deste
usuário. A tabela db armazena os privilégios dos usuários específicos de um
banco de dados. Finalmente, as tabelas tables_priv e columns_priv armazenam
os privilégios associados a tabelas e colunas, respectivamente. Como estas
tabelas possuem as informações dos usuários, bem como os seus privilégios,
recomenda-se que apenas o administrador do banco de dados tenha acesso
ao banco mysql (usuário root).
8/17/2019 SGBD_Atualizado
18/30
18
Para criar usuários e conceder privilégios no MySQL, utiliza-se o comando
GRANT. Ao executar um comando GRANT para um usuário que não existe, o
mesmo será criado. Exemplo abaixo:
GRANT priv [(colunas)] [, priv [(colunas)]] ...
ON {*.* | db.* | db.tabela}
TO usuario [IDENTIFIED BY 'senha']
[, usuario [IDENTIFIED BY 'senha']] ...
[WITH [GRANT OPTION |
MAX_QUERIES_PER_HOUR contador |
MAX_UPDATES_PER_HOUR contador |
MAX_CONNECTIONS_PER_HOUR contador]]
A lista de privilégios existentes no MySQL é descrita abaixo:
Privilégio Descrição
ALL [PRIVILEGES] Todos os privilégios exceto GRANT OPTION
ALTER Permite executar ALTER TABLE
CREATE Permite executar CREATE TABLE
CREATE TEMPORARY
TABLES
Permite executar CREATE TEMPORARY TABLES
DELETE Permite executar DELETE
DROP Permite executar DROP TABLE
EXECUTE Permite executar STORE PROCEDURES
FILE Permite executar SELECT... INTO OUTFILE E
LOAD DATA INFILE
INDEX Permite executar CREATE INDEX e DROPINDEX
INSERT Permite executar INSERT
LOCK TABLES Permite executar LOCK TABLES em tabelas que
tenha privilégio SELECT
PROCESS Permite executar SHOW FULL PROCESSLIST
REFERENCES Ainda não está implementado
RELOAD Permite executar o FLUSH
REPLICATION CLIENT Permite ao usuário obter a localização do
8/17/2019 SGBD_Atualizado
19/30
19
Master ou Slave
REPLICATION SLAVE Necessário para replicação Slave(leitura dos
eventos do log binário do Master)
SELECT Permite executar SELECT
SHOW DATABASES Exibe todos os bancos
SHUTDOWN Permite executar mysqladmin shutdown
SUPER Permite executar CHANGE MASTER, KILL,
PURGE MASTER LOGS E SET GLOBAL. Permite
conectar-se ao servidor uma vez, mesmo que o
max_connections tenha sido atingido
UPDATE Permite executar o UPDATE
USAGE Sinônimo para “NO Privileges”
GRANT OPTION Permite ao usuário repassar os seus privilégios
Uma vez informados os privilégios do usuário, você deverá indicar o nível
ao qual o privilégio se aplica, sendo possível especificar três níveis:
*.* Privilégio Global
Db.* Qualquer tabela no banco db
Db.tb Apenas a tabela tb do banco de dados db. Para especificar apenasuma determinada tabela, estas deverão ser listadas ao lado do
privilégio. (priv(colunas))
Depois do nível você deverá indicar o usuário, ou a lista de usuários, para
os quais os privilégios se aplicam (user@host).
Exemplos:
No exemplo a seguir é criado um usuário com o nome teste que pode seconectar somente do host onde o servidor está em execução (localhost), o
usuário só poderá fazer SELECT nas colunas nome e idade da tabela pessoa,
que se encontra no banco de dados rh. A senha do usuário é 12345.
mysql>GRANT SELECT (nome, idade) ON rh.pessoa TO teste@localhost
IDENTIFIED BY "12345";
Para listar os privilégios deste usuário utilize o comando:
mysql>SHOW GRANTS FOR teste@localhost;
8/17/2019 SGBD_Atualizado
20/30
20
O usuário remoto poderá executar UPDATE e INSERT em qualquer
tabela do banco de dados rh, sendo possível a conexão ao servidor a partir de
qualquer máquina utilizando IP:
mysql>GRANT UPDATE, INSERT ON rh.* TO
remoto@"200.236.13.%" IDENTIFIED BY "remoto";
Para remover um privilégio do usuário utilize o comando REVOKE
mostrado abaixo:
REVOKE priv [(colunas )] [, priv [(colunas )]] ...
ON {*.* | db.* | db.tabela }
FROM usuar io [, usuar io ] ...
REPLICAÇÃO (Total e Parcial)O objetivo de um mecanismo de replicação de dados é permitir a
manutenção de várias cópias idênticas de um mesmo dado em vários
servidores de bancos de dados (SGBD). Os principais benefícios da replicação
de dados são a redundância, o que torna o sistema tolerante a falhas, a
possibilidade de um balanceamento de carga do sistema, já que o acesso pode
ser distribuído entre as réplicas, e finalmente, ter-ser o backup online dos
dados, já que todas as replicas estariam sincronizadas. Este artigo, apresenta
uma introdução ao mecanismo de replicação do MySQL, bem como as
configurações básicas para realização desta tarefa.
Visão geral da replicaçãoO MySQL permite um tipo de replicação conhecido como Master-Slave,
onde temos um servidor atuando como master e um ou mais servidores
atuando como slave. O master grava em um log binário de alteração todos os
comandos de atualizações da base de dados. Desta forma, todas as alterações
ocorridas no master são imediatamente replicadas para os outros servidores
slave.
A replicação no mysql é principalmente compatível com a anterior, isto é,
um servidor mais novo pode normalmente ser um escravo de um servidor mais
velho sem nenhum problema. Porém, versões mais antigas dos servidores são,
freqüentemente, incapazes de servir como slaves de versões mais novas, pois
8/17/2019 SGBD_Atualizado
21/30
21
eles não podem entender novas características ou a sintaxe SQL que o
servidor mais novo utiliza, e pode haver diferenças no formato dos arquivos
que a replicação usa, por exemplo, você não pode replicar de um master
MySQL 5.0 para um slave MySQL 4.0.
Com a replicação você possui uma série de vantagens como:
Equilíbrio de carga: a replicação, geralmente não precisa de uma largura
de banda muito intensiva, você pode inicia e parar conforme a sua vontade e o
slave pode trabalhar distante do master.
Distribuição de dados: a replicação pode ajudar a distribuir as consultas
de leitura através de diversos servidores, ou seja, o mesmo dado pode está
armazenados em todos os servidores envolvidos da replicação.
Backup: a replicação é uma técnica valiosa para ajudar com backups,
porém um slave não é nem um backup nem um substituto para backups.
Alta disponibilidade: se um servidor falhar tem outro servidor para suprir
aquele servidor que falhou.
Como funciona a replicaçãoO MySQL realiza a replicação em um simples processo de três fases, a
Figura 1 ilustra a replicação com mais detalhes:
Fonte: SQL PARA TODOS de agosto/2015. Disponível em:
. Acesso em: 11 mai.
2016.
O master registra alterações aos seus dados no seu log binário (estes
registros são chamados de evento de log binário): antes de cada transação que
Figura 10 - Replicação em três fases – Maio/2016
https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/
8/17/2019 SGBD_Atualizado
22/30
22
atualiza dados no master, o mesmo registra as alterações no seu log binário,
ou seja, o mysql escreve as transações no seu log binário e logo em seguida o
master diz as ferramentas de armazenamento para comitar as transações.
O slave copia os eventos de log binário do master no seu relay log (log de
vigilância): o servidor slave, através de uma thread de I/O, abre uma conexão
com o master e logo inicia o processo de esvaziamento de binlog. O
esvaziamento de binlog consiste na leitura do evento a partir do log binário do
master. A Thread de I/O escreve os eventos no relay log do slave.
O slave repete aos eventos no relay log: a thread lê e repete eventos a
partir do relay log, dessa forma atualizando os dados do slave para
combinarem com os do master.
CLUSTER Foi projetado para proporcionar alta disponibilidade e alto rendimento
com baixa latência, permitindo simultaneamente uma escalabilidade quase
linear. MySQL Cluster é implementado através do mecanismo de
armazenamento NDB ou NDBCLUSTER para MySQL ("NDB" Network
Database).
NDBNDB Cluster é o sistema de banco de dados distribuído subjacente
MySQL Cluster. Ele pode ser usado de forma independente de um servidor
MySQL com os usuários acessando o Cluster através da API NDB (C ++).
"NDB" significa banco de dados de rede.
Do ponto de vista do servidor MySQL Cluster NDB é um mecanismo de
armazenamento para armazenar tabelas de linhas.
Do ponto de vista Cluster NDB, uma instância MySQL Server é um
processo de API conectado ao cluster. NDB Cluster pode suportar
simultaneamente o acesso de outros tipos de processos de API, incluindo
Memcached, JavaScript / Node.js, Java, JPA e HTTP / REST. Todos os
processos de API podem operar com as mesmas tabelas e os dados
armazenados no Cluster NDB.
8/17/2019 SGBD_Atualizado
23/30
23
Ndb Cluster tem a seguinte capacidade independente de qualquer
servidor MySQL:
Persistente, armazenamento distribuído de tabelas com índices
exclusivos ou encomendados.
Redo logging, pontos de verificação, a recuperação do sistema.
Auto-sharding de tabelas em todos os nós de dados.
Hashing parcial ou total de chaves primárias.
Chave primária, chave única, varredura da tabela e verificação de índice
ordenado.
Execução da varredura paralelo com filtros "pushed-down '
Bloqueios de linha, atualizações transacionais.
Replicação de dados síncrona dentro do cluster, fechamento automático
+ recuperação
Fechamento de conexão automática para os processos de 'API' tipos de
dados SQL padrão, incluindo Blobs etc.O armazenamento de dados em disco e alteração de dados assíncrona,
mecanismo de gatilhos(triggers) operações DDL (embora DDL independente
não vai ser actualmente reconhecido por qualquer servidor MySQL) Adição de
Index Online , alteração de tabelas online
Adição de nós Online e reorganização de tabelas, backup on-line e atualização
on-line.
MySQL Cluster atualmente usa o servidor MySQL para fornecer as seguintes
capacidades em cima do Ndb Cluster:
SQL parsing / otimização / capacidade de execução.
Conectores para aplicações via JDBC, ODBC ...
Cross-tabela de junção mecanismo.
Autenticação e autorização.
Replicação assíncrona de dados para outros sistemas.
8/17/2019 SGBD_Atualizado
24/30
24
ArquiteturaMySQL Cluster é projetado em torno de uma arquitetura multi-mestre
distribuído, compatível com ACID. MySQL Cluster usa particionamento
automático para dimensionar operações de leitura e escrita e pode ser
acessada via SQL e não-SQL (NoSQL).
ReplicaçãoInternamente o MySQL Cluster usa replicação síncrona através de um
mecanismo de confirmação de duas fases, a fim de garantir que os dados
serão gravados em vários nós ao "commitar" os dados. (em contraste com o
que é usualmente referido como "replicação MySQL", que é assíncrona.) Duas
cópias (réplicas) conhecidas como as de dados são necessárias para garantir a
disponibilidade. MySQL Cluster cria automaticamente "grupos de nós" a partir
do número de réplicas e nós de dados especificados pelo usuário. As
atualizações são sincronicamente replicado entre os membros do grupo de nós
para proteger contra perda de dados e rápido suporte entre falhas nos nós.
Também é possível replicar de forma assíncrona entre agregados; esta é
muitas vezes referida como "Replicação MySQL Cluster" ou "replicação
geográfica". Isso normalmente é usado para replicar grupos entre os centros dedados para recuperação de desastres ou para reduzir os efeitos da latência da
rede, localizando os dados fisicos mais perto de um conjunto de usuários. Ao
contrário de replicação do MySQL padrão, a replicação geográfica do MySQL
Cluster usa controle de concorrência otimista(1).
(1) No controle de simultaneidade otimista, os usuários não bloqueiam os
dados quando os lêem. Quando um usuário atualiza os dados, o sistema
verifica se outro usuário alterou os dados depois de lidos. Se outro usuário tiveratualizado os dados, um erro é ativado
A partir do MySQL Cluster 7.2, suporte para a replicação síncrona entre os
centros de dados foi suportado com o recurso multi-site Clustering.
Particionamento de dados horizontalMySQL Cluster é implementado como um banco de dados multi-master
totalmente distribuído assegurando atualizações feitas por qualquer aplicação
8/17/2019 SGBD_Atualizado
25/30
25
ou nó SQL que estão disponíveis imediatamente para todos os outros nós que
acessam o cluster, e cada nó de dados pode aceitar operações de gravação.
Os dados dentro das tabela MySQL Cluster tabelas (NDB) é particionado
automaticamente em todos os nós de dados no sistema. Isso é feito com baseem um algoritmo de hash com base na chave primária na tabela, e é
transparente para a aplicação final. MySQL Cluster é capaz de suportar
consultas entre fragmentos e transações.
Os usuários podem definir seus próprios esquemas de particionamento. Isso
permite aos desenvolvedores adicionar "consciência de distribuição" para
aplicações por partição com base em uma sub-chave que é comum a todas as
linhas que está sendo acessado por meio de operações de funcionamento
elevados. Isso garante que os dados utilizados para completar as transacções
é localizada sobre o mesmo fragmento, reduzindo assim picos na rede.
Hybrid StorageMySQL Cluster mantém todas as colunas indexadas em memória distribuída.
colunas não indexadas também pode ser mantido na memória distribuída ou
pode ser mantido no disco com um cache de página na memória. Armazenar
colunas não indexadas no disco permite MySQL Cluster armazenar conjuntos
de dados maiores do que a memória total de máquinas em cluster.
MySQL Cluster escreve redo logs em disco para todas as alterações de dados,
bem como dados de verificação apontando para o disco regularmente. Isso
permite o cluster recuperar os dados de forma consistente a partir do disco
após uma queda completa de cluster. À medida que os redo logs são escritos
de forma assíncrona em relação à transação de confirmação, um pequeno
número de transações podem ser perdidos se o cluster falhar por completo, no
entanto, isso pode ser atenuado pelo uso de replicação geográfica ou cluster
multi-site discutido acima. Geralmente o atraso de gravação assíncrona padrão
é 2 segundos, e é configurável.
Quando uma tabela MySQL Cluster é mantida na memória, o cluster só irá
acessar armazenamento em disco para escrever registros de Redo e
checkpoints. Como essas gravações são sequenciais e acesso aleatóriolimitados estão envolvidos, MySQL Cluster pode alcançar taxas de
8/17/2019 SGBD_Atualizado
26/30
26
transferência de gravação mais elevadas com hardware disco limitado em
comparação com um tradicional caching RDBMS baseada em disco. Este
ponto de verificação no disco de dados da tabela em memória pode ser
desativado (em uma base por tabela) se a persistência baseada em disco não
é necessário.
APIs SQL e NoSQLComo o MySQL Cluster armazena tabelas em nós de dados, em vez de
MySQL Server, existem várias interfaces disponíveis para acessar o banco de
dados:
Acesso SQL através do servidor MySQL.
APIs NoSQL onde as bibliotecas Cluster MySQL podem ser incorporadas em
um aplicativo para fornecer acesso direto aos nós de dados, sem passar por
uma camada de SQL. Esses incluem:
memcached
Node.js / JavaScript
Java e JPA
HTTP / REST
NDB API (C ++)
ImplementaçãoMySQL Cluster usa três tipos diferentes de nós (processos):
Nó de dados (Data Node) (ndb d / processo ndbmtd ): Esses nós armazenar
os dados. As tabelas são automaticamente compartilhadas entre os nós dedados que também tratam de forma transparente o balanceamento de carga,
replicação, failover e auto-cura(SELF-HEALT).
nó de gerenciamento (Management Node) (processo ndb_mgmd): Utilizado
para configuração e monitoramento do cluster. Eles são necessários apenas
para iniciar ou reiniciar um nó de cluster. Eles também podem ser configurados
como árbitros, mas isto não é obrigatório (Servidores MySQL pode ser
configurado como árbitros em vez disso).
8/17/2019 SGBD_Atualizado
27/30
27
nó do apl icat ivo ou nó SQL (App l icat ion node or Sql Node) (processo
mysqld) : Um servidor MySQL (mysqld) que se conecta a todos os nós de
dados a fim de realizar o armazenamento e recuperação de dados. Este tipo de
nó é opcional; é possível consultar os nós de dados diretamente através da API
NDB, nativamente usando a API C ++ ou uma das APIs NoSQL adicionais
descritos acima.
Geralmente, espera-se que cada nó será executado em um host físico
separado, VM ou instância de nuvem (embora seja muito comum a co-localizar
nós de gerenciamento com servidores MySQL). Para as melhores práticas,
recomenda-se não co-localizar nós dentro do mesmo grupo de nós em um
único host físico (como que representaria um único ponto de falha).
Arquitetura de 3 Camadas
Nível Externo: Como os dados são vistos por cada usuário individualmente
• Nível Interno: Como os dados são fisicamente armazenados (númerode bytes de cada campo, etc.);
• Nível Conceitual: intermediário entre os dois.
Primeiro modelo de replicação
Fonte: SQL PARA TODOS de agosto/2015. Disponível em:
. Acesso em: 11 mai.
2016.
Figura 11 - Replicação em três fases – Maio/2016
https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/
8/17/2019 SGBD_Atualizado
28/30
28
Segundo Modelo de replicação
Fonte: SQL PARA TODOS de agosto/2015. Disponível em:
. Acesso em: 11 mai.
2016.
CONSIDERAÇÕES FINAIS Com o desenvolvimento deste trabalho conhecemos mais a fundo o
SGBD do MYSQL, sua arquitetura, sua utilização e benefícios. Pudemos
conhecer como trabalha o banco em seu back-end. Vimos um pouco do
trabalho do DBA, suas responsabilidades sobre o banco. Conhecemos tambémas engines de administração do banco MYSQL (MYSAM e INNOB), vimos suas
características, suas vantagens e desvantagens.
Assim consideramos que o trabalho sobre Sistema de Gerenciamento de
banco de dados do MYSQL nos trouxe uma bagagem de informações e
conhecimento, acrescentando em nosso perfil profissional.
Figura 12 - Replicação em três fases – Maio/2016
https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/https://elias.praciano.com/2014/03/mysql-o-comando-select/
8/17/2019 SGBD_Atualizado
29/30
29
REFERÊNCIAS
DEVMEDIA. Visão Geral do Sistema de Gerenciamento de Banco de Dados MySQL. Disponívelem http://www.devmedia.com.br/visao-geral-do-sistema-de-gerenciamento-de-banco-de-dados-mysql/2981;. Acesso em: 09 mai. 2016.
PRACIANO, ELIAS. Mysql: O comando SELECT. Disponível emhttps://elias.praciano.com/2014/03/mysql-o-comando-select/; Acesso em: 09 mai. 2016.
MYSQL. 14.2.9 SELECT Syntax. Disponível emhttp://dev.mysql.com/doc/refman/5.7/en/select.html; Acesso em: 09 mai. 2016.
FERREIRA, THIAGO. Otimização de consultas MySQL. Disponível emhttp://imasters.com.br/artigo/14624/mysql/otimizacao-de-consultas-mysql-parte-01/?trace=1519021197&source=single;. Acesso em: 09 mai. 2016.
WEBGOAL. Como otimizar consultas no MySQL Análise das queries. Disponível emhttp://www.webgoal.com.br/como-otimizar-consultas-no-mysql/; Acesso em: 09 mai. 2016.
NUNES, ANDERSON. ÍNDICES MYSQL – AUMENTANDO A VELOCIDADE DAS SUAS CONSULTASEM ATÉ 100X. Disponível em https://www.profissionaisti.com.br/2011/09/indices-mysql-aumentando-a-velocidade-das-suas-consultas-em-ate-100x/; Acesso em: 09 mai. 2016.
MYSQL. 9.6. UTF8 para Metdados. Disponível emhttp://download.nust.na/pub6/mysql/doc/refman/4.1/pt/charset-metadata.html; Acesso em:09 mai. 2016.
WILSON, JOSÉ. Metadados Information_schema –
MySQL. Disponível emhttp://sqlparatodos.com.br/metadados-information_schema-mysql/; Acesso em: 09 mai.
2016.
DUARTE, EBER. Gerenciamento de Usuários e Controle de Acessos do MySQL. Disponível em
http://www.devmedia.com.br/gerenciamento-de-usuarios-e-controle-de-acessos-do-
mysql/1898; Acesso em: 05 mai. 2016.
DUARTE, EBER. Gerenciamento de usuários, privilégios e controle de acessos em MySQL.
Disponível em http://www.devmedia.com.br/gerenciamento-de-usuarios-privilegios-e-
controle-de-acessos-em-mysql/7077; Acesso em: 05 mai. 2016.
Linden , Marx Gomes Van der . MySQL: Controle de Acesso. Disponível em
http://docplayer.com.br/10947164-Mysql-controle-de-acesso.html; Acesso em: 05 mai. 2016.
DUARTE, EBER. Implementando Integridade Referencial no MySQL. Disponível em
http://www.devmedia.com.br/implementando-integridade-referencial-no-mysql/1996; Acesso
em: 09 mai. 2016.
https://elias.praciano.com/2014/03/mysql-o-comando-select/http://dev.mysql.com/doc/refman/5.7/en/select.htmlhttp://sqlparatodos.com.br/metadados-information_schema-mysql/http://www.devmedia.com.br/implementando-integridade-referencial-no-mysql/1996http://www.devmedia.com.br/implementando-integridade-referencial-no-mysql/1996http://sqlparatodos.com.br/metadados-information_schema-mysql/http://dev.mysql.com/doc/refman/5.7/en/select.htmlhttps://elias.praciano.com/2014/03/mysql-o-comando-select/
8/17/2019 SGBD_Atualizado
30/30
ATAIDES, ANDERSON PEREIRA. Segurança com o MySQL. Disponível em
http://andersonataides.tripod.com/artigos/mysqlseguro.pdf; Acesso em: 09 mai. 2016.
WEBMASTER. MySQL – Integridade Referencial. Disponível em
http://www.webmaster.pt/mysql-integridade-referencial-3598.html; Acesso em: 09 mai. 2016.
BREM, MATHIAS. Segurança no MySQL. Disponível em
http://imasters.com.br/infra/seguranca/seguranca-no-mysql-vulnerabilidades-ou-pontos-
fortes/?trace=1519021197; Acesso em: 09 mai. 2016.
LUCAS, ANDREI. MySQL: Replicação de Dados. Disponível em
http://www.devmedia.com.br/mysql-replicacao-de-dados/22923; Acesso em: 09 mai. 2016.
WIKIPEDIA. MySQL Cluster. Disponível em https://en.wikipedia.org/wiki/MySQL_Cluster;
Acesso em: 09 mai. 2016.
WIKIPEDIA. NDB Cluster . Disponível em https://en.wikipedia.org/wiki/NDB_Cluster ;
Acesso em: 09 mai. 2016.
https://en.wikipedia.org/wiki/NDB_Clusterhttps://en.wikipedia.org/wiki/NDB_Clusterhttps://en.wikipedia.org/wiki/NDB_Clusterhttps://en.wikipedia.org/wiki/NDB_ClusterRecommended