Você está na página 1de 30

UNIVERSIDADE DE SOROCABA

PR-REITORIA ACADMICA
PROGRAMA DE PS-GRADUAO EM MBA EM BUSINESS INTELLIGENCE

Everton Luiz Belarmino


Joo Paulo
Wilbert Canno

SISTEMA DE GERENCIAMENTO DE BANCO DE DADOS


MYSQL

Sorocaba/SP
2016

LISTA DE FIGURAS
Figura 1: Armazenamento dos bancos de dados no diretrio principal ....................................... 5
Figura 2: Banco de dados sshop .................................................................................................... 5
Figura 3: Tabela MyISAM - diretrio ............................................................................................. 6
Figura 4: Tabela InnoDB - Diretrio............................................................................................... 8
Figura 5 - Resultado do Select na tabela projetos Maio/2016 ................................................. 10
Figura 6 - Resultado do Select na tabela projetos selecionando campos especficos
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 - Replicao em trs fases Maio/2016 ..................................................................... 21
Figura 11 - Replicao em trs fases Maio/2016 ..................................................................... 27
Figura 12 - Replicao em trs fases Maio/2016 ..................................................................... 28

Sumrio
INTRODUO ............................................................................................................................ 4
OBJETIVO ................................................................................................................................... 4
BANCO DE DADOS MYSQL.................................................................................................... 4
Definio: ................................................................................................................................. 4
Gravao e Fragmentao do Dado: .................................................................................. 4
A ENGINE MyISAM ................................................................................................................... 6
Principais Caractersticas da Engine MyISAM................................................................... 6
A ENGINE INNODB ................................................................................................................... 7
Principais Caractersticas da Engine InnoDB .................................................................... 8
Consideraes sobre as ferramentas: ................................................................................ 8
FRAGMENTAO DO MYSQL ............................................................................................... 9
CONSULTA DE DADOS E NDICES .................................................................................... 10
METADADOS E DICIONRIOS DE DADOS ...................................................................... 13
REDUNDNCIA CONTROLADA ........................................................................................... 14
CONTROLE DE CONCORRNCIA ...................................................................................... 15
SEGURANA ........................................................................................................................... 16
RESTRIES DE INTEGRIDADE ........................................................................................ 17
ACESSO CONTROLADO ....................................................................................................... 17
REPLICAO (Total e Parcial) .............................................................................................. 20
Viso geral da replicao .................................................................................................... 20
Como funciona a replicao ............................................................................................... 21
CLUSTER .................................................................................................................................. 22
NDB ........................................................................................................................................ 22
Arquitetura ............................................................................................................................. 24
Replicao ............................................................................................................................. 24
Particionamento de dados horizontal ................................................................................ 24
Hybrid Storage ...................................................................................................................... 25
APIs SQL e NoSQL .............................................................................................................. 26
Implementao ..................................................................................................................... 26
CONSIDERAES FINAIS .................................................................................................... 28
REFERNCIAS .................................................................................................................... 29

INTRODUO
Devido a disciplina de sistemas de gerenciamento de banco de dados
(SGBD), e as inmeras ferramentas de armazenamento de dados disponveis
no mercado, escolhemos o MySQL. Uma ferramenta Open Source atualmente
da Oracle sua concorrente paga. Estaremos estudando seu funcionamento e
as suas caractersticas internas que a cercam.

OBJETIVO
O 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
to usada no mercado diante de um mercado to amplo.

BANCO DE DADOS MYSQL


Definio:
O MySQL um sistema gerenciador de banco de dados relacional de
cdigo aberto usado na maioria das aplicaes gratuitas para gerir suas bases
de dados. O servio utiliza a linguagem SQL (Structure Query Language
Linguagem de Consulta Estruturada), que a linguagem mais popular para
inserir, acessar e gerenciar o contedo armazenado num banco de dados.
um dos sistemas de banco de dados Open Source mais populares no
mundo.

Gravao e Fragmentao do Dado:


O MySQL faz o armazenamento de cada banco de dados como um
subdiretrio do seu diretrio principal.

Figura 1: Armazenamento dos bancos de dados no diretrio principal

Fonte: Os autores.

Ao criar uma tabela, o MySQL armazena a definio da tabela em um


arquivo (.frm) como o mesmo nome da tabela. Por exemplo, ao criar uma
tabela chamada cliente, o MySQL armazena a definio da tabela como
cliente.frm. Ou um diretrio com o nome do banco e os arquivos de cada tabela
no banco de dados especfico.
Figura 2: Banco de dados sshop

Fonte: Os autores.
5

Assim como vrios sistemas de arquivos GNU/Linux, possui vrias


ferramentas de armazenamento. Cada uma dessas ferramentas possui suas
particularidades, o servidor de banco de dados se comunica atravs delas
transparentemente com as aplicaes na camada de consultas.
As ferramentas de armazenamento no interpretam SQL* nem se
comunicam umas com as outras, elas simplesmente respondem s requisies
do servidor.

A ENGINE MyISAM
O MyISAM oferece um bom acordo entre desempenho e caractersticas
teis, como indexao de texto completo, compactao e funes espaciais
(GIS).
No disco, o MySQL representa cada tabela MyISAM usando trs arquivos:
um arquivo de formato que armazena a definio da estrutura da tabela, um
aquivo de dados que armazena o contedo 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, so gerados
os arquivos tabelaexemplo.frm, tabelaexemplo.MYD e tabelaexemplo.MYI.
Figura 3: Tabela MyISAM - diretrio

Fonte: Os autores.

Principais Caractersticas da Engine MyISAM

MyISAM tem o manipulador de colunas AUTO_INCREMENT mais


flexvel dentre todos os mecanismos de armazenamento.

Tabelas MyISAM podem ser convertidas de forma rpida,


comprimidas e definidas como somente leituras para salvar espao
em disco. MyISAM bloqueia tabelas inteiras, no linha.

possvel inserir novas linhas na tabela enquanto consultas


selecionadas esto rodando nela (inseres concorrentes).

Certos modificadores de programao so permitidos para alterar


as prioridades de requisies, LOW_PRIORITY, HIGH_PRIORITY
e DELAYED. MySQL suporta checagem e reparao de tabelas
MyISAM.

Os comandos usados para checar os erros de uma tabela e


consert-los so CHECK TABLE mytable e REPAIR table.
Tambm possvel 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
operaes complexas de busca.

A ENGINE INNODB
InnoDB

foi

desenvolvido

para

processamento

de

transao,

principalmente para o processamento de muitas transaes de vida curta. Seu


desempenho e recuperao de travamento automtico tambm o tornam
popular para armazenamentos no-transacional.
O InnoDB utiliza arquivos para a armazenamento conhecidos como
tablespace. Uma tablespace gerenciado unicamente pelo InnoDB sozinho.
Para as altas concorrncias ele usa MVCC (Controle de Concorrncia de
verso mltipla) com os quatro nveis de isolamento padro do SQL. Tabelas
InnoDB so construdas em um ndice agrupado, as estruturas de ndice do
InnoDB so muito diferentes das estruturas da maioria das outras ferramentas
de armazenamento do MySQL. Como um resultado, ele oferece buscas de
chave primria muito rpida.

Figura 4: Tabela InnoDB - Diretrio

Principais Caractersticas da Engine InnoDB

Cada tabela InnoDB representada no disco por um arquivo .frm


no diretrio principal do banco de dados, assim como os dados e
ndices so armazenados no tablespace InnoDB.

O InnoDB tem suporte a transaes, com commit e rollback. Isto


fornece

atomicidade,

consistncia,

nvel

de

isolamento

durabilidade dos dados. Mltiplo versionamento usado para isolar


uma transao de outra.

InnoDB fornece auto recuperao em caso de queda do servidor


ou do host em que o servidor esteja rodando.

O MySQL gerencia querys de contenes para tabelas InooDB


usando mltiplos versionamentos em conjunto com o bloqueio de
linhas em nvel. Assim, cada transao tem sua prpria viso do
banco de dados e mantm o nvel de conteno no mnimo. O
resultado uma boa manipulao de concorrncia, mesmo que um
cliente faa 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 porttil em


algumas situaes, dessa forma o InnoDB pode ser copiado diretamente
para outro host e usando pelo servidor.

Consideraes sobre as ferramentas:

Se sua aplicao exigir transaes, InnoDB a escolha mais


comprovada, estvel e bem integrada.

MyISAM uma boa escolha se uma tarefa no exigir transaes 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 indexaes Geoespacial e FULLTEXT


no MySQL.

Somente InnoDB trabalha em conformidade com a ACID.

FRAGMENTAO DO MYSQL
No MySQL, quando voc excluir registros de um espao de tabela no
remapeado automaticamente. O problema com isto que se uma tabela de
executar muitas operaes DELETE, o espao fsico da mesa ser cada vez
mais fragmentado e reduzido desempenho.
Para a correo deste problema tambm usamos as ferramentas MyISAM
ou InnoDB, ambas ao executar o comando OPTIMIZE TABLE, fazem
uma desfragmentao automtica da tabela corrigindo este problema.

altamente

recomendvel

usar

este

comando

periodicamente,

especialmente em tabelas que so mais declaraes de excluso de registros.


Nas tabelas MyISAM o OPTIMIZE TABLE faz o seguinte:
Se a tabela tem linhas deletadas ou divididas, repara a tabela.
Se as pginas de ndice no esto organizadas, as organiza.
Se as estatsticas da tabela no esto atualizadas (e a reparao no
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 estatsticas do ndice e liberar espao no
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 fragmentao


levando em considerao o 'DATA_LENGTH' e o 'DATA_FREE', teoricamente
quanto maior o datafree mais fragmentada est a tabela, porm este comando

mostra tambm as tabelas InnoDB, onde o 'datafree' pode ter um valor maior e
fixo, isto no indica fragmentao.
Para verificar as engines das tabelas e tambm poder visualizar o
'DATA_FREE' voc pode rodar o seguinte comando:
SHOW TABLE STATUS;

Qualquer valor no campo 'DATA_FREE' das tabelas MyIsam indcio de


fragmentao.

CONSULTA DE DADOS E NDICES


Para realizar consultas no banco de dados MYSQL usamos o comando
SELECT com as declaraes dos dados que buscamos, podemos tambm
refinar essa consulta atravs da incluso de funes na declarao original.
A forma bsica das consultas :
SELECT * FROM projetos
Figura 5 - Resultado do Select na tabela projetos Maio/2016

Fonte: ELIAS PRACIANO OS TUTORIAIS DO GEEK de maro/2014 . Disponvel em:


<https://elias.praciano.com/2014/03/mysql-o-comando-select/ >. Acesso em: 11 mai. 2016.

Essa consulta retornar todas as colunas e linhas contidas na tabela.


Partindo desse princpio podemos ir refinando a consulta declarando os
campos que desejamos que sejam mostrados como a seguir:
SELECT id_projeto, nome_projeto FROM projetos

10

Figura 6 - Resultado do Select na tabela projetos selecionando campos especficos Maio/2016

Fonte: ELIAS PRACIANO OS TUTORIAIS DO GEEK de maro/2014. Disponvel em:


<https://elias.praciano.com/2014/03/mysql-o-comando-select/ >. Acesso em: 11 mai. 2016.

Logo essa consulta mostrar apenas duas colunas com seu dados, o
id_projeto e o nome_projeto. Utilizando a Clusula condicional (WHERE) nas
consultas, 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 maro/2014. Disponvel em:


<https://elias.praciano.com/2014/03/mysql-o-comando-select/ >. 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%';

11

Figura 8 - Resultado do Select na tabela projetos com Where e Like Maio/2016

Fonte: ELIAS PRACIANO OS TUTORIAIS DO GEEK de maro/2014. Disponvel em:


<https://elias.praciano.com/2014/03/mysql-o-comando-select/ >. Acesso em: 11 mai. 2016.

Existem outras funes que podero ser introduzidas para adequar da


forma mais clara as consultas a serem realizadas, e retornar os resultados
mais precisos possveis juntamente com a lgica aplicada.
Continuaremos falando sobre consultas a seguir, porm, introduziremos o
conceito de ndices no assunto.
No banco de dados MySQL os ndices podem ser criados com
considervel facilidade, tanto no momento da concepo 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, possvel introduzir posteriormente
atravs 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 incluso ou atualizao feita no
banco de dados o ndice tambm precisa ser atualizado.
12

Como boa prtica recomendada utilizar ndices em campos como: data,


nmero e strings pequenos, pois para cada consulta, o MySQL seleciona o
melhor ndice a partir de critrios por ele definidos.

METADADOS E DICIONRIOS DE DADOS


Quando 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 contedo do banco de dados, metadados. Assim
nomes de colunas, banco de dados, usurios, verses e a maioria dos
resultados strings de SHOW, so metadados.
No

MySQL

os

metadados

tratados esto

disponveis

na

information_schema, o manuseio dos metadados tarefa do DBA.


A information_schema a estrutura de dicionrio de dados utilizada pelo
MySQL, funcionando como um repositrio central para metadados de qualquer
banco de dados.
Na information_schema podemos ter:

Todo schema de objetos.

Estatstica do Servidor(Conexes, uso de CPU, Bytes enviados e


recebidos).

Privilgios.

Store procedure e Views.

Podemos acessar os information_schemas de duas formas, uma dela s


atravs 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 atravs dos comandos show e desc, tambm podemos obter os
metadados de uma forma mais fcil no MySQL.

Algumas instrues SHOW suportadas no MySQL:


13

show databases: Lista o nome das bases disponveis

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 informaes 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 tambm o cliente mysqlshow, que pode ser utilizada no shell para
retornar a lista das bases de dados disponveis. Exemplo:
Figura 9 - Resultado do comando mysqlshow Maio/2016

Fonte:

SQL

PARA

TODOS

de

agosto/2015.

Disponvel

em:

<http://sqlparatodos.com.br/metadados-information_schema-mysql// >. Acesso em: 11 mai.


2016.

REDUNDNCIA CONTROLADA
O MySQL desenvolveu uma soluo conhecida como MySQL Cluster,
que consiste em prover capacidade de fail-over automtico 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 operao como se nada tivesse ocorrido.

14

CONTROLE DE CONCORRNCIA
No Mysql o controle de concorrncia feito em dois nveis: no nvel do
servidor e no nvel da ferramenta de armazenamento. Como vimos
anteriormente as ferramentas de armazenamento transacionais do MySQL,
como InnoDB, Falcon e PBXT, no usa um simples mecanismo de bloqueio de
linha. Em seu lugar, elas usam um bloqueio em nvel de linha em conjunto com
uma tcnica para aumentar concorrncia conhecida como controle de
concorrncia de verso mltipla (MVCC).
MVCC funciona mantendo um snapshot dos dados como eles existiam
em algum ponto no tempo. Isso significa que transaes podem enxergar uma
visualizao consistente dos dados, no importa quanto
tempo elas executem. Tambm significa que diferentes transaes 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 horrios reais que estes
eventos ocorreram, a linha armazena o nmero da verso do sistema na hora
em que o evento ocorreu. Este um nmero que incrementa toda vez que uma
transao comea. Cada transao mantm seu prprio registro da verso do
sistema atual, na data em que ele iniciou. Toda consulta tem de checar os
nmeros de verso de cada linha em relao verso da transao.

SELECT
InnoDB deve examinar cada linha para garantir que ela se adapte a dois
critrios:
InnoDB deve encontrar uma verso da linha que no mnimo to velha
quanto a transao (por exemplo, sua verso deve ser menor ou igual verso
da transao). Isso garante que a linha existia antes da transao comear, ou
que a transao criou ou alterou a linha.
A verso de apagamento da linha deve ser indefinida ou maior do que a
verso da transao. Isso garante que a linha no foi deletada antes da
transao iniciar.
15

Linhas que passam nos dois testes podem ser retornadas como o resultado da
consulta.

INSERT
InnoDB registra o nmero da verso do sistema atual com a nova linha.

DELETE
InnoDB registra o nmero da verso do sistema atual como o ID de
apagamento da linha.

UPDATE
InnoDB escreve uma nova cpia da linha, usando o nmero da verso do
sistema para a verso da nova linha. Ele tambm escreve o nmero da verso
do sistema com a verso de apagamento da velha linha.

SEGURANA
O MySQL implementa um sistema de autenticao bastante robusto que
realizado em dois estgios. O primeiro verifica se o usurio pode conectar ao
banco de dados e o segundo verifica se o usurio tem privilgios para realizar
operaes no banco de dados. O segundo estgio, portanto, verificado a
cada operao realizada pelo usurio.
Este sistema de privilgios armazenado usando a prpria estrutura do
sistema em um banco de dados especial chamado mysql e deve ter o acesso
permitido apenas para o usurio root.
Para aceitar a conexo de um usurio, o MySQL no considera apenas o
prprio usurio, mas tambm a mquina de onde o usurio est conectando.
Dessa forma, voc pode permitir o acesso de um determinado usurio somente
de algumas mquinas especficas, bloqueando seu acesso de outros hosts que
podem no ser confiveis.
Existem duas maneiras de conceder privilgios aos usurios: 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, no sendo necessrio entender
em detalhes o significado de cada tabela e suas respectivas colunas. Se voc
16

alterar os privilgios manual- 3 Segurana com o MySQL mente alm do risco


de manipular dados de forma errada, voc pode se esquecer de executar o
comando FLUSH PRIVILEGES para tornar as alteraes ativas. Veremos um
pouco mais no capitulo Acesso Controlado.

RESTRIES DE INTEGRIDADE
O

InnoDB

implementa

as

restries

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 sero eliminados em todas as
tabelas relacionadas. ORESTRICT no permite a remoo 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 excludos.

ACESSO CONTROLADO
O MySQL possui um mecanismo que permite limitar o acesso de um
usurio a apenas um banco, tabela ou coluna, alm de poder controlar o
acesso de acordo com o host a partir de onde est sendo feita a conexo com
o servidor. Pode-se ainda, conceder privilgios diferentes para cada host de
onde o usurio possa estabelecer a conexo.
O MySQL armazena as informaes dos seus usurios em 4 tabelas que
esto

localizadas

no

banco

de

dados mysql.

a user, db, tables_priv e columns_priv.

tabela

Estas
user

tabelas

so

armazena

as

informaes de todos os usurios do banco e os privilgios globais deste


usurio. A tabela db armazena os privilgios dos usurios especficos de um
banco de dados. Finalmente, as tabelas tables_priv e columns_priv armazenam
os privilgios associados a tabelas e colunas, respectivamente. Como estas
tabelas possuem as informaes dos usurios, bem como os seus privilgios,
recomenda-se que apenas o administrador do banco de dados tenha acesso
ao banco mysql (usurio root).

17

Para criar usurios e conceder privilgios no MySQL, utiliza-se o comando


GRANT. Ao executar um comando GRANT para um usurio que no 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 privilgios existentes no MySQL descrita abaixo:


Privilgio

Descrio

ALL [PRIVILEGES]

Todos os privilgios exceto GRANT OPTION

ALTER

Permite executar ALTER TABLE

CREATE

Permite executar CREATE TABLE

CREATE TEMPORARY

Permite executar CREATE TEMPORARY TABLES

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

DROP

INDEX
INSERT

Permite executar INSERT

LOCK TABLES

Permite executar LOCK TABLES em tabelas que


tenha privilgio SELECT

PROCESS

Permite executar SHOW FULL PROCESSLIST

REFERENCES

Ainda no est implementado

RELOAD

Permite executar o FLUSH

REPLICATION CLIENT

Permite ao usurio obter a localizao do


18

Master ou Slave
REPLICATION SLAVE

Necessrio para replicao Slave(leitura dos


eventos do log binrio 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

Sinnimo para NO Privileges

GRANT OPTION

Permite ao usurio repassar os seus privilgios

Uma vez informados os privilgios do usurio, voc dever indicar o nvel


ao qual o privilgio se aplica, sendo possvel especificar trs nveis:
*.*

Privilgio Global

Db.*

Qualquer tabela no banco db

Db.tb

Apenas a tabela tb do banco de dados db. Para especificar apenas


uma determinada tabela, estas devero ser listadas ao lado do
privilgio. (priv(colunas))

Depois do nvel voc dever indicar o usurio, ou a lista de usurios, para


os quais os privilgios se aplicam (user@host).
Exemplos:
No exemplo a seguir criado um usurio com o nome teste que pode se
conectar somente do host onde o servidor est em execuo (localhost), o
usurio s poder fazer SELECT nas colunas nome e idade da tabela pessoa,
que se encontra no banco de dados rh. A senha do usurio 12345.
mysql>GRANT SELECT (nome, idade) ON rh.pessoa TO teste@localhost
IDENTIFIED BY "12345";
Para listar os privilgios deste usurio utilize o comando:
mysql>SHOW GRANTS FOR teste@localhost;

19

O usurio remoto poder executar UPDATE e INSERT em qualquer


tabela do banco de dados rh, sendo possvel a conexo ao servidor a partir de
qualquer mquina utilizando IP:
mysql>GRANT UPDATE, INSERT ON rh.* TO
remoto@"200.236.13.%" IDENTIFIED BY "remoto";
Para remover um privilgio do usurio utilize o comando REVOKE
mostrado abaixo:
REVOKE priv [(colunas)] [, priv [(colunas)]] ...
ON {*.* | db.* | db.tabela}
FROM usuario [, usuario] ...

REPLICAO (Total e Parcial)


O objetivo de um mecanismo de replicao de dados permitir a
manuteno de vrias cpias idnticas de um ----mesmo dado em vrios
servidores de bancos de dados (SGBD). Os principais benefcios da replicao
de dados so a redundncia, o que torna o sistema tolerante a falhas, a
possibilidade de um balanceamento de carga do sistema, j que o acesso pode
ser distribudo entre as rplicas, e finalmente, ter-ser o backup online dos
dados, j que todas as replicas estariam sincronizadas. Este artigo, apresenta
uma introduo ao mecanismo de replicao do MySQL, bem como as
configuraes bsicas para realizao desta tarefa.

Viso geral da replicao


O MySQL permite um tipo de replicao 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 binrio de alterao todos os
comandos de atualizaes da base de dados. Desta forma, todas as alteraes
ocorridas no master so imediatamente replicadas para os outros servidores
slave.
A replicao no mysql principalmente compatvel com a anterior, isto ,
um servidor mais novo pode normalmente ser um escravo de um servidor mais
velho sem nenhum problema. Porm, verses mais antigas dos servidores so,
freqentemente, incapazes de servir como slaves de verses mais novas, pois
20

eles no podem entender novas caractersticas ou a sintaxe SQL que o


servidor mais novo utiliza, e pode haver diferenas no formato dos arquivos
que a replicao usa, por exemplo, voc no pode replicar de um master
MySQL 5.0 para um slave MySQL 4.0.
Com a replicao voc possui uma srie de vantagens como:
Equilbrio de carga: a replicao, geralmente no 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.
Distribuio de dados: a replicao pode ajudar a distribuir as consultas
de leitura atravs de diversos servidores, ou seja, o mesmo dado pode est
armazenados em todos os servidores envolvidos da replicao.
Backup: a replicao uma tcnica valiosa para ajudar com backups,
porm um slave no 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 replicao


O MySQL realiza a replicao em um simples processo de trs fases, a
Figura 1 ilustra a replicao com mais detalhes:
Figura 10 - Replicao em trs fases Maio/2016

Fonte:

SQL

PARA

TODOS

de

agosto/2015.

Disponvel

em:

<http://sqlparatodos.com.br/metadados-information_schema-mysql// >. Acesso em: 11 mai.


2016.

O master registra alteraes aos seus dados no seu log binrio (estes
registros so chamados de evento de log binrio): antes de cada transao que
21

atualiza dados no master, o mesmo registra as alteraes no seu log binrio,


ou seja, o mysql escreve as transaes no seu log binrio e logo em seguida o
master diz as ferramentas de armazenamento para comitar as transaes.
O slave copia os eventos de log binrio do master no seu relay log (log de
vigilncia): o servidor slave, atravs de uma thread de I/O, abre uma conexo
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 binrio 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 latncia, permitindo simultaneamente uma escalabilidade quase
linear. MySQL Cluster implementado atravs do mecanismo de
armazenamento NDB ou NDBCLUSTER para MySQL ("NDB" Network
Database).

NDB
NDB Cluster o sistema de banco de dados distribudo subjacente
MySQL Cluster. Ele pode ser usado de forma independente de um servidor
MySQL com os usurios acessando o Cluster atravs 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 instncia 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.

22

Ndb Cluster tem a seguinte capacidade independente de qualquer


servidor MySQL:
Persistente, armazenamento distribudo de tabelas com ndices
exclusivos ou encomendados.
Redo logging, pontos de verificao, a recuperao do sistema.
Auto-sharding de tabelas em todos os ns de dados.
Hashing parcial ou total de chaves primrias.
Chave primria, chave nica, varredura da tabela e verificao de ndice
ordenado.
Execuo da varredura paralelo com filtros "pushed-down '
Bloqueios de linha, atualizaes transacionais.
Replicao de dados sncrona dentro do cluster, fechamento automtico
+ recuperao
Fechamento de conexo automtica para os processos de 'API' tipos de
dados SQL padro, incluindo Blobs etc.
O armazenamento de dados em disco e alterao de dados assncrona,
mecanismo de gatilhos(triggers) operaes DDL (embora DDL independente
no vai ser actualmente reconhecido por qualquer servidor MySQL) Adio de
Index Online , alterao de tabelas online
Adio de ns Online e reorganizao de tabelas, backup on-line e atualizao
on-line.
MySQL Cluster atualmente usa o servidor MySQL para fornecer as seguintes
capacidades em cima do Ndb Cluster:

SQL parsing / otimizao / capacidade de execuo.

Conectores para aplicaes via JDBC, ODBC ...

Cross-tabela de juno mecanismo.

Autenticao e autorizao.

Replicao assncrona de dados para outros sistemas.

23

Arquitetura
MySQL Cluster projetado em torno de uma arquitetura multi-mestre
distribudo, compatvel com ACID. MySQL Cluster usa particionamento
automtico para dimensionar operaes de leitura e escrita e pode ser
acessada via SQL e no-SQL (NoSQL).

Replicao
Internamente o MySQL Cluster usa replicao sncrona atravs de um
mecanismo de confirmao de duas fases, a fim de garantir que os dados
sero gravados em vrios ns ao "commitar" os dados. (em contraste com o
que usualmente referido como "replicao MySQL", que assncrona.) Duas
cpias (rplicas) conhecidas como as de dados so necessrias para garantir a
disponibilidade. MySQL Cluster cria automaticamente "grupos de ns" a partir
do nmero de rplicas e ns de dados especificados pelo usurio. As
atualizaes so sincronicamente replicado entre os membros do grupo de ns
para proteger contra perda de dados e rpido suporte entre falhas nos ns.
Tambm possvel replicar de forma assncrona entre agregados; esta
muitas vezes referida como "Replicao MySQL Cluster" ou "replicao
geogrfica". Isso normalmente usado para replicar grupos entre os centros de
dados para recuperao de desastres ou para reduzir os efeitos da latncia da
rede, localizando os dados fisicos mais perto de um conjunto de usurios. Ao
contrrio de replicao do MySQL padro, a replicao geogrfica do MySQL
Cluster usa controle de concorrncia otimista(1).
(1) No controle de simultaneidade otimista, os usurios no bloqueiam os
dados quando os lem. Quando um usurio atualiza os dados, o sistema
verifica se outro usurio alterou os dados depois de lidos. Se outro usurio tiver
atualizado os dados, um erro ativado
A partir do MySQL Cluster 7.2, suporte para a replicao sncrona entre os
centros de dados foi suportado com o recurso multi-site Clustering.

Particionamento de dados horizontal


MySQL Cluster implementado como um banco de dados multi-master
totalmente distribudo assegurando atualizaes feitas por qualquer aplicao

24

ou n SQL que esto disponveis imediatamente para todos os outros ns que


acessam o cluster, e cada n de dados pode aceitar operaes de gravao.
Os dados dentro das tabela MySQL Cluster tabelas (NDB) particionado
automaticamente em todos os ns de dados no sistema. Isso feito com base
em um algoritmo de hash com base na chave primria na tabela, e
transparente para a aplicao final. MySQL Cluster capaz de suportar
consultas entre fragmentos e transaes.
Os usurios podem definir seus prprios esquemas de particionamento. Isso
permite aos desenvolvedores adicionar "conscincia de distribuio" para
aplicaes por partio com base em uma sub-chave que comum a todas as
linhas que est sendo acessado por meio de operaes de funcionamento
elevados. Isso garante que os dados utilizados para completar as transaces
localizada sobre o mesmo fragmento, reduzindo assim picos na rede.

Hybrid Storage
MySQL Cluster mantm todas as colunas indexadas em memria distribuda.
colunas no indexadas tambm pode ser mantido na memria distribuda ou
pode ser mantido no disco com um cache de pgina na memria. Armazenar
colunas no indexadas no disco permite MySQL Cluster armazenar conjuntos
de dados maiores do que a memria total de mquinas em cluster.
MySQL Cluster escreve redo logs em disco para todas as alteraes de dados,
bem como dados de verificao apontando para o disco regularmente. Isso
permite o cluster recuperar os dados de forma consistente a partir do disco
aps uma queda completa de cluster. medida que os redo logs so escritos
de forma assncrona em relao transao de confirmao, um pequeno
nmero de transaes podem ser perdidos se o cluster falhar por completo, no
entanto, isso pode ser atenuado pelo uso de replicao geogrfica ou cluster
multi-site discutido acima. Geralmente o atraso de gravao assncrona padro
2 segundos, e configurvel.
Quando uma tabela MySQL Cluster mantida na memria, o cluster s ir
acessar armazenamento em disco para escrever registros de Redo e
checkpoints. Como essas gravaes so sequenciais e acesso aleatrio
limitados esto

envolvidos,

MySQL

Cluster

pode

alcanar taxas de
25

transferncia de gravao mais elevadas com hardware disco limitado em


comparao com um tradicional caching RDBMS baseada em disco. Este
ponto de verificao no disco de dados da tabela em memria pode ser
desativado (em uma base por tabela) se a persistncia baseada em disco no
necessrio.

APIs SQL e NoSQL


Como o MySQL Cluster armazena tabelas em ns de dados, em vez de
MySQL Server, existem vrias interfaces disponveis para acessar o banco de
dados:
Acesso SQL atravs do servidor MySQL.
APIs NoSQL onde as bibliotecas Cluster MySQL podem ser incorporadas em
um aplicativo para fornecer acesso direto aos ns de dados, sem passar por
uma camada de SQL. Esses incluem:
memcached
Node.js / JavaScript
Java e JPA
HTTP / REST
NDB API (C ++)

Implementao
MySQL Cluster usa trs tipos diferentes de ns (processos):
N de dados (Data Node) (ndbd / processo ndbmtd): Esses ns armazenar
os dados. As tabelas so automaticamente compartilhadas entre os ns de
dados que tambm tratam de forma transparente o balanceamento de carga,
replicao, failover e auto-cura(SELF-HEALT).
n de gerenciamento (Management Node) (processo ndb_mgmd): Utilizado
para configurao e monitoramento do cluster. Eles so necessrios apenas
para iniciar ou reiniciar um n de cluster. Eles tambm podem ser configurados
como rbitros, mas isto no obrigatrio (Servidores MySQL pode ser
configurado como rbitros em vez disso).
26

n do aplicativo ou n SQL (Application node or Sql Node) (processo


mysqld): Um servidor MySQL (mysqld) que se conecta a todos os ns de
dados a fim de realizar o armazenamento e recuperao de dados. Este tipo de
n opcional; possvel consultar os ns de dados diretamente atravs 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 fsico
separado, VM ou instncia de nuvem (embora seja muito comum a co-localizar
ns de gerenciamento com servidores MySQL). Para as melhores prticas,
recomenda-se no co-localizar ns dentro do mesmo grupo de ns em um
nico host fsico (como que representaria um nico ponto de falha).
Arquitetura de 3 Camadas
Nvel Externo: Como os dados so vistos por cada usurio individualmente

Nvel Interno: Como os dados so fisicamente armazenados (nmero


de bytes de cada campo, etc.);

Nvel Conceitual: intermedirio entre os dois.

Primeiro modelo de replicao


Figura 11 - Replicao em trs fases Maio/2016

Fonte:

SQL

PARA

TODOS

de

agosto/2015.

Disponvel

em:

<http://sqlparatodos.com.br/metadados-information_schema-mysql// >. Acesso em: 11 mai.


2016.

27

Segundo Modelo de replicao


Figura 12 - Replicao em trs fases Maio/2016

Fonte:

SQL

PARA

TODOS

de

agosto/2015.

Disponvel

em:

<http://sqlparatodos.com.br/metadados-information_schema-mysql// >. Acesso em: 11 mai.


2016.

CONSIDERAES FINAIS
Com o desenvolvimento deste trabalho conhecemos mais a fundo o
SGBD do MYSQL, sua arquitetura, sua utilizao e benefcios. Pudemos
conhecer como trabalha o banco em seu back-end. Vimos um pouco do
trabalho do DBA, suas responsabilidades sobre o banco. Conhecemos tambm
as engines de administrao do banco MYSQL (MYSAM e INNOB), vimos suas
caractersticas, suas vantagens e desvantagens.
Assim consideramos que o trabalho sobre Sistema de Gerenciamento de
banco de dados do MYSQL nos trouxe uma bagagem de informaes e
conhecimento, acrescentando em nosso perfil profissional.

28

REFERNCIAS
DEVMEDIA. Viso Geral do Sistema de Gerenciamento de Banco de Dados MySQL. Disponvel
em http://www.devmedia.com.br/visao-geral-do-sistema-de-gerenciamento-de-banco-dedados-mysql/2981;. Acesso em: 09 mai. 2016.
PRACIANO, ELIAS. Mysql: O comando SELECT. Disponvel em
https://elias.praciano.com/2014/03/mysql-o-comando-select/; Acesso em: 09 mai. 2016.
MYSQL. 14.2.9 SELECT Syntax. Disponvel em
http://dev.mysql.com/doc/refman/5.7/en/select.html; Acesso em: 09 mai. 2016.
FERREIRA, THIAGO. Otimizao de consultas MySQL. Disponvel em
http://imasters.com.br/artigo/14624/mysql/otimizacao-de-consultas-mysql-parte01/?trace=1519021197&source=single;. Acesso em: 09 mai. 2016.
WEBGOAL. Como otimizar consultas no MySQL Anlise das queries. Disponvel em
http://www.webgoal.com.br/como-otimizar-consultas-no-mysql/; Acesso em: 09 mai. 2016.
NUNES, ANDERSON. NDICES MYSQL AUMENTANDO A VELOCIDADE DAS SUAS CONSULTAS
EM AT 100X. Disponvel em https://www.profissionaisti.com.br/2011/09/indices-mysqlaumentando-a-velocidade-das-suas-consultas-em-ate-100x/; Acesso em: 09 mai. 2016.
MYSQL. 9.6. UTF8 para Metdados. Disponvel em
http://download.nust.na/pub6/mysql/doc/refman/4.1/pt/charset-metadata.html; Acesso em:
09 mai. 2016.
WILSON, JOS. Metadados Information_schema MySQL. Disponvel em
http://sqlparatodos.com.br/metadados-information_schema-mysql/; Acesso em: 09 mai.
2016.
DUARTE, EBER. Gerenciamento de Usurios e Controle de Acessos do MySQL. Disponvel em
http://www.devmedia.com.br/gerenciamento-de-usuarios-e-controle-de-acessos-domysql/1898; Acesso em: 05 mai. 2016.
DUARTE, EBER. Gerenciamento de usurios, privilgios e controle de acessos em MySQL.
Disponvel em http://www.devmedia.com.br/gerenciamento-de-usuarios-privilegios-econtrole-de-acessos-em-mysql/7077; Acesso em: 05 mai. 2016.

Linden , Marx Gomes Van der. MySQL: Controle de Acesso. Disponvel em


http://docplayer.com.br/10947164-Mysql-controle-de-acesso.html; Acesso em: 05 mai. 2016.
DUARTE, EBER. Implementando Integridade Referencial no MySQL. Disponvel em
http://www.devmedia.com.br/implementando-integridade-referencial-no-mysql/1996; Acesso
em: 09 mai. 2016.

29

ATAIDES, ANDERSON PEREIRA. Segurana com o MySQL. Disponvel em


http://andersonataides.tripod.com/artigos/mysqlseguro.pdf; Acesso em: 09 mai. 2016.
WEBMASTER. MySQL Integridade Referencial. Disponvel em
http://www.webmaster.pt/mysql-integridade-referencial-3598.html; Acesso em: 09 mai. 2016.
BREM, MATHIAS. Segurana no MySQL. Disponvel em
http://imasters.com.br/infra/seguranca/seguranca-no-mysql-vulnerabilidades-ou-pontosfortes/?trace=1519021197; Acesso em: 09 mai. 2016.
LUCAS, ANDREI. MySQL: Replicao de Dados. Disponvel em
http://www.devmedia.com.br/mysql-replicacao-de-dados/22923; Acesso em: 09 mai. 2016.
WIKIPEDIA. MySQL Cluster. Disponvel em https://en.wikipedia.org/wiki/MySQL_Cluster;
Acesso em: 09 mai. 2016.
WIKIPEDIA. NDB Cluster. Disponvel em https://en.wikipedia.org/wiki/NDB_Cluster;
Acesso em: 09 mai. 2016.

30

Você também pode gostar