SlideShare a Scribd company logo
1 of 84
Download to read offline
MariaDB Training
Por Samuel dos Santos Tolentino
Dba Oracle / Sql Server / MySql
samuelsantostolentino@gmail.com
samuel.tolentino@lcs.com.br
Linkedin
Conteúdo
 Lição 1: Instalação e configuração do MariaDB Pos-instalação
 Lição 2: Administração
 Lição 3: Banco de dados
 Lição 4: Manipulação de dados e estruturas
 Lição 5: Índices e estatísticas de tabela
 Lição 6: Controle de transações
 Lição 7: Gerenciando duplicidade
 Lição 8: Métodos de backup e recuperação
 Lição 9: Replicação
 Lição 10: Auditoria
 Lição 11: Procedures , functions e triggers
 Lição 12 Tuning SQL: Explain
 Apêncices
MariaDB Training
 Lição 1:Instalação e configuração do MariaDB Pos-instalação
• Instalação do Mariadb
• Atualização
 Lição 2: Administração
• Gerenciando usuários e privilégios.
• Arquivo de configuração (my.cnf)
• Comandos administrativos
 Lição 3: Banco de dados
• Criação de banco de dados
• Exclusão de banco de dados
MariaDB Training
 Lição 4: Manipulação de dados e estruturas
• Tipos de dados
• Select, Insert, update, delete
• Expressões Regulares
• Funções simples
• Funções de agrupamento
• Operadores de conjunto (Set operators)
• Sub query
• Operadores IN, ANY, ALL
• Views
• Criação e alteração e esclusão de tabelas
• Instrução Truncate table
• Criação de tabela temporária
• Exclusão de tabela temporária
MariaDB Training
 Lição 5: Índices e estatísticas de tabela
• Criação de índice
• Exclusão de índice
• Rebuild índice
• Estatísticas de tabela
 Lição 6: Controle de transações
• Estrutura das transações
• Commit, Rolback e Start transaction
• Processlist
 Lição 7: Gerenciando duplicidade
• Utilizando insert
• Utilizando Insert ignore
• Utilizando Distinct
MariaDB Training
 Lição 8: Métodos de backup e recuperação
• Ferramentas de backup
• Utilizando Select into out file(Aquivo externo)
 Lição 9: Replicação
• Configuração de replicação master-slave
• Configuração de replicação master-master
• Monitoração da replicação
• Troubleshooting de replicação
 Lição 10: Auditoria
• Plugins
• Instalação e configuração do audit plugin.
 Lição 11: Procedures , functions e triggers
• Visão geral
• Exemplos
 Lição 11: Tuning SQL
• Explain
Lição 1: Instalação do MariaDB
Os seguintes passos irão mostrar como efetuar a instalação do MariaDB no CentOs 7 utilizando o repositório
MariaDB:
1. Logue no SO com as credenciais de root:
Digite o comando: touch /etc/yum.repos.d/MariaDB.repo <enter>
vi /etc/yum.repos.d/MariaDB.rep <enter>
Adicione o conteúdo abaixo no arquivo:
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Salve o arquivo.<esc> :wq <enter>
Lição 1:Instalação do MariaDB
2. Instale o MariaDB pelo utilitário yum:
sudo yum install MariaDB-server MariaDB-client -y
3. Inicie o serviço:
# systemctl start mariadb ou
# systemctl start mysql
4. Execute o comando mysql_secure_installation para configurar a instância.
[root@localhost ~]# mysql_secure_installation
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Lição 1:Instalação do MariaDB
You already have a root password set, so you can safely answer 'n'.
Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
Remove anonymous users? [Y/n] y
... Success!
Remove test database and access to it? [Y/n] n
... skipping.
Disallow root login remotely? [Y/n] y
... Success!
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Lição 1: Acessando o banco de dados via
command line
 Abra o terminal no Linux e digite:
mysql –uroot -p
onde -u indica o usuário e -p a senha conforma abaixo:
[root@teampass ~]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or g.
Your MariaDB connection id is 64
Server version: 10.0.32-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
MariaDB [(none)]>
Lição 1:Alterando o diretório de dados
# vi /etc/selinux/config
...
SELINUX=disabled
...
# reboot
# systemctl stop mysql
# mkdir /mysql
# chown -R mysql:mysql /mysql
# vi /etc/my.cnf
...
datadir=/mysql
...
# cp -R -p -v /var/lib/mysql/* /mysql/
# systemctl start mysql
Lição 1: Atualização do MariaDB
 Para Atualizara versão do MariaDB basta alterar o repositório do yum (mariadb.repo).
# vi /etc/yum.repos.d/mariadb.repo
Altere a versão no repositório, salve.
[root@teampass ~]# systemctl stop mysql
[root@teampass ~]# sudo yum update (demora mais pois irá atualizar todo o S.O.) ou yum update MariaDB*
[root@teampass ~]# systemctl start mysql
[root@teampass ~]# mysql_upgrade -u root -p
Lição 2: Gerenciando Usuários
Sintaxe para criação de usuário no MariaDB:
CREATE USER ben@localhost IDENTIFIED BY 'p@$$w0rd';
Onde: @localhost indica que o usuário ben só pode conectar ao banco de dados a partir do servidor local.
Remoção de usuário:
Drop USER ben;
Renomear usuário:
remane user usuario_a to usuario_b ;
Alterar a senha do usuário:
SET PASSWORD FOR usuario_a = Password('n3w p@$$w0rd');
Lição 2: Privilégios
 Após a criação da conta de usuário x, para que este possa acessar os objetos dos
bancos de dados é necessário conceder os devidos privilégios.
Exemplo:
grant select, insert, update, delete on database1 to user@localhost;
grant select, insert, update, delete on database1 to user@localhost with grant option;
Flush privileges;
 Para verificar os privilégios concedidos a um determinado usuário:
SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER;
SHOW GRANTS FOR CURRENT_USER();
Remover privilégios:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
O comando “show privileges “ mostra os privilégios suportados pelo MariaDB.
Exemplo no próximo slide:
Lição 2: Privilégios
Lição 2: Privilégios
Roles
Uma role server para agrupar uma serie de privilégios facilitando o
gerenciamento na concessão e retirada de privilégios.
Sintaxe:
CREATE [OR REPLACE] ROLE [IF NOT EXISTS] role
[WITH ADMIN
{CURRENT_USER | CURRENT_ROLE | user | role}]
Exemplos:
create role developer whith admin smith (cria a role com usuário admin
smith)
grant create table on database1 to developer; (Concede o privilégio de criar
tabela)
GRANT SELECT ON data.* TO developer; (Concede privilegio no banco de dados
data para a role)
grant developer to user1; (Concede acesso a todas a permissões e a role
possui)
drop role developer; (Remove a role do banco de dados)
Documentação:
Grant
Revoke
Roles
Conforme imagem abaixo é preciso executar o
comando set role para que e role tenha efeito.
Lição 2: Arquivo de configuração
O arquivo de configuração (my.cnf) é onde são armazenadas as configurações de inicialização da instância,
toda vez que o database é iniciado esse arquivo é lido e os valores das variáveis do sistema são carregados na
instância. A maioria das variáveis podem ser configuradas pelo arquivo my.cnf, mas a maioria não estarão
visíveis no arquivo, quando isso ocorre a instância é inicializada a partir de valores padrão. Algumas variáveis
podem ser alteradas dinamicamente, outras devem ser alteradas no arquivo my.cnf e após reiniciar a
instância.
O caminho padrão desse arquivo é /etc/my.cnf (Linux).
Exemplo de arquivo de configuração:
# Exemplo de arquivo de configuração mysql.
[servidor cliente]
socket = / tmp / mysql-dbug.sock
porta = 3307
# Isso será passado para todos os clientes mysql
[cliente]
senha = my_password
# Aqui estão as entradas para alguns programas específicos
# Os valores a seguir assumem que você tem pelo menos 32M de ram
Lição 2: Arquivo de configuração
# O servidor MySQL
[mysqld]
temp-pool
key_buffer_size = 16M
datadir = / my / mysqldata
loose-innodb_file_per_table
[mysqldump]
max_allowed_packet = 16M
[mysql]
no-auto-rehash
loose-abort-source-on-error
 Todas as opções do servidor em my.cnf devem ser após a seguinte linha: [mysqld]
 O comando “show variables” lista todas as variáveis de sistema.
https://mariadb.com/kb/en/library/server-system-variables/
Lição 2: Comandos administrativos
A lista abaixo mostra alguns comandos importantes que são mais utilizados:
 Use [database name] : seleciona um database padrão para a sessão atual.
 Show databases: lista todos os databases na instância atual.
 Show tables: Lista todas as tabelas não temporárias do database atual selecionado.
 Show columns from [table] ou describe ou desc [table]:Mostra a estrutura de colunas
da tabela informada.
 Show table status like [‘table’]g: Fornece informações de tabelas não temporárias.
 Show erros, Show warnings: Exibe erros, avisos e notas.
Lição 2: Mysqladmin
 O mysqladmin é um utilitário de administração que serve para auxiliar na administração da instância e pode ser
usado para:
• Monitorar o que os clients do MariaDB estão fazendo (lista de processos)
• Obteter estatísticas de uso e variáveis ​​do servidor MariaDB
• Criar / remover bases de dados
• Redefinir logs, estatísticas e tabelas
• Eliminar as consultas em execução.
• Parar o servidor (desligamento)
• Start / stop slaves
• Verificar se o servidor está ativo (ping)
https://mariadb.com/kb/en/library/mysqladmin/
Exemplos:
[root@master ~]# (mysqladmin -uroot -p shutdown Efetua um desligamento limpo na instância)
[root@master ~]# mysqladmin -u root -p create test (Cria um database)
[root@master ~]# mysqladmin -u root -p --relative --sleep=1 extended-status | grep -v " 0 “ (Lista variaveis de systema e
seus valores)
[root@master ~]# mysqladmin -uroot -proot variables | grep datadir (consulta variável de sistema)
[root@master ~]#
Lição 3: Criação de banco de dados
Create database sintaxe:
CREATE [OR REPLACE] {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[create_specification] ...
create_specification:
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
Exemplo:
Create database if not exists teste;
MariaDB [(none)]> show create database teste;
+----------+------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------+
| teste | CREATE DATABASE `teste` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)
MariaDB [(none)]>
Lição 3: Character set e Collations
Um Character set é conjunto de caracteres enquanto uma Collation são as regras para comparar e classificar um
conjunto de caracteres específico.
Por exemplo, um subconjunto de um conjunto de caracteres pode consistir nas letras A, Be C. Um agrupamento
padrão pode definir estes como aparecendo em uma ordem ascendente de A, B, C.
Se o character set for omitido na criação do database o MariaDB assume por padrão o latin1.
https://mariadb.com/kb/en/library/character-set-and-collation-overview/
Licão 3: Alteração e Exclusão do banco de dados
Para excluir o banco de dados:
Sintaxe:
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
Exemplo:
MariaDB [(none)]> Drop database teste;
Query OK, 0 rows affected (0.00 sec)
Para alterar o banco de dados:
Sintaxe:
ALTER {DATABASE | SCHEMA} [db_name]
alter_specification ...
ALTER {DATABASE | SCHEMA} db_name
UPGRADE DATA DIRECTORY NAME
alter_specification:
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
Exemplo:
ALTER DATABASE test CHARACTER SET = 'utf8' COLLATE = 'utf8_bin';
Lição 4: SQL
O que é SQL?
SQL significa Structure Query Language, ou seja, linguagem de consulta estruturada, que foi desenvolvida
especificamente para comunicação de sistemas de banco de dados:
• Tem o objetivo de fornecer uma forma simples de ler e gravar informações no banco de dados.
• A forma mais utilizada de SQL é o padrão ANSI (American National Standards Institute), embora a maioria dos
SGBDs tenha seu próprio padrão SQL como Oracle e SQL Server, nos últimos anos anos cada vez mais tem se visto
o uso do padrão ANSI.
https://www.ansi.org/about_ansi/introduction/introduction?menuid=1
Lição 4: Colunas e Tipos de dados
 Coluna: uma coluna é um campo único na tabela. Todas as tabelas possuem uma ou varias colunas. As colunas
podem armazenar diversos tipos de informação como: numéricos, binários, alfanuméricos, long, data e hora
etc.. Para informações detalhadas consulte a documentação do MariaDB.
 Linha: os dados são armazenados nas tabelas em forma de linhas, cada registro salvo no banco de dados é
armazenado uma nova linha na tabela.
 Null: Quando uma coluna tem a informação null significa a ausência de valor, ou seja, não possui informação
armazenada.
 Primary Keys: uma primary key é uma ou um conjunto de colunas cujos valores únicos identificam cada linha na
tabela, os valores de uma primary key não podem se repetir.
 Foreign Keys: uma foreign key é uma ou mais colunas que referenciam uma coluna em outra tabela onde a outra
tabela é denominada tabela pai e a tabela que contém a foreign key tabela filho.
 Unique Keys: Uma unique key indica que cada registro do campo que está como unique não pode se repetir.
https://mariadb.com/kb/en/library/data-types/
Lição 4 Manipulação de dados: Select.
 O select statement é um comando utilização para ler dados de uma ou mais tabelas do banco de dados.
Basicamente quando se utiliza o comando select no mínimo duas informações são necessárias: Quais informações
ler do banco e onde estão.
Sintaxe:
Exemplos:
Esse exemplo retorna todas as linhas e colunas da tabela customer. Onde * pode ser utilizado para
retornar todos os registros das tabelas.
O exemplo ao lado recupera apenas duas
colunas da tabela, mas todas as linhas
ainda. Para limitar o número de linhas
podemos utilizar a clausula where ou o
comando limit. Exemplo no próximo
slide.
O primeiro exemplo acima recupera os dados de um id especificado no where já o segundo traz todos
os registros mas limita o resultado para cinco linhas.
 A clausula where é utilizada para dar uma condição para a query no intuito de restringir o número
de registros afetados, ou recuperar apenas registros específicos.
 O comando limit apenas limita o número de linhas retornadas
Lição 4 Manipulação de dados: Expressões regulares
Expressões regulares permitem que a MariaDB execute uma correspondência de padrões complexos em uma string. Em
muitos casos, a combinação de padrões simples fornecida por LIKE é suficiente.
Exemplo:
https://mariadb.com/kb/en/library/regexp/
Mais: https://mariadb.com/kb/en/library/regexp/
Lição 4: Manipulação de dados: insert, update, delete
 O comando insert é utilizado para inserir novos registros (linhas) na tabela.
 O comando update é utilizado para modificar os valores existentes de um ou mais registros da tabela.
 O comando delete é utilizado para apagar uma ou mais registros da tabela.
Exemplos:
MariaDB [(none)]> INSERT INTO customers(cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email)
MariaDB [(none)]> VALUES('Pep E. LaPew','100 Main Street','Los Angeles','CA','90046','USA',NULL,NULL);
MariaDB [(none)]> INSERT INTO Customers VALUES(NULL,'Pep E. LaPew','100 Main Street','Los Angeles','CA','90046','USA',NULL,NULL);
MariaDB [(none)]> Update customer set cust_address= ‘new address’ where custid = 1;
MariaDB [(none)]> Update customer set cust_address= ‘new address’ , custname=‘new name’ where custid = 1;
MariaDB [(none)]> Delete from customers where custid=1;
Nota: Muito cuidado! nos comandos delete e update, caso a cláusula where seja omitida, o comando irá apagar ou alterar todos
os registros(linhas) da tabela. Falaremos mais sobre a clausula where nos próximos capítulos.
Lição 4 Manipulação de dados: Clausulas like e
order by
 A clausula order by é utilizada para ordenar o resultados das consultas que pode ser ascendente por padrão, ou
descendente. A clausula order by deve ser inserida sempre no final da query.
 A clausula like é utilizada para comparação de igualdade entre strings, para encontrar um determinado padrão
de string.
Exemplos:
> Select * from customer where first_name like ‘A%’
> Select * from customer where first_name like ‘B_%a’
> Select First_name, Last_name from employess order by first_name desc.
> Select First_name, Last_name from employess order by first_name 2;
Lição 4 Manipulação de dados: Joins
Utilizamos Joins quando queremos ler dados em mais de uma tabela. Utilizaremos o padrão ANSI para
exemplificar.
A seguir alguns tipos de joins utilizados:
Inner join: Relacionamento de igualdade entre duas tabelas.
Self join: Auto Relacionamento, ou seja, uma tabela se relacionando com ela mesma.
Left join: Produz um conjunto de resultados com todas as linhas da tabela na "esquerda" (t1) mesmo que
não haja correspondência na tabela da direita. Se nenhuma correspondência for encontrada, todas as
colunas da tabela direita serão definidas com valor NULL.
Right Join: O oposto de left join, produz um conjunto de resultados com todas as linhas na tabela direita
mesmo que não haja correspondência na tabela da esquerda. Se nenhuma correspondência for
encontrada, todas as colunas da tabela da esquerda serão definidas com o valor NULL.
Cross join: produz um conjunto de resultados em que cada linha em cada tabela é unida a cada linha da
outra tabela. Isso também é chamado de produto cartesiano . Na MariaDB, a palavra-chave CROSS pode
ser omitida, pois não faz nada. Qualquer JOIN sem uma cláusula ON ou where resulta em um CROSS
JOIN.
https://mariadb.com/kb/en/library/joining-tables-with-join-clauses/
https://mariadb.com/kb/en/library/more-advanced-joins/
Exemplos:
Exemplo join:
Select e.emp_name, d.department_name
from employees e join departments d on e.department_id=d.departmentid;
Exemplo left join;
Select e.emp_name, d.department_name
from employees e left join departments d on e.department_id=d.departmentid;
Exemplo right join
Select e.emp_name, d.department_name
from employees e right join departments d on e.department_id=d.departmentid;
Exemplo self join:
Select e.empname as employee, m empname as manager
from employees e join employees m on e.managerid =m.employeeid
Exemplo cross join:
Select * from departments cross join employees
Lição 4 Manipulação de dados: Funções simples
Funções simples são funções criadas no banco de dados para efetuar diversas funções como conversões
de dados numéricos para string, string para data e vice-versa, comparações e manipulação de strings. A
seguir alguns exemplos:
Funcão Descrição
INSTR Retorna a posição do primeiro exemplo de uma subsequência
UPPER Converte o texto para caixa alta(letras maiúsculas)
LOWER Converte o texto para caixa alta(letras minúsculas)
CAST Converte vários tipos de dados, números para texto, data para texto e vice versa
REPLACE Substitui caracteres determinados de uma string.
DATEDIFF Retorna a diferença em dias entre duas datas.
TIMESTAMPDIFF Retorna a diferença entre duas datas em minutos, horas,dias. Essa fução requer 3 parâmetros: o
tipo de dado retornado e data inicio e fim.
CONCAT Junta duas ou mais strings concatenadas.
DATE_FORMAT Ele formata a data de acordo com a cadeia de formato especificado.
SUBSTRING Retorna uma string a partir de uma ou duas posições ex: SUBSTRING(str,pos,len).
Exemplos:
Mais exemplos:
Http://www.w3ii.com/pt/mariadb/mariadb_usef
ul_functions.html
Lição 4 Manipulação de dados: Funções de
agrupamento.
 As funções de agrupamento servem para sumarizar dados fazendo cálculos como soma, média obter valores
máximo e mínimo das colunas sem ter que recuperar todas as linhas. Em conjunto com as funções de
agrupamento utilizamos as clausulas group by e having.
Exemplos:
1 - Select max(salary) from employees;
2 - Select min(id) from employees;
3 - Select count(*), department from cgroup by department;
4 - Select avg(salary) from employees;
5 - Select count(employee_id), department from employees group by department having count(department) > 5;
No exemplo 1 e 2 o a consulta retorna o maior e o menor salário, no exemplo 2 o resultado irá mostrar a contagem de registros da tabela
employees agrupando por departamento.
No exemplo 5 acima a consulta irá retornar a quantidade de empregados por departamento nos departamento que tenham mais
de 5 empregados.
Nota: as colunas que não tem função de grupo devem estar especificadas no group by.
Lição 4: Operadores de conjunto
Os operadores de conjunto( set operators) são utilizados com base no livro SQL-99 complete, dessa forma o
conteúdo não se aplica diretamente ao MariaDB. Entre os set operators estão: Union, except e insersect.
<query expression>
{UNION | EXCEPT | INTERSECT}
[ ALL | DISTINCT ]
[ CORRESPONDING [ BY (<Column name list>) ] ]
<query expression>
Exemplos:
SELECT employee_name, salary FROM Employees
UNION
SELECT employee_name, salary FROM EmployeesHist;
SELECT boss_name, salary FROM Bosses
EXCEPT
SELECT employee_name, salary FROM Employees;
SELECT boss_name, salary FROM Bosses
INTERSECT
SELECT employee_name, salary FROM Employees;
CREATE TABLE Villas (
county char(5),
acreage DECIMAL(4,2),
price DECIMAL(8));
CREATE TABLE Mansions (
owner char(5),
acreage DECIMAL(4,2),
house_rating INT,
price DECIMAL(8));
villas values(‘Lacombe’,39.00,10000);
Insert into villas values(‘Stettler’,15.78,90000);
Insert into villas values(‘Roseland’,15.77,20000);
Insert into villas values(‘Victoria’,null,null);
Insert into villas values(‘Victoria’,null,null);
Insert into mansions values ('Bodnar',15.77,NULL,200000);
Insert into mansions values ('Melnyk',39.00,15,900000);
Insert into mansions values ('Skoreyko',39.00,0,900000);
Insert into mansions values ('Mudriy',NULL, NULL,NULL);
Exemplos:
SELECT * FROM Villas
UNION DISTINCT
SELECT * FROM Villas
ORDER BY acreage DESC;
SELECT price FROM Villas
EXCEPT ALL
SELECT price FROM Mansions;
SELECT DISTINCT price FROM Villas
EXCEPT ALL
SELECT DISTINCT price FROM Mansions;
SELECT * FROM Villas
INTERSECT CORRESPONDING
SELECT * FROM Mansions;
SELECT acreage, 'Villa' AS type
FROM Villas
UNION
SELECT acreage, 'Mansion' AS type
FROM Mansions;
Lição 4: Sub querys
Sub querys são usadas para especificar um valor (uma sub consulta escalar, que retorna um valor), uma linha (a sub
consulta de linha, que retorna uma linha) ou uma Tabela (a sub consulta da tabela, que retorna uma tabela de
resultados) . É possível utilizar sub consultas em colunas no select, na clausula where, having e from.
Exemplos:
SELECT Table_1 . column_1 ,
Table_1 . column_2
FROM Table_1 WHERE Table_1 . column_1 =
( SELECT column_1 FROM Table_2
WHERE Table_2 . column_1 = 5 );
SELECT e.`empname`,(SELECT depname FROM departments
d WHERE d.id= e.`depid` )
FROM employees e (esta sub query é denominada sub query correlacionada
onde a sub consulta será executada para cada resultado
na consulta original)
Lição 4: Operadores IN, ANY, ALL, between
Os operadores in, any e all são utilizados na clausula where quando a condição da query tiver mais de um resulado
para comparar.
Exemplo:
SELECT salary FROM employees WHERE salary IN(SELECT AVG(salary) FROM employees GROUP BY depid);
Select salary from employees where salary > any (select AVG(salary) from employees group by departments);
Select salary from employees where salary > all (select AVG(salary) from employees group by departments);
SELECT salary FROM employees WHERE salary between 1000 and 4000;
Onde:
• any retorna registros onde o salário é maior do que o menor valor.
• In retorna retorna registros onde o salário seja igual a algum dos os valores retornados na subconsulta.
• All retorna registros onde o salário é maior do que o maior valor.
• Between retorna registros onde o salário esteja entre 1000 e 4000.
Lição 4 Views
Views são consideradas tabelas virtuais, diferente das tabelas que contém dados, as views não possuem dados, as
views possuem queries que retornam os dados dinamicamente quando são utilizadas.
Por que utilizar views?
• Para reuso de consultas SQL;
• Para segurança, restringindo campos da tabela;
• Para simplificar operações sql complexas, uma vez escrita a consulta sql, ela pode ser facilmente utilizada sem a
necessidade de saber os detalhes da consulta.
• Para modificar a formatação das informações, view podem formatar e apresentar dados diferente de como estão
nas tabelas.
Sintaxe:
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW [IF NOT EXISTS] view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
Exemplo:
Create or replace view v_name_view as
Select first_name, last_name, phone_number from customer;
Select * from v_name_view;
Nota: Não é possível criar mais de uma view com o mesmo nome, a utilização da palavra replace sobrescreve a view caso
já exista uma com o mesmo nome, já [IF NOT EXISTS] só permite criar a view caso não exista uma view com o mesmo
nome.
Criação de view com check option
Por padrão é possível atualizar uma tabela a partir de uma view, desde que na view não contenha joins ou agrupamentos, a
palavra chave with grant option previne a atualização da tabela a partir da view a menos que a clausula where seja
verdadeira.
Exemplo:
Create or replace view v_view_name as
MariaDB [teste]> CREATE VIEW view_check1 AS SELECT * FROM test WHERE cod <100;
CREATE VIEW view_check2 AS SELECT * FROM view_check1 WHERE cod > 10 with local check option;
Esta inserção é bem sucedida, uma vez que view_check2 apenas verifica a inserção contra view_check2, e a cláusula WHERE avalia como
verdadeira ( 150 é maior que10).
CREATE VIEW view_check3 AS SELECT * FROM view_check1 WHERE cod > 10 with cascaded check option;
INSERT INTO view_check3 VALUES (150);
Esta inserção falha, conforme view_check3 verifica a inserção contra ambas view_check3 as views subjacentes. A cláusula
WHERE para view_check1 avalia como falso ( 150 é maior que 10, mas 150 não é maior que100), de modo que a inserção
falha.
O select abaixo mostra se a view é atualizável, ou seja, se é possível manipular os dados da tabela;
MariaDB [teste]> SELECT TABLE_NAME,IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS;
| TABLE_NAME | IS_UPDATABLE |
+-------------+--------------+
| view_check1 | YES |
| view_check2 | YES |
| view_check3 | YES |
+-------------+--------------+
3 rows in set (0.01 sec)
Lição 4 Criação de tabela
O comando create table cria uma tabela com o nome especificado, para criar tabela é preciso ter privilégio de
create table ou create table no banco de dados especifico.
Sintaxe:
CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...) [table_options ]... [partition_options]
CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)] [table_options ]... [partition_options]
select_statement
CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
{ LIKE old_table_name | (LIKE old_table_name) }
select_statement:
[IGNORE | REPLACE] [AS] SELECT ...
Mais detalhes: https://mariadb.com/kb/en/library/create-table/
Exemplos:
USE teste;
Create table t1 (id int auto_increment primary key ,
name varchar(20) not null,
phone varchar(20)
);
O script acima cria uma tabela com campo id como chave primaria e auto incremento, ou seja, ao inserir registros não é
preciso informar valor para o campo id, not null indica que o campo não pode ser inserido sem dados.
USE teste;
CREATE TABLE t2 (id INT ,
cod INT,
NAME VARCHAR(20) NOT NULL,
phone VARCHAR(20),
PRIMARY KEY (id,cod)
foreign key (cod) references t1(cod)
);
O script acima mostra a criação da tabela com mais de uma coluna fazendo parte da primary key e criação de foreign key.
Lição 4 alteração de estrutura(Alter table)
O comando alter table serve para alterar a estrutura da tabela como por exemplo adicionar ou remover colunas
como também alterar o tipo de dado da coluna, adicionar primary key, foreign Keys
Exemplos:
MariaDB [teste]> use teste;
MariaDB [teste]> alter table t1 add (email varchar(50) ); -- (adiciona uma coluna)
MariaDB [teste]> alter table t2 drop column phone; -- (remove a coluna)
MariaDB [teste]> Alter table t1 modify name varchar(50); -- (modifica o tamanho da coluna)
MariaDB [teste]> alter table t1 add constraint t1_fk foreign key (cod) references t2(cod); --(adiciona foreign key)
MariaDB [teste]> alter table t2 add constraint t2_pk primary key(id); -- (adiciona primary key);
Nota: cada tabela pode conter apenas uma primary key, mas várias foreign keys, pode ter uma ou mais coluna compondo uma
primary key;
Mais exemplos:
https://mariadb.com/kb/en/library/alter-table/
Lição 4 Drop e Truncate table
O comando truncate table recria toda a estrutura da eliminando todos os registros, diferente do comando drop
table o truncate não permite que seja efetuado rollback das alterações. Falaremos mais de rollback no capitulo
controle de transações.
Exemplo Drop table:
MariaDB [teste]> use teste;
MariaDB [teste]> drop table test;
Query OK, 0 rows affected (0.01 sec)
Exemplo Truncate table:
MariaDB [teste]> use teste;
MariaDB [teste]> truncate table t1;
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`teste`.`t2`, CONSTRAINT `t2_fk` FOREIGN KEY (`cod`) REFERENCES `teste`.`t1` (`id`))
MariaDB [teste]>
Nota: caso a tabela possua integridade referencial não é permitido executar o comando, nesse caso primeiro deve-se eliminar as foreign na
tabela filho, conforme exemplo abaixo. Caso exista coluna alto increment, a sequencia de incremento é reiniciada.
MariaDB [teste]> alter table t2 drop foreign key t2_fk;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [teste]>
MariaDB [teste]> truncate table t1;
Query OK, 0 rows affected (0.02 sec)
Lição 4 tabelas temporárias
Tabelas temporárias quando criadas existem até o termino da sessão atual, após o encerramento da sessão a tabela
é eliminada. Para excluir uma tabela temporária basta executar o comando drop temporary table table_name;
Exemplo:
Lição 5: Índices
Índices são utilizados para melhorar a velocidade em que uma consulta é retornada, existem quatro formas de criar
índices: chaves primárias, índices únicos, índices simples e índices de texto completo.
• Índices de Primary key: Toda vez que uma tabela é criada com chave primaria (Primary key), automaticamente é
criado um unique índex na coluna ou nas colunas que compõem a chave primária.
• Índices únicos: quando é criado uma unique key também é criado um índice único na coluna indicada.
• Índices simples: índices de colunas que não são únicas.
• Um índice de texto completo no MariaDB (full text index) é um índice do tipo FULLTEXT, e permite mais opções
ao procurar partes de texto de um campo. Os índices de texto completo podem ser usados apenas com as tabelas
MyISAM e Aria , no MariaDB 10.0.5, com as tabelas InnoDB no MariaDB 10.0.15 e podem ser criadas somente para
colunas CHAR , VARCHAR ou TEXT . As tabelas particionadas não podem conter índices de texto completo,
mesmo que o mecanismo de armazenamento os suporte.
https://mariadb.com/kb/en/library/fulltext-index-overview/
• Nota: Unique índices indicam que as informações nas colunas não podem se repetir tanto em primary Keys como
Unique Keys.
Exemplos
Os índices podem ser criados ou adicionados nas tabelas da seguinte forma:
Índices únicos:
MariaDB [hr]> ALTER TABLE Employees ADD UNIQUE `EmpCode`(`employee_id`);
ou
MariaDB [hr]> CREATE UNIQUE INDEX emp_email ON employees(email);
Indices simples:
MariaDB [hr]> CREATE INDEX emp_email ON employees(email);
Para remover índices:
MariaDB [hr]> alter table employees drop index emp_email;
Full text index
CREATE TABLE ft2(copy TEXT,FULLTEXT(copy)) ENGINE=MyISAM;
INSERT INTO ft2(copy) VALUES
('MySQL vs MariaDB database'),
('Oracle vs MariaDB database'),
('PostgreSQL vs MariaDB database'),
('MariaDB overview'),
('Foreign keys'),
('Primary keys'),
('Indexes'),
('Transactions'),
('Triggers');
Nesse exemplo, tudo o que está
associado à palavra "banco de dados" é
retornado quando a expansão da consulta
é usada, mesmo que não seja
explicitamente solicitada.
Mais exemplos: https://mariadb.com/kb/en/library/fulltext-index-overview/
Lição 5: Rebuild de Índices
Para efetuar o rebuild de índice no MariaDB, deve-se utilizar o comando optimize table que possui duas funções:
Desfragmentar a tabela e atualizar os índices de tabelas, porém tabelas InnoDB não suportam o optimize table.
Portanto o comando abaixo é um atalho para efetuar a organização completa da tabela mais a análise.
Onde o parâmetro –o indica o database.
Nota: O comando optimize table
loca a tabela, logo deve –se ter
cautela ao executar.
Lição 5: estatísticas de tabela
A declaração SHOW TABLE_STATISTICS foi introduzida no MariaDB 5.2 como parte do recurso Estatísticas de usuário .
Foi removido como uma declaração separada no MariaDB 10.1.1 , mas efetivamente substituído pela SHOW
information_schema_table declaração genérica .
O comando SHOW TABLE_STATISTICS G tabela mostra as estatísticas sobre o uso da tabela
Exemplo:
Lição 6: Controle de transações
"Uma transação SQL (transação) é uma sequência de execuções de instruções SQL que são atômicas em relação à
recuperação. Ou seja, o resultado de execução é completamente bem-sucedido ou não tem efeito em nenhum
efeito.(MariaDB)
O mecanismo de armazenamento InnoDB suporta transações compatíveis com ACID* .
Existem vários comandos para controle de transações no MariaDB. Nesse treinamento iremos falar de:
 Commit, Rollback, Start transaction e lock tables.
 Commit e Rollback: O comando commit indica o fim de uma transação informando ao banco de dados a instrução
para persistir os dados no disco, já o comando rollback indica exatamente ao contrário, ou seja desfaz
alterações efetuadas por transações que ainda não sofreram commit.
 Start transaction: A declaração START TRANSACTION ou BEGIN inicia uma nova transação. COMMIT confirma a
transação atual, tornando suas mudanças permanentes. ROLLBACK desfaz a transação atual, cancelando suas
alterações. O comando SET autocommit desabilita ou habilita o modo de autocommit padrão para a sessão atual.
 lock tables: O MariaDB permite que as sessões do cliente adquiram bloqueios de tabela explicitamente com o
objetivo de cooperar com outras sessões para acesso a tabelas ou para evitar que outras sessões modifiquem
tabelas durante períodos em que uma sessão requer acesso exclusivo a elas. Uma sessão pode adquirir ou liberar
bloqueios apenas para si. Uma sessão não pode adquirir bloqueios para outra sessão ou liberar bloqueios
mantidos por outra sessão. https://mariadb.com/kb/en/library/transactions/
* Atomicidade, consistência, isolamento e durabilidade.
Lição 6: Processlist
O comando SHOW [FULL] PROCESSLIST mostra quais processos estão em execução. Você também pode obter essas
informações da tabela information_schema.PROCESSLIST ou do comando mysqladmin processlist. Se você tiver o
privilegio PROCESS, você pode ver todos os processos. Caso contrário, você pode ver apenas seus próprios processos
(ou seja, processos associados à conta MariaDB que você está usando). Se você não usar a palavra - chave FULL,
apenas os primeiros 100 caracteres de cada declaração são mostrados no campo Informações.
Exemplo:
Lição 7: Gerenciando duplicidade
A duplicidade pode ser a nível de tabela, quando a mesma possui mais de um registro com a mesma informação ou
na forma de select, quando o resultado de uma consulta escrita de forma incompleta implica em linhas duplicadas
no resultado.
O uso de primary keys e e unique Keys evitam que haja duplicidade de informações quando se insere um novo
registro. Para selects com duplicidade podemos utilizar o comando Distinct .
O comando “insert ignore” ignora o erro caso ao tentar inserir um registro duplicado em uma coluna única com
restrição unique.
Exemplos:
Lição 8: Métodos de backup e recuperação
 No MariaDb é possível efetuar backups lógicos e físicos onde os backups lógicos efetuam backup apenas dos
dados e estruturas dos bancos enquanto que backups físicos efetuam o backup diretamente dos arquivos físicos
no disco.
 A ferramenta utilizada para fazer backup no MariaDB é o mysqldump.
Executando um backup simples:
shell> mysqldump db_name > backup-file.sql (Efetua o backup de todo o database)
shell> mysqldump -u root -p PRODUCTS products_tbl > export_file.txt (Efetua o backup de apenas uma tabela especifica)
Executando restauração:
shell> mysql –u -p db_name < backup-file.sql
shell> mysqld -u root -p PRODUCTS products_tbl < export_file.tx
Por padrão o mysqldump loca as tabelas ao efetuar o backup, para evitar que sejam locadas as tabelas utiliza-se o
parâmetro –single-transaction:
Exemplo:
mysqldump -uroot -proot hr > hr.sql --single-transaction
Lição 8: Métodos de backup e recuperação
Efetuando select para um arquivo externo:
SELECT * FROM employees INTO OUTFILE ‘emp.txt’;
Este comando gera um arquivo emp.txt no diretório do banco de dados selecionado.
Outras ferramentas de backup:
Percona XtraBackup: a partir da versão 10.1
MariaDB Backup: a partir da versão 10.1
Lição 8: Métodos de backup e recuperação
Cold Backup:
# systemctl stop mysql
# mkdir /Backup
# cp -rfvp /var/lib/mysql/ /Backup/
# systemctl start mysql
Para restaurar o backup em outra maquina:
# systemctl stop mysql
Copie o backup da maquina original ou de onde ele está localizado para a maquina onde se deseja restaurar.
# scp -Cr /Backup/mysql/* 192.168.174.141:/var/lib/mysql/
# chown -R mysql:mysql /var/lib/mysql
# setenforce 0
inicie o MySQL.
# systemctl start mysql
Lição 9: Replicação
No MariaDB é possível fazer replicação do tipo master-slave onde o master envia as alterações para o slave e multi-
master que significa que o servidor tem vários mestres que se replicam.
O método de sincronização é efetuado de forma assíncrona através do envio de binlogs para os outros servidores
MariaDB o que pode causar inconsistências caso o envio dos logs seja interrompidos por falha de rede por exemplo.
Passos para configurar a replicação master-slave:
1- Configurar as os parâmetros de replicação no arquivo my.cnf:
2- Efetuar backup dos bancos de dados no master e restaurar no slave.
3- Criar usuário que fará a replicação e conceder privilégio.
4- Ativar a replicação a partir do servidor slave.
Passos para configurar a replicação master-master:
1- Configurar as os parâmetros de replicação no arquivo my.cnf em todos servers.
2- Efetuar backup dos bancos de dados no master1 e restaurar no master2.
3- Criar usuário que fará a replicação e conceder privilégio em todos servers.
4- Ativar a replicação a partir do servidor master1.
5- Ativar a replicação a partir do servidor master2.
Exemplo master-slave
Servidor master:
[root@master ~]# systemctl stop mysql
Edit my.cnf:
# bind-address = 127.0.0.1
Por padrão o mariadb irá aceitar apenas conexões do host local iremos comentar essa linha
para ser possível receber conexões de outros hosts
server-id = 1
report_host = master
essas variaveis irão receber o id do servidor e hostname e precisam ser únicas.
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
Enable binary logging.
relay_log = /var/log/mysql/relay-bin
relay_log_index = /var/log/mysql/relay-bin.index
Habilita a criação de arquivos de relay log, os eventos serão lidos no arquivo binlog do
servidor master e escritos no relay-log do servidor slave.
replicate-do-db = testdb
esse parâmetro indica quais databases serão replicados(opcional)
[root@master ~]# systemctl start mysql
[root@master ~]# mysql –uroot -p
MariaDB [(none)]> create user replusr@'%' identified by 'replusr';
MariaDB [(none)]> grant replication slave on *.* to replusr@'%';
MariaDB [(none)]> show master status; (guarde o resultado, será utilizado na habilitação da replicação)
Exemplo master-slave
Servidor slave:
[root@master ~]# systemctl stop mysql
Edit my.cnf:
Altere o server-id e o report_host
[root@master ~]# systemctl start mysql
[root@master ~]# mysql –uroot -p
MariaDB [(none)]> create user 'replusr'@'%' identified by 'replusr';
MariaDB [(none)]> grant replication slave on *.* to 'replusr'@'%';
MariaDB [(none)]> STOP SLAVE;
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.174.139', MASTER_USER='replusr',
MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=630;
MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS G;
Faça inserts no master e verifique se a replicação está funcionando.
Exemplo master-master
Os passos para configuração da replicação multi-master são basicamente os mesmos, o que muda é na hora de
habilitar a replicação nos dois ou mais lados e algumas variáveis a mais utilizadas na replicaçaão:
Server Master 1:
MariaDB [(none)]> STOP SLAVE;
MariaDB [(none)]> CHANGE MASTER ‘master2' TO MASTER_HOST='192.168.174.141', MASTER_USER='replusr',
MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=630;
MariaDB [(none)]> START SLAVE ‘master1' ;
MariaDB [(none)]> SHOW SLAVE ‘master1' STATUS G;
Server Master 2:
MariaDB [(none)]> STOP SLAVE;
MariaDB [(none)]> CHANGE MASTER ‘master1’ TO MASTER_HOST='192.168.174.139', MASTER_USER='replusr',
MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=630;
MariaDB [(none)]> START SLAVE ‘master2 ;
MariaDB [(none)]> SHOW SLAVE ‘master2 STATUS G;
Faça inserts dos dois lados e verifique se a replicação está funcionando.
Lição 9: Monitoramento da replicação
Alguns comando de replicação:
CHANGE MASTER ['connection_name'] TO .... Isso cria ou modifica uma conexão com um master.
FLUSH RELAY LOGS ['connection_name'] .... Libera ou recarrega os caches de memória usados pelo MariaDB.
RESET SLAVE ['connection_name'] [ALL]. Isso é usado para redefinir a posição de replicação slave ou para remover
um slave permanentemente.
SHOW SLAVE ['connection_name'] STATUS ... Mostra informações de um slave specífico
SHOW ALL SLAVES STATUS.... Mostra informações de todos os slaves.
START SLAVE ['connection_name'...]] Inicia a replicação no slave.
START ALL SLAVES ... Inicia a replicação em todos os slaves.
STOP SLAVE ['connection_name'] ... Para a replicação no slave.
STOP ALL SLAVES ... Para a replicação de todos os slaves.
SHOW MASTER STATUS ... Mostra status do master.
Mais: https://mariadb.com/kb/en/library/replication-commands/
Lição 9: Trobleshooting da replicação
Em caso de falha da replicação será necessário refazer a sincronização a partir do master que está consistente.
Tenha certeza de que o slave não esteja efetuando transações nesse momento pois do contrário pode ocorrer perda
de informação.
Restaurando os dados a partir do master.
1- Para bloquear todas as tabelas execute:
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> Show master status G
Exemplo saída:
MariaDB [(none)]> show master status G
*************************** 1. row ***************************
File: mariadb-bin.000003
Position: 328
mysqldump –uroot –p --add-drop-database test table1 table2 > testdump.sql
MariaDB [(none)]> unlock tables;
* Estas ações serão efetuadas no Master
2- Copie o backup efetuado anteriormente no master e restaure o backup no slave:
MariaDB [(none)]> stop slave;
MariaDB [(none)]> mysql -u root -p my_database < my_database.sql
MariaDB [(none)]> show slave status G
MariaDB [(none)]> flush tables with read lock;
MariaDB [(none)]> show master status;
MariaDB [(none)]> change master to master_log_file=' mariadb-bin.000002 ', master_log_pos=1740;
MariaDB [(none)]> start slave <slave name>;
MariaDB [(none)]> show slave statusG
MariaDB [(none)]> unlock tables;
Outra forma simples de reiniciar a replicação após uma falha:
MariaDB [(none)]> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
MariaDB [(none)]> START SLAVE;
!Porém é preciso verificar se as informações estão consistentes em ambas as bases;
Lição 10: Auditoria
Varias funcionalidades utilizadas no MariaDB são adicionas através da instalação de plugins como é o caso do plungin
de auditoria do banco de dados, basicamente o propósito do MariaDB Audit Plugin é registrar a atividade do servidor.
Para cada sessão de cliente, ele registra quem se conectou ao servidor (ou seja, nome de usuário e host), quais
consultas foram executadas e quais tabelas foram acessadas e variáveis de servidor que foram alteradas.
Pelo MariaDB Audit Plugin é possível audita as seguintes ações:
CONNECT: quando o usuário se conecta, desconecta ou se conecta com falhas - incluindo o código de erro.
QUERY : Consultas executadas e seus resultados em texto simples, incluindo consultas falhadas devido a erros de
sintaxe ou permissão.
TABLE : Tabelas afetadas pela execução da consulta
QUERY_DDL : O mesmo que QUERY, mas filtros apenas DDL do tipo consultas ( CREATE, ALTER, DROP, RENAME e
TRUNCATE- exceto CREATE/DROP [PROCEDURE / FUNCTION / USER] e RENAME USER (eles não são DDL) MariaDB
5.5.42, MariaDB 10.0.17 , MariaDB 10.1.4
QUERY_DML: consultas sql, mas filtros única DML-tipo ( DO, CALL, LOAD DATA/XML, DELETE, INSERT, UPDATE,
HANDLER e REPLACE) MariaDB 5.5.42 , MariaDB 10.0.17 , MariaDB 10.1.4
QUERY_DCL: comandos de DCL(Data control language), CREATE USER, DROP USER, RENAME USER, GRANT,
REVOKE,SET PASSWORD. MariaDB 5.5.43 , MariaDB 10.0.18 , MariaDB 10.1.5
Mais detalhes: https://mariadb.com/kb/en/library/mariadb-audit-plugin-log-settings/
Configurando o audit plugin:
1- passo conect no mariadb como root
INSTALL PLUGIN server_audit SONAME 'server_audit.so'; <enter>
2- edite o arquivo my.cnf (/etc/my.cnf) com os parâmetros:
plugin-load = server_audit= server_audit.so
server_audit_events = connect,query (ações que serão auditadas)
server_audit_file_path = /var/lib/mysql-logs/audit.log (local onde será gravado os logs de auditoria)
server_audit_file_rotate_size = 10G #set the size of the logfile (tamanho máximo do arquivo de log)
server_audit_logging = ON (Ativa a auditoria)
server_audit_file_rotations = 0 (ativa rotatividade do arquivo de log)
3- Reinicie o MariaDB
4- Configure o nível da auditoria.
MariaDB [(none)]> SET GLOBAL server_audit_events = 'CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DCL,QUERY_DML';
Query OK, 0 rows affected (0.00 sec)
Inclua as alterações no aquivo my.cnf
server_audit_events=connect,query,table,QUERY_DDL,QUERY_DCL,QUERY_DML
A partir de então todas as ações efetuadas serão gravadas no /var/lib/mysql-logs/audit.log de acordo com o nível
de auditoria configurado.
Nota: Caso haja replicação
configurada e se deseje auditar os
demais servidores o procedimento
deve ser efetuado em cada host.
Lição 11: Procedures , functions e triggers
Procedures: Procedures são procedimentos armazenados no banco de dados que podem ter Por padrão,
uma rotina está associada ao banco de dados atual em uso. Para associar um procedimento de forma
explícita a um dado banco de dados, especifique o nome como db_name.sp_name quando você o cria.
Functions: Uma função tem basicamente as mesmas funções de um procedimento, porém
obrigatoriamente a função sempre deverá retornar algum valor. Funções são muito uteis com cálculos,
mas poder retornar qualquer tipo de dado.
Triggers: Triggers são gatilhos que são disparados por eventos que acontecem nas tabelas
(inser,update,delete), para efetuar um conjunto de funções pré-programadas. Triggers podem ser
utilizadas para auditoria gravando logs de ações efetuadas nas tabelas do banco de dados.
Exemplo procedure
DELIMITER //
CREATE PROCEDURE simpleproc (out param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END;
//
DELIMITER ;
CALL simpleproc(@a);
SELECT @a;
+------+
| @a |
+------+
| 1 |
+------+
DELIMITER //
CREATE PROCEDURE simpleproc2 (
OUT param1 CHAR(10) CHARACTER SET 'utf8' COLLATE
'utf8_bin'
)
BEGIN
SELECT CONCAT('a',f1) INTO param1 FROM t;
END;
//
DELIMITER ;
DELIMITER //
CALL simpleproc2(@a);
SELECT @a "resulatado";
Exemplos extraídos da documentação MariaDB
Exemplo function
DELIMITER //
CREATE FUNCTION max_salary (dept l ) RETURNS INT RETURN
(SELECT MAX(salary) FROM employees WHERE employees.dept =
dept);
GRANT EXECUTE ON FUNCTION max_salary TO roger;
//
DELIMITER ;
DELIMITER //
CREATE FUNCTION hello (s CHAR(20))
RETURNS CHAR(50) DETERMINISTIC
RETURN CONCAT('Hello, ',s,'!');
//
DELIMITER ;
SELECT hello('world');
+----------------+
| hello('world') |
+----------------+
| Hello, world! |
+----------------+
Exemplo trigger
CREATE TRIGGER Books_Delete
AFTER DELETE ON Books /* ver nota (a) */
REFERENCING OLD ROW AS Old /* ver nota (b) */
FOR EACH ROW /* ver nota (c) */
INSERT INTO Books_Deleted_Log
VALUES (Old.title); /* ver nota (d) */
Nota (a): A ação da Trigger deve ser depois, uma vez que a ação Trigger inclui uma instrução SQL-data change.
Nota (b): é convencional usar o alias " Old" ou " Old_Row" para a linha anterior.
Nota (c): A ação será efetuada para cada linha alterada na tabela.
Nota (d): OLD é um alias para o valor antigo da coluna, assim OLD.TITLE é o valor antigo da coluna title.
CREATE TRIGGER Clients_Insert
BEFORE INSERT ON Clients
REFERENCING NEW ROW AS New
FOR EACH ROW
SET New.home_telephone =
COALESCE(New.home_telephone,New.work_telephone);
Exemplos extraídos da documentação do MariaDB
Lição 12 Tuning SQL: Explain
A declaração EXPLAIN pode ser usada como sinônimo de DESCRIBE ou como forma de obter informações sobre como
o MariaDB executa uma declaração SELECT(assim como UPDATE e DELETE desde MariaDB 10.0.5):
'EXPLAIN tbl_name‘ é sinônimo de DESCRIBE tbl_name ou SHOW COLUMNS FROM tbl_name
Quando você precede uma declaração SELECT (ou também com MariaDB 10.0.5 , um UPDATE ou um DELETE) com a
palavra-chave EXPLAIN, a MariaDB exibe informações do otimizador sobre o plano de execução da consulta. Ou
seja, MariaDB explica como ele processaria o SELECT, UPDATE ou DELETE incluindo informações sobre como as
tabelas são unidas e em qual ordem.
ANALYZE statement, que executa a consulta, bem como produzindo saída EXPLAIN, e fornece estatísticas reais, bem
como estimadas, está disponível no MariaDB 10.1.0 .
Sintaxe:
EXPLAIN tbl_name ou explain <instrução select>
Coluna Descricão
id Número de seqüência que mostra em que tabelas de pedidos são juntas.select_type Que tipo de
SELECTtabela vem.
table Alias nome da tabela. As tabelas temporárias materializadas para sub-consultas são denominadas
<subquery #>
type Como as linhas são encontradas a partir da tabela (tipo de junção).
possible_keys chaves na tabela que podem ser usadas para encontrar linhas na tabela
key O nome da chave que é usada para recuperar linhas. NULL Não foi utilizada nenhuma chave.
key_len Quantos bytes da chave que foi usada (mostra se estamos usando apenas partes da chave de várias
colunas).
ref A referência que é usada como o valor da chave.
rows Uma estimativa de quantas linhas encontraremos na tabela para cada pesquisa de chave.
Extra Informações adicionais sobre esta associação.
Descrição das colunas em explain select
Exemplos no próximo slide:
Quando você precede uma declaração SELECT (ou, a partir do MariaDB 10.0.5 , UPDATE ou DELETE também) com
a palavra-chave EXPLAIN, a MariaDB exibe informações do otimizador sobre o plano de execução da consulta.
Ou seja, MariaDB explica como ele processaria o SELECT, UPDATE ou DELETE incluindo informações sobre como as
tabelas são unidas e em qual ordem. Na tabela abaixo é mostrado a descrição de cada coluna do explain:
Explain
A coluna “select_type” pode retornar os seguintes resultados:
DEPENDENT SUBQUERY
DEPENDENT UNION
DERIVED
MATERIALIZED
PRIMARY
SIMPLE
SUBQUERY
UNCACHEABLE SUBQUERY
UNCACHEABLE UNION
UNION
UNION RESULT
Nota: O EXPLAIN pode adquirir bloqueios de metadados da mesma maneira que SELECT faz, pois precisa conhecer
metadados de tabelas e, às vezes, dados também.
Explain
 A coluna “type” pode retornar os seguintes resultados:
Valor Descrição
All Uma verificação completa de tabela é feita para a tabela (todas as linhas são lidas). Isso é ruim
se a tabela for grande e tiver feito join com uma tabela anterior! Isso acontece quando o
otimizador não conseguiu encontrar nenhum índice utilizável para acessar linhas.
eq_ref Um índice unico é usado para encontrar as linhas. Este é o melhor plano possível para encontrar
a linha.
fulltext Um índice de texto completo é usado para acessar as linhas.
Index_merge Um acesso de 'intervalo' é feito para vários índices e as linhas encontradas são mescladas. A
coluna da chave mostra quais chaves são usadas.
Index_subquery Isso é semelhante ao ref, mas usado para sub-consultas que são transformadas em pesquisas-
chave.
index Uma varredura completa sobre o índice usado. Melhor do que TODOS, mas ainda é ruim se o
índice for grande e a tabela se juntar a uma tabela anterior.
unique_subquery Isso é semelhante ao eq_ref, mas usado para sub-consultas que são transformadas em
pesquisas-chave
Explain
A coluna “Extra” pode retornar os seguintes resultados:
Valor Descrição
Distinct Se fosse utilizada otimização distinta (remover linhas duplicadas). Isso é marcado apenas para a última tabela
no SELECT.
Full scan on NULL key A tabela é uma parte da consulta secundária e se o valor que é usado para corresponder a sub-consulta
será NULL, faremos uma verificação de tabela completa.
Impossible HAVING A cláusula HAVING usada sempre é falsa, de modo SELECTque não retornará nenhuma linha.
Impossible WHERE A cláusula WHERE usada sempre é falsa, de modo que o SELECT não retornará nenhuma linha. Por
exemplo: WHERE const_column=5 e const_column teve um valor de 4.
Range
checked for each record (in
dex map: ...)
Isso acontece somente quando não houve um bom padrão de padrão de uso, mas pode haver algum índice que possa
ser usado quando podemos tratar todas as colunas da tabela anterior como constantes. Para cada combinação de
linhas, o otimizador irá decidir qual índice usar (se houver) para buscar uma linha dessa tabela. Isso não é rápido, mas
mais rápido do que uma verificação de tabela completa que é a única outra escolha. O mapa de índice é uma máscara
de bits que mostra qual índice é considerado para cada condição de linha.
Using filesort Uso de order by no select.
Using index Somente o índice é usado para recuperar as informações necessárias da tabela. Não é necessário realizar uma busca
extra para recuperar o registro real.
Using index for group-by O índice está sendo usado para resolver uma consulta GROUP BYou DISTINCT. As linhas não são lidas. Isso é muito
eficiente se a tabela tiver muitas entradas de índice idênticas, pois as duplicatas são rapidamente saltadas.
Explain
O explain também pode executar verificação a partir de uma thread ativa, caso essa esteja efetuando alguma ação
passível de otimização o explain recupera a declaração que está sendo executada e gera as informações do
otimizador em tempo real.
Exemplo:
SHOW EXPLAIN FOR 1;
+------+-------------+-------+-------+---------------+------+---------+------+---------+----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-------+-------+---------------+------+---------+------+---------+----------------------+
| 1 | SIMPLE | tbl | index | NULL | a | 5 | NULL | 1000107 | Using index |
+------+-------------+-------+-------+---------------+------+---------+------+---------+----------------------+
1 row in set, 1 warning (0.00 sec)
Também pode ser utilizado para mostrar os índices que uma tabela possui:
Apêndice A: my.cnf
Neste apêndice mostraremos as variáveis mais utilizadas e qual a função essa variável possui:
Todas as variáveis do servidor MariaDB devem ser colocadas logo abaixo da linha [mysqld].
data_dir: Este parâmetro recebe o caminho o diretório para onde serão armazenado os arquivos de dados. O valor
padrão no Linux é /var/lib/mysql.
innodb_buffer_pool_size: Utiliza 80% da memória RAM disponível. Por padrão é inicializado com 70% da mamória.7
innodb_log_file_size: Ajuste esse parâmetro para 20% do tamanho do innodb_buffer_pool_size.
innodb_file_per_table: Este parâmetro identifica quantos arquivos de serão criados para cada tabela innodb, valor
padrão 1.
thread_cache_size: Quantidade de threads que são criadas na inicialização da instância.Este valor pode ser ajustado
dinamicamente.
tmp-table_size, max_heap_table_size: ambos precisam ser ajustados com o mesmo tamanho e previnem escrita em
disco. Ex:
tmp-table_size=1G
max_heap_table_size=1G
max_allowed_packet: valor máximo permitido por pacote, deve ser ajustado para o tamanho do maior pacote no
sistema. Um exemplo é setar 11 vezes o valor do seu maior arquivo BLOB.
Variaveis de replicação:
auto_increment_increment , auto_incremente_offset: utiliza as duas em conjunto quando utilizar replicação multi-master,
auto_incremente_offset deve receber um valor único para cada servidor e possui a função de não deixar gerar valores duplicados
em campos auto-increment.
binlog_format: Determina se a replicação é baseada em linha, statement ou ambos. Valor padrão: MIXED(> = MariaDB 10.2.4 )
STATEMENT(<= MariaDB 10.2.3 ).
slave_skip_erros: Quando um erro ocorre a replicação para, esta variável permite que uma lista de códigos de erro ignore e a replicação continue,
Usando all como uma opção permite que o slave continue replicando, independentemente do erro que ele encontre, muito cuidado ao aplicar essa
variável devido possibilidade de inconsistências na replicação.
sync_binlog: O MariaDB sincronizará seu arquivo de log binário com o disco após esses muitos eventos. O padrão é 0, caso em que o sistema
operacional lida com a descarga do arquivo no disco. 1 é a escolha mais segura, mas mais lenta, uma vez que o arquivo é descarregado após cada
gravação. Se o autocommit estiver habilitado, há uma gravação por declaração, caso contrário, há uma gravação por transação.
Mais informações:
https://mariadb.com/kb/en/library/replication-and-binary-log-server-system-variables/
https://mariadb.com/kb/en/library/server-system-variables/
Referências
Bem Forta, MariaDB Crash Course, 2011 Ed. Pearson
MariaDB Knowledge Base em https: https://mariadb.com/kb/en/
MySQL 5.7 Reference Manual

More Related Content

What's hot

#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
database-querry-student-note
database-querry-student-notedatabase-querry-student-note
database-querry-student-noteLeerpiny Makouach
 
Monitoreo de MySQL y PostgreSQL con SQL
Monitoreo de MySQL y PostgreSQL con SQLMonitoreo de MySQL y PostgreSQL con SQL
Monitoreo de MySQL y PostgreSQL con SQLEmanuel Calvo
 
Rman workshop short
Rman workshop shortRman workshop short
Rman workshop shortNabi Abdul
 
Ajuste (tuning) del rendimiento de SQL Server 2008
Ajuste (tuning) del rendimiento de SQL Server 2008Ajuste (tuning) del rendimiento de SQL Server 2008
Ajuste (tuning) del rendimiento de SQL Server 2008Eduardo Castro
 
MySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD TourMySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD TourRonald Bradford
 
Cacoo enterprise installation_manual
Cacoo enterprise installation_manualCacoo enterprise installation_manual
Cacoo enterprise installation_manualjoseig23
 
Coding For Config: Install Profile Development Using Features
Coding For Config: Install Profile Development Using FeaturesCoding For Config: Install Profile Development Using Features
Coding For Config: Install Profile Development Using FeaturesMyplanet Digital
 
你所不知道的Oracle后台进程Smon功能
你所不知道的Oracle后台进程Smon功能你所不知道的Oracle后台进程Smon功能
你所不知道的Oracle后台进程Smon功能maclean liu
 
PERFORMANCE_SCHEMA and sys schema
PERFORMANCE_SCHEMA and sys schemaPERFORMANCE_SCHEMA and sys schema
PERFORMANCE_SCHEMA and sys schemaFromDual GmbH
 
Installing oracle grid infrastructure and database 12c r1
Installing oracle grid infrastructure and database 12c r1Installing oracle grid infrastructure and database 12c r1
Installing oracle grid infrastructure and database 12c r1Voeurng Sovann
 
Building node.js applications with Database Jones
Building node.js applications with Database JonesBuilding node.js applications with Database Jones
Building node.js applications with Database JonesJohn David Duncan
 
10x Performance Improvements
10x Performance Improvements10x Performance Improvements
10x Performance ImprovementsRonald Bradford
 
Building a linux kernel
Building a linux kernelBuilding a linux kernel
Building a linux kernelRaghu nath
 
My two cents about Mysql backup
My two cents about Mysql backupMy two cents about Mysql backup
My two cents about Mysql backupAndrejs Vorobjovs
 

What's hot (20)

#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
 
Mysql
MysqlMysql
Mysql
 
Instalar MySQL CentOS
Instalar MySQL CentOSInstalar MySQL CentOS
Instalar MySQL CentOS
 
database-querry-student-note
database-querry-student-notedatabase-querry-student-note
database-querry-student-note
 
Monitoreo de MySQL y PostgreSQL con SQL
Monitoreo de MySQL y PostgreSQL con SQLMonitoreo de MySQL y PostgreSQL con SQL
Monitoreo de MySQL y PostgreSQL con SQL
 
Rman workshop short
Rman workshop shortRman workshop short
Rman workshop short
 
Habilitar repositorio EPEL RHEL
Habilitar repositorio EPEL RHELHabilitar repositorio EPEL RHEL
Habilitar repositorio EPEL RHEL
 
Ajuste (tuning) del rendimiento de SQL Server 2008
Ajuste (tuning) del rendimiento de SQL Server 2008Ajuste (tuning) del rendimiento de SQL Server 2008
Ajuste (tuning) del rendimiento de SQL Server 2008
 
MySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD TourMySQL Best Practices - OTN LAD Tour
MySQL Best Practices - OTN LAD Tour
 
Cacoo enterprise installation_manual
Cacoo enterprise installation_manualCacoo enterprise installation_manual
Cacoo enterprise installation_manual
 
Coding For Config: Install Profile Development Using Features
Coding For Config: Install Profile Development Using FeaturesCoding For Config: Install Profile Development Using Features
Coding For Config: Install Profile Development Using Features
 
你所不知道的Oracle后台进程Smon功能
你所不知道的Oracle后台进程Smon功能你所不知道的Oracle后台进程Smon功能
你所不知道的Oracle后台进程Smon功能
 
PERFORMANCE_SCHEMA and sys schema
PERFORMANCE_SCHEMA and sys schemaPERFORMANCE_SCHEMA and sys schema
PERFORMANCE_SCHEMA and sys schema
 
Installing oracle grid infrastructure and database 12c r1
Installing oracle grid infrastructure and database 12c r1Installing oracle grid infrastructure and database 12c r1
Installing oracle grid infrastructure and database 12c r1
 
Refcard en-a4
Refcard en-a4Refcard en-a4
Refcard en-a4
 
Building node.js applications with Database Jones
Building node.js applications with Database JonesBuilding node.js applications with Database Jones
Building node.js applications with Database Jones
 
10x Performance Improvements
10x Performance Improvements10x Performance Improvements
10x Performance Improvements
 
Building a linux kernel
Building a linux kernelBuilding a linux kernel
Building a linux kernel
 
CONTOH MEMBUAT TABEL XAMPP
CONTOH MEMBUAT TABEL XAMPPCONTOH MEMBUAT TABEL XAMPP
CONTOH MEMBUAT TABEL XAMPP
 
My two cents about Mysql backup
My two cents about Mysql backupMy two cents about Mysql backup
My two cents about Mysql backup
 

Similar to MariaDB training

MySQL 101 PHPTek 2017
MySQL 101 PHPTek 2017MySQL 101 PHPTek 2017
MySQL 101 PHPTek 2017Dave Stokes
 
MySQL InnoDB Cluster 미리보기 (remote cluster test)
MySQL InnoDB Cluster 미리보기 (remote cluster test)MySQL InnoDB Cluster 미리보기 (remote cluster test)
MySQL InnoDB Cluster 미리보기 (remote cluster test)Seungmin Yu
 
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert VanderkelenOSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert VanderkelenNETWAYS
 
TrinityCore server install guide
TrinityCore server install guideTrinityCore server install guide
TrinityCore server install guideSeungmin Shin
 
Introduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB ClusterIntroduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB ClusterI Goo Lee
 
Memcached Functions For My Sql Seemless Caching In My Sql
Memcached Functions For My Sql Seemless Caching In My SqlMemcached Functions For My Sql Seemless Caching In My Sql
Memcached Functions For My Sql Seemless Caching In My SqlMySQLConference
 
L203326 intro-maria db-techu2020-v9
L203326 intro-maria db-techu2020-v9L203326 intro-maria db-techu2020-v9
L203326 intro-maria db-techu2020-v9Tony Pearson
 
Mysql administration
Mysql administrationMysql administration
Mysql administrationbeben benzy
 
Watch Re-runs on your SQL Server with RML Utilities
Watch Re-runs on your SQL Server with RML UtilitiesWatch Re-runs on your SQL Server with RML Utilities
Watch Re-runs on your SQL Server with RML Utilitiesdpcobb
 
SQL Server 2000 Installation Rollout Backout Plan
SQL Server 2000 Installation Rollout Backout PlanSQL Server 2000 Installation Rollout Backout Plan
SQL Server 2000 Installation Rollout Backout Plan► Supreme Mandal ◄
 
Asian Spirit 3 Day Dba On Ubl
Asian Spirit 3 Day Dba On UblAsian Spirit 3 Day Dba On Ubl
Asian Spirit 3 Day Dba On Ublnewrforce
 
SQL_SERVER_BASIC_1_Training.pptx
SQL_SERVER_BASIC_1_Training.pptxSQL_SERVER_BASIC_1_Training.pptx
SQL_SERVER_BASIC_1_Training.pptxKashifManzoorMeo
 

Similar to MariaDB training (20)

MySQL 101 PHPTek 2017
MySQL 101 PHPTek 2017MySQL 101 PHPTek 2017
MySQL 101 PHPTek 2017
 
Mysql all
Mysql allMysql all
Mysql all
 
My SQL 101
My SQL 101My SQL 101
My SQL 101
 
MySQL InnoDB Cluster 미리보기 (remote cluster test)
MySQL InnoDB Cluster 미리보기 (remote cluster test)MySQL InnoDB Cluster 미리보기 (remote cluster test)
MySQL InnoDB Cluster 미리보기 (remote cluster test)
 
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert VanderkelenOSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
 
TrinityCore server install guide
TrinityCore server install guideTrinityCore server install guide
TrinityCore server install guide
 
Raj mysql
Raj mysqlRaj mysql
Raj mysql
 
Mysql all
Mysql allMysql all
Mysql all
 
Introduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB ClusterIntroduction to MySQL InnoDB Cluster
Introduction to MySQL InnoDB Cluster
 
Memcached Functions For My Sql Seemless Caching In My Sql
Memcached Functions For My Sql Seemless Caching In My SqlMemcached Functions For My Sql Seemless Caching In My Sql
Memcached Functions For My Sql Seemless Caching In My Sql
 
Maria db
Maria dbMaria db
Maria db
 
L203326 intro-maria db-techu2020-v9
L203326 intro-maria db-techu2020-v9L203326 intro-maria db-techu2020-v9
L203326 intro-maria db-techu2020-v9
 
Mysql administration
Mysql administrationMysql administration
Mysql administration
 
Watch Re-runs on your SQL Server with RML Utilities
Watch Re-runs on your SQL Server with RML UtilitiesWatch Re-runs on your SQL Server with RML Utilities
Watch Re-runs on your SQL Server with RML Utilities
 
SQL Server 2000 Installation Rollout Backout Plan
SQL Server 2000 Installation Rollout Backout PlanSQL Server 2000 Installation Rollout Backout Plan
SQL Server 2000 Installation Rollout Backout Plan
 
Asian Spirit 3 Day Dba On Ubl
Asian Spirit 3 Day Dba On UblAsian Spirit 3 Day Dba On Ubl
Asian Spirit 3 Day Dba On Ubl
 
SQL_SERVER_BASIC_1_Training.pptx
SQL_SERVER_BASIC_1_Training.pptxSQL_SERVER_BASIC_1_Training.pptx
SQL_SERVER_BASIC_1_Training.pptx
 
Firebird
FirebirdFirebird
Firebird
 
Introduction Mysql
Introduction Mysql Introduction Mysql
Introduction Mysql
 
Mysql introduction
Mysql introduction Mysql introduction
Mysql introduction
 

Recently uploaded

Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsPrecisely
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 

Recently uploaded (20)

Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power Systems
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 

MariaDB training

  • 1. MariaDB Training Por Samuel dos Santos Tolentino Dba Oracle / Sql Server / MySql samuelsantostolentino@gmail.com samuel.tolentino@lcs.com.br Linkedin
  • 2. Conteúdo  Lição 1: Instalação e configuração do MariaDB Pos-instalação  Lição 2: Administração  Lição 3: Banco de dados  Lição 4: Manipulação de dados e estruturas  Lição 5: Índices e estatísticas de tabela  Lição 6: Controle de transações  Lição 7: Gerenciando duplicidade  Lição 8: Métodos de backup e recuperação  Lição 9: Replicação  Lição 10: Auditoria  Lição 11: Procedures , functions e triggers  Lição 12 Tuning SQL: Explain  Apêncices
  • 3. MariaDB Training  Lição 1:Instalação e configuração do MariaDB Pos-instalação • Instalação do Mariadb • Atualização  Lição 2: Administração • Gerenciando usuários e privilégios. • Arquivo de configuração (my.cnf) • Comandos administrativos  Lição 3: Banco de dados • Criação de banco de dados • Exclusão de banco de dados
  • 4. MariaDB Training  Lição 4: Manipulação de dados e estruturas • Tipos de dados • Select, Insert, update, delete • Expressões Regulares • Funções simples • Funções de agrupamento • Operadores de conjunto (Set operators) • Sub query • Operadores IN, ANY, ALL • Views • Criação e alteração e esclusão de tabelas • Instrução Truncate table • Criação de tabela temporária • Exclusão de tabela temporária
  • 5. MariaDB Training  Lição 5: Índices e estatísticas de tabela • Criação de índice • Exclusão de índice • Rebuild índice • Estatísticas de tabela  Lição 6: Controle de transações • Estrutura das transações • Commit, Rolback e Start transaction • Processlist  Lição 7: Gerenciando duplicidade • Utilizando insert • Utilizando Insert ignore • Utilizando Distinct
  • 6. MariaDB Training  Lição 8: Métodos de backup e recuperação • Ferramentas de backup • Utilizando Select into out file(Aquivo externo)  Lição 9: Replicação • Configuração de replicação master-slave • Configuração de replicação master-master • Monitoração da replicação • Troubleshooting de replicação  Lição 10: Auditoria • Plugins • Instalação e configuração do audit plugin.  Lição 11: Procedures , functions e triggers • Visão geral • Exemplos  Lição 11: Tuning SQL • Explain
  • 7. Lição 1: Instalação do MariaDB Os seguintes passos irão mostrar como efetuar a instalação do MariaDB no CentOs 7 utilizando o repositório MariaDB: 1. Logue no SO com as credenciais de root: Digite o comando: touch /etc/yum.repos.d/MariaDB.repo <enter> vi /etc/yum.repos.d/MariaDB.rep <enter> Adicione o conteúdo abaixo no arquivo: [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 Salve o arquivo.<esc> :wq <enter>
  • 8. Lição 1:Instalação do MariaDB 2. Instale o MariaDB pelo utilitário yum: sudo yum install MariaDB-server MariaDB-client -y 3. Inicie o serviço: # systemctl start mariadb ou # systemctl start mysql 4. Execute o comando mysql_secure_installation para configurar a instância. [root@localhost ~]# mysql_secure_installation Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation.
  • 9. Lição 1:Instalação do MariaDB You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success! Remove anonymous users? [Y/n] y ... Success! Remove test database and access to it? [Y/n] n ... skipping. Disallow root login remotely? [Y/n] y ... Success! Reload privilege tables now? [Y/n] y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure.
  • 10. Lição 1: Acessando o banco de dados via command line  Abra o terminal no Linux e digite: mysql –uroot -p onde -u indica o usuário e -p a senha conforma abaixo: [root@teampass ~]# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or g. Your MariaDB connection id is 64 Server version: 10.0.32-MariaDB MariaDB Server Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. MariaDB [(none)]>
  • 11. Lição 1:Alterando o diretório de dados # vi /etc/selinux/config ... SELINUX=disabled ... # reboot # systemctl stop mysql # mkdir /mysql # chown -R mysql:mysql /mysql # vi /etc/my.cnf ... datadir=/mysql ... # cp -R -p -v /var/lib/mysql/* /mysql/ # systemctl start mysql
  • 12. Lição 1: Atualização do MariaDB  Para Atualizara versão do MariaDB basta alterar o repositório do yum (mariadb.repo). # vi /etc/yum.repos.d/mariadb.repo Altere a versão no repositório, salve. [root@teampass ~]# systemctl stop mysql [root@teampass ~]# sudo yum update (demora mais pois irá atualizar todo o S.O.) ou yum update MariaDB* [root@teampass ~]# systemctl start mysql [root@teampass ~]# mysql_upgrade -u root -p
  • 13. Lição 2: Gerenciando Usuários Sintaxe para criação de usuário no MariaDB: CREATE USER ben@localhost IDENTIFIED BY 'p@$$w0rd'; Onde: @localhost indica que o usuário ben só pode conectar ao banco de dados a partir do servidor local. Remoção de usuário: Drop USER ben; Renomear usuário: remane user usuario_a to usuario_b ; Alterar a senha do usuário: SET PASSWORD FOR usuario_a = Password('n3w p@$$w0rd');
  • 14. Lição 2: Privilégios  Após a criação da conta de usuário x, para que este possa acessar os objetos dos bancos de dados é necessário conceder os devidos privilégios. Exemplo: grant select, insert, update, delete on database1 to user@localhost; grant select, insert, update, delete on database1 to user@localhost with grant option; Flush privileges;  Para verificar os privilégios concedidos a um determinado usuário: SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER; SHOW GRANTS FOR CURRENT_USER(); Remover privilégios: REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ... O comando “show privileges “ mostra os privilégios suportados pelo MariaDB. Exemplo no próximo slide:
  • 16. Lição 2: Privilégios Roles Uma role server para agrupar uma serie de privilégios facilitando o gerenciamento na concessão e retirada de privilégios. Sintaxe: CREATE [OR REPLACE] ROLE [IF NOT EXISTS] role [WITH ADMIN {CURRENT_USER | CURRENT_ROLE | user | role}] Exemplos: create role developer whith admin smith (cria a role com usuário admin smith) grant create table on database1 to developer; (Concede o privilégio de criar tabela) GRANT SELECT ON data.* TO developer; (Concede privilegio no banco de dados data para a role) grant developer to user1; (Concede acesso a todas a permissões e a role possui) drop role developer; (Remove a role do banco de dados) Documentação: Grant Revoke Roles Conforme imagem abaixo é preciso executar o comando set role para que e role tenha efeito.
  • 17. Lição 2: Arquivo de configuração O arquivo de configuração (my.cnf) é onde são armazenadas as configurações de inicialização da instância, toda vez que o database é iniciado esse arquivo é lido e os valores das variáveis do sistema são carregados na instância. A maioria das variáveis podem ser configuradas pelo arquivo my.cnf, mas a maioria não estarão visíveis no arquivo, quando isso ocorre a instância é inicializada a partir de valores padrão. Algumas variáveis podem ser alteradas dinamicamente, outras devem ser alteradas no arquivo my.cnf e após reiniciar a instância. O caminho padrão desse arquivo é /etc/my.cnf (Linux). Exemplo de arquivo de configuração: # Exemplo de arquivo de configuração mysql. [servidor cliente] socket = / tmp / mysql-dbug.sock porta = 3307 # Isso será passado para todos os clientes mysql [cliente] senha = my_password # Aqui estão as entradas para alguns programas específicos # Os valores a seguir assumem que você tem pelo menos 32M de ram
  • 18. Lição 2: Arquivo de configuração # O servidor MySQL [mysqld] temp-pool key_buffer_size = 16M datadir = / my / mysqldata loose-innodb_file_per_table [mysqldump] max_allowed_packet = 16M [mysql] no-auto-rehash loose-abort-source-on-error  Todas as opções do servidor em my.cnf devem ser após a seguinte linha: [mysqld]  O comando “show variables” lista todas as variáveis de sistema. https://mariadb.com/kb/en/library/server-system-variables/
  • 19. Lição 2: Comandos administrativos A lista abaixo mostra alguns comandos importantes que são mais utilizados:  Use [database name] : seleciona um database padrão para a sessão atual.  Show databases: lista todos os databases na instância atual.  Show tables: Lista todas as tabelas não temporárias do database atual selecionado.  Show columns from [table] ou describe ou desc [table]:Mostra a estrutura de colunas da tabela informada.  Show table status like [‘table’]g: Fornece informações de tabelas não temporárias.  Show erros, Show warnings: Exibe erros, avisos e notas.
  • 20. Lição 2: Mysqladmin  O mysqladmin é um utilitário de administração que serve para auxiliar na administração da instância e pode ser usado para: • Monitorar o que os clients do MariaDB estão fazendo (lista de processos) • Obteter estatísticas de uso e variáveis ​​do servidor MariaDB • Criar / remover bases de dados • Redefinir logs, estatísticas e tabelas • Eliminar as consultas em execução. • Parar o servidor (desligamento) • Start / stop slaves • Verificar se o servidor está ativo (ping) https://mariadb.com/kb/en/library/mysqladmin/ Exemplos: [root@master ~]# (mysqladmin -uroot -p shutdown Efetua um desligamento limpo na instância) [root@master ~]# mysqladmin -u root -p create test (Cria um database) [root@master ~]# mysqladmin -u root -p --relative --sleep=1 extended-status | grep -v " 0 “ (Lista variaveis de systema e seus valores) [root@master ~]# mysqladmin -uroot -proot variables | grep datadir (consulta variável de sistema) [root@master ~]#
  • 21. Lição 3: Criação de banco de dados Create database sintaxe: CREATE [OR REPLACE] {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ... create_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name Exemplo: Create database if not exists teste; MariaDB [(none)]> show create database teste; +----------+------------------------------------------------------------------+ | Database | Create Database | +----------+------------------------------------------------------------------+ | teste | CREATE DATABASE `teste` /*!40100 DEFAULT CHARACTER SET latin1 */ | +----------+------------------------------------------------------------------+ 1 row in set (0.00 sec) MariaDB [(none)]>
  • 22. Lição 3: Character set e Collations Um Character set é conjunto de caracteres enquanto uma Collation são as regras para comparar e classificar um conjunto de caracteres específico. Por exemplo, um subconjunto de um conjunto de caracteres pode consistir nas letras A, Be C. Um agrupamento padrão pode definir estes como aparecendo em uma ordem ascendente de A, B, C. Se o character set for omitido na criação do database o MariaDB assume por padrão o latin1. https://mariadb.com/kb/en/library/character-set-and-collation-overview/
  • 23. Licão 3: Alteração e Exclusão do banco de dados Para excluir o banco de dados: Sintaxe: DROP {DATABASE | SCHEMA} [IF EXISTS] db_name Exemplo: MariaDB [(none)]> Drop database teste; Query OK, 0 rows affected (0.00 sec) Para alterar o banco de dados: Sintaxe: ALTER {DATABASE | SCHEMA} [db_name] alter_specification ... ALTER {DATABASE | SCHEMA} db_name UPGRADE DATA DIRECTORY NAME alter_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name Exemplo: ALTER DATABASE test CHARACTER SET = 'utf8' COLLATE = 'utf8_bin';
  • 24. Lição 4: SQL O que é SQL? SQL significa Structure Query Language, ou seja, linguagem de consulta estruturada, que foi desenvolvida especificamente para comunicação de sistemas de banco de dados: • Tem o objetivo de fornecer uma forma simples de ler e gravar informações no banco de dados. • A forma mais utilizada de SQL é o padrão ANSI (American National Standards Institute), embora a maioria dos SGBDs tenha seu próprio padrão SQL como Oracle e SQL Server, nos últimos anos anos cada vez mais tem se visto o uso do padrão ANSI. https://www.ansi.org/about_ansi/introduction/introduction?menuid=1
  • 25. Lição 4: Colunas e Tipos de dados  Coluna: uma coluna é um campo único na tabela. Todas as tabelas possuem uma ou varias colunas. As colunas podem armazenar diversos tipos de informação como: numéricos, binários, alfanuméricos, long, data e hora etc.. Para informações detalhadas consulte a documentação do MariaDB.  Linha: os dados são armazenados nas tabelas em forma de linhas, cada registro salvo no banco de dados é armazenado uma nova linha na tabela.  Null: Quando uma coluna tem a informação null significa a ausência de valor, ou seja, não possui informação armazenada.  Primary Keys: uma primary key é uma ou um conjunto de colunas cujos valores únicos identificam cada linha na tabela, os valores de uma primary key não podem se repetir.  Foreign Keys: uma foreign key é uma ou mais colunas que referenciam uma coluna em outra tabela onde a outra tabela é denominada tabela pai e a tabela que contém a foreign key tabela filho.  Unique Keys: Uma unique key indica que cada registro do campo que está como unique não pode se repetir. https://mariadb.com/kb/en/library/data-types/
  • 26. Lição 4 Manipulação de dados: Select.  O select statement é um comando utilização para ler dados de uma ou mais tabelas do banco de dados. Basicamente quando se utiliza o comando select no mínimo duas informações são necessárias: Quais informações ler do banco e onde estão. Sintaxe:
  • 27. Exemplos: Esse exemplo retorna todas as linhas e colunas da tabela customer. Onde * pode ser utilizado para retornar todos os registros das tabelas. O exemplo ao lado recupera apenas duas colunas da tabela, mas todas as linhas ainda. Para limitar o número de linhas podemos utilizar a clausula where ou o comando limit. Exemplo no próximo slide.
  • 28. O primeiro exemplo acima recupera os dados de um id especificado no where já o segundo traz todos os registros mas limita o resultado para cinco linhas.  A clausula where é utilizada para dar uma condição para a query no intuito de restringir o número de registros afetados, ou recuperar apenas registros específicos.  O comando limit apenas limita o número de linhas retornadas
  • 29. Lição 4 Manipulação de dados: Expressões regulares Expressões regulares permitem que a MariaDB execute uma correspondência de padrões complexos em uma string. Em muitos casos, a combinação de padrões simples fornecida por LIKE é suficiente. Exemplo: https://mariadb.com/kb/en/library/regexp/ Mais: https://mariadb.com/kb/en/library/regexp/
  • 30. Lição 4: Manipulação de dados: insert, update, delete  O comando insert é utilizado para inserir novos registros (linhas) na tabela.  O comando update é utilizado para modificar os valores existentes de um ou mais registros da tabela.  O comando delete é utilizado para apagar uma ou mais registros da tabela. Exemplos: MariaDB [(none)]> INSERT INTO customers(cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country,cust_contact,cust_email) MariaDB [(none)]> VALUES('Pep E. LaPew','100 Main Street','Los Angeles','CA','90046','USA',NULL,NULL); MariaDB [(none)]> INSERT INTO Customers VALUES(NULL,'Pep E. LaPew','100 Main Street','Los Angeles','CA','90046','USA',NULL,NULL); MariaDB [(none)]> Update customer set cust_address= ‘new address’ where custid = 1; MariaDB [(none)]> Update customer set cust_address= ‘new address’ , custname=‘new name’ where custid = 1; MariaDB [(none)]> Delete from customers where custid=1; Nota: Muito cuidado! nos comandos delete e update, caso a cláusula where seja omitida, o comando irá apagar ou alterar todos os registros(linhas) da tabela. Falaremos mais sobre a clausula where nos próximos capítulos.
  • 31. Lição 4 Manipulação de dados: Clausulas like e order by  A clausula order by é utilizada para ordenar o resultados das consultas que pode ser ascendente por padrão, ou descendente. A clausula order by deve ser inserida sempre no final da query.  A clausula like é utilizada para comparação de igualdade entre strings, para encontrar um determinado padrão de string. Exemplos: > Select * from customer where first_name like ‘A%’ > Select * from customer where first_name like ‘B_%a’ > Select First_name, Last_name from employess order by first_name desc. > Select First_name, Last_name from employess order by first_name 2;
  • 32. Lição 4 Manipulação de dados: Joins Utilizamos Joins quando queremos ler dados em mais de uma tabela. Utilizaremos o padrão ANSI para exemplificar. A seguir alguns tipos de joins utilizados: Inner join: Relacionamento de igualdade entre duas tabelas. Self join: Auto Relacionamento, ou seja, uma tabela se relacionando com ela mesma. Left join: Produz um conjunto de resultados com todas as linhas da tabela na "esquerda" (t1) mesmo que não haja correspondência na tabela da direita. Se nenhuma correspondência for encontrada, todas as colunas da tabela direita serão definidas com valor NULL. Right Join: O oposto de left join, produz um conjunto de resultados com todas as linhas na tabela direita mesmo que não haja correspondência na tabela da esquerda. Se nenhuma correspondência for encontrada, todas as colunas da tabela da esquerda serão definidas com o valor NULL. Cross join: produz um conjunto de resultados em que cada linha em cada tabela é unida a cada linha da outra tabela. Isso também é chamado de produto cartesiano . Na MariaDB, a palavra-chave CROSS pode ser omitida, pois não faz nada. Qualquer JOIN sem uma cláusula ON ou where resulta em um CROSS JOIN. https://mariadb.com/kb/en/library/joining-tables-with-join-clauses/ https://mariadb.com/kb/en/library/more-advanced-joins/
  • 33. Exemplos: Exemplo join: Select e.emp_name, d.department_name from employees e join departments d on e.department_id=d.departmentid; Exemplo left join; Select e.emp_name, d.department_name from employees e left join departments d on e.department_id=d.departmentid; Exemplo right join Select e.emp_name, d.department_name from employees e right join departments d on e.department_id=d.departmentid; Exemplo self join: Select e.empname as employee, m empname as manager from employees e join employees m on e.managerid =m.employeeid Exemplo cross join: Select * from departments cross join employees
  • 34. Lição 4 Manipulação de dados: Funções simples Funções simples são funções criadas no banco de dados para efetuar diversas funções como conversões de dados numéricos para string, string para data e vice-versa, comparações e manipulação de strings. A seguir alguns exemplos: Funcão Descrição INSTR Retorna a posição do primeiro exemplo de uma subsequência UPPER Converte o texto para caixa alta(letras maiúsculas) LOWER Converte o texto para caixa alta(letras minúsculas) CAST Converte vários tipos de dados, números para texto, data para texto e vice versa REPLACE Substitui caracteres determinados de uma string. DATEDIFF Retorna a diferença em dias entre duas datas. TIMESTAMPDIFF Retorna a diferença entre duas datas em minutos, horas,dias. Essa fução requer 3 parâmetros: o tipo de dado retornado e data inicio e fim. CONCAT Junta duas ou mais strings concatenadas. DATE_FORMAT Ele formata a data de acordo com a cadeia de formato especificado. SUBSTRING Retorna uma string a partir de uma ou duas posições ex: SUBSTRING(str,pos,len).
  • 36. Lição 4 Manipulação de dados: Funções de agrupamento.  As funções de agrupamento servem para sumarizar dados fazendo cálculos como soma, média obter valores máximo e mínimo das colunas sem ter que recuperar todas as linhas. Em conjunto com as funções de agrupamento utilizamos as clausulas group by e having. Exemplos: 1 - Select max(salary) from employees; 2 - Select min(id) from employees; 3 - Select count(*), department from cgroup by department; 4 - Select avg(salary) from employees; 5 - Select count(employee_id), department from employees group by department having count(department) > 5; No exemplo 1 e 2 o a consulta retorna o maior e o menor salário, no exemplo 2 o resultado irá mostrar a contagem de registros da tabela employees agrupando por departamento. No exemplo 5 acima a consulta irá retornar a quantidade de empregados por departamento nos departamento que tenham mais de 5 empregados. Nota: as colunas que não tem função de grupo devem estar especificadas no group by.
  • 37. Lição 4: Operadores de conjunto Os operadores de conjunto( set operators) são utilizados com base no livro SQL-99 complete, dessa forma o conteúdo não se aplica diretamente ao MariaDB. Entre os set operators estão: Union, except e insersect. <query expression> {UNION | EXCEPT | INTERSECT} [ ALL | DISTINCT ] [ CORRESPONDING [ BY (<Column name list>) ] ] <query expression> Exemplos: SELECT employee_name, salary FROM Employees UNION SELECT employee_name, salary FROM EmployeesHist; SELECT boss_name, salary FROM Bosses EXCEPT SELECT employee_name, salary FROM Employees; SELECT boss_name, salary FROM Bosses INTERSECT SELECT employee_name, salary FROM Employees;
  • 38. CREATE TABLE Villas ( county char(5), acreage DECIMAL(4,2), price DECIMAL(8)); CREATE TABLE Mansions ( owner char(5), acreage DECIMAL(4,2), house_rating INT, price DECIMAL(8)); villas values(‘Lacombe’,39.00,10000); Insert into villas values(‘Stettler’,15.78,90000); Insert into villas values(‘Roseland’,15.77,20000); Insert into villas values(‘Victoria’,null,null); Insert into villas values(‘Victoria’,null,null); Insert into mansions values ('Bodnar',15.77,NULL,200000); Insert into mansions values ('Melnyk',39.00,15,900000); Insert into mansions values ('Skoreyko',39.00,0,900000); Insert into mansions values ('Mudriy',NULL, NULL,NULL); Exemplos: SELECT * FROM Villas UNION DISTINCT SELECT * FROM Villas ORDER BY acreage DESC; SELECT price FROM Villas EXCEPT ALL SELECT price FROM Mansions; SELECT DISTINCT price FROM Villas EXCEPT ALL SELECT DISTINCT price FROM Mansions; SELECT * FROM Villas INTERSECT CORRESPONDING SELECT * FROM Mansions; SELECT acreage, 'Villa' AS type FROM Villas UNION SELECT acreage, 'Mansion' AS type FROM Mansions;
  • 39. Lição 4: Sub querys Sub querys são usadas para especificar um valor (uma sub consulta escalar, que retorna um valor), uma linha (a sub consulta de linha, que retorna uma linha) ou uma Tabela (a sub consulta da tabela, que retorna uma tabela de resultados) . É possível utilizar sub consultas em colunas no select, na clausula where, having e from. Exemplos: SELECT Table_1 . column_1 , Table_1 . column_2 FROM Table_1 WHERE Table_1 . column_1 = ( SELECT column_1 FROM Table_2 WHERE Table_2 . column_1 = 5 ); SELECT e.`empname`,(SELECT depname FROM departments d WHERE d.id= e.`depid` ) FROM employees e (esta sub query é denominada sub query correlacionada onde a sub consulta será executada para cada resultado na consulta original)
  • 40. Lição 4: Operadores IN, ANY, ALL, between Os operadores in, any e all são utilizados na clausula where quando a condição da query tiver mais de um resulado para comparar. Exemplo: SELECT salary FROM employees WHERE salary IN(SELECT AVG(salary) FROM employees GROUP BY depid); Select salary from employees where salary > any (select AVG(salary) from employees group by departments); Select salary from employees where salary > all (select AVG(salary) from employees group by departments); SELECT salary FROM employees WHERE salary between 1000 and 4000; Onde: • any retorna registros onde o salário é maior do que o menor valor. • In retorna retorna registros onde o salário seja igual a algum dos os valores retornados na subconsulta. • All retorna registros onde o salário é maior do que o maior valor. • Between retorna registros onde o salário esteja entre 1000 e 4000.
  • 41. Lição 4 Views Views são consideradas tabelas virtuais, diferente das tabelas que contém dados, as views não possuem dados, as views possuem queries que retornam os dados dinamicamente quando são utilizadas. Por que utilizar views? • Para reuso de consultas SQL; • Para segurança, restringindo campos da tabela; • Para simplificar operações sql complexas, uma vez escrita a consulta sql, ela pode ser facilmente utilizada sem a necessidade de saber os detalhes da consulta. • Para modificar a formatação das informações, view podem formatar e apresentar dados diferente de como estão nas tabelas.
  • 42. Sintaxe: CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER | role | CURRENT_ROLE }] [SQL SECURITY { DEFINER | INVOKER }] VIEW [IF NOT EXISTS] view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION] Exemplo: Create or replace view v_name_view as Select first_name, last_name, phone_number from customer; Select * from v_name_view; Nota: Não é possível criar mais de uma view com o mesmo nome, a utilização da palavra replace sobrescreve a view caso já exista uma com o mesmo nome, já [IF NOT EXISTS] só permite criar a view caso não exista uma view com o mesmo nome.
  • 43. Criação de view com check option Por padrão é possível atualizar uma tabela a partir de uma view, desde que na view não contenha joins ou agrupamentos, a palavra chave with grant option previne a atualização da tabela a partir da view a menos que a clausula where seja verdadeira. Exemplo: Create or replace view v_view_name as MariaDB [teste]> CREATE VIEW view_check1 AS SELECT * FROM test WHERE cod <100; CREATE VIEW view_check2 AS SELECT * FROM view_check1 WHERE cod > 10 with local check option; Esta inserção é bem sucedida, uma vez que view_check2 apenas verifica a inserção contra view_check2, e a cláusula WHERE avalia como verdadeira ( 150 é maior que10). CREATE VIEW view_check3 AS SELECT * FROM view_check1 WHERE cod > 10 with cascaded check option; INSERT INTO view_check3 VALUES (150); Esta inserção falha, conforme view_check3 verifica a inserção contra ambas view_check3 as views subjacentes. A cláusula WHERE para view_check1 avalia como falso ( 150 é maior que 10, mas 150 não é maior que100), de modo que a inserção falha. O select abaixo mostra se a view é atualizável, ou seja, se é possível manipular os dados da tabela; MariaDB [teste]> SELECT TABLE_NAME,IS_UPDATABLE FROM INFORMATION_SCHEMA.VIEWS; | TABLE_NAME | IS_UPDATABLE | +-------------+--------------+ | view_check1 | YES | | view_check2 | YES | | view_check3 | YES | +-------------+--------------+ 3 rows in set (0.01 sec)
  • 44. Lição 4 Criação de tabela O comando create table cria uma tabela com o nome especificado, para criar tabela é preciso ter privilégio de create table ou create table no banco de dados especifico. Sintaxe: CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options ]... [partition_options] CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options ]... [partition_options] select_statement CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name { LIKE old_table_name | (LIKE old_table_name) } select_statement: [IGNORE | REPLACE] [AS] SELECT ... Mais detalhes: https://mariadb.com/kb/en/library/create-table/
  • 45. Exemplos: USE teste; Create table t1 (id int auto_increment primary key , name varchar(20) not null, phone varchar(20) ); O script acima cria uma tabela com campo id como chave primaria e auto incremento, ou seja, ao inserir registros não é preciso informar valor para o campo id, not null indica que o campo não pode ser inserido sem dados. USE teste; CREATE TABLE t2 (id INT , cod INT, NAME VARCHAR(20) NOT NULL, phone VARCHAR(20), PRIMARY KEY (id,cod) foreign key (cod) references t1(cod) ); O script acima mostra a criação da tabela com mais de uma coluna fazendo parte da primary key e criação de foreign key.
  • 46. Lição 4 alteração de estrutura(Alter table) O comando alter table serve para alterar a estrutura da tabela como por exemplo adicionar ou remover colunas como também alterar o tipo de dado da coluna, adicionar primary key, foreign Keys Exemplos: MariaDB [teste]> use teste; MariaDB [teste]> alter table t1 add (email varchar(50) ); -- (adiciona uma coluna) MariaDB [teste]> alter table t2 drop column phone; -- (remove a coluna) MariaDB [teste]> Alter table t1 modify name varchar(50); -- (modifica o tamanho da coluna) MariaDB [teste]> alter table t1 add constraint t1_fk foreign key (cod) references t2(cod); --(adiciona foreign key) MariaDB [teste]> alter table t2 add constraint t2_pk primary key(id); -- (adiciona primary key); Nota: cada tabela pode conter apenas uma primary key, mas várias foreign keys, pode ter uma ou mais coluna compondo uma primary key; Mais exemplos: https://mariadb.com/kb/en/library/alter-table/
  • 47. Lição 4 Drop e Truncate table O comando truncate table recria toda a estrutura da eliminando todos os registros, diferente do comando drop table o truncate não permite que seja efetuado rollback das alterações. Falaremos mais de rollback no capitulo controle de transações. Exemplo Drop table: MariaDB [teste]> use teste; MariaDB [teste]> drop table test; Query OK, 0 rows affected (0.01 sec) Exemplo Truncate table: MariaDB [teste]> use teste; MariaDB [teste]> truncate table t1; ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`teste`.`t2`, CONSTRAINT `t2_fk` FOREIGN KEY (`cod`) REFERENCES `teste`.`t1` (`id`)) MariaDB [teste]> Nota: caso a tabela possua integridade referencial não é permitido executar o comando, nesse caso primeiro deve-se eliminar as foreign na tabela filho, conforme exemplo abaixo. Caso exista coluna alto increment, a sequencia de incremento é reiniciada. MariaDB [teste]> alter table t2 drop foreign key t2_fk; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 MariaDB [teste]> MariaDB [teste]> truncate table t1; Query OK, 0 rows affected (0.02 sec)
  • 48. Lição 4 tabelas temporárias Tabelas temporárias quando criadas existem até o termino da sessão atual, após o encerramento da sessão a tabela é eliminada. Para excluir uma tabela temporária basta executar o comando drop temporary table table_name; Exemplo:
  • 49. Lição 5: Índices Índices são utilizados para melhorar a velocidade em que uma consulta é retornada, existem quatro formas de criar índices: chaves primárias, índices únicos, índices simples e índices de texto completo. • Índices de Primary key: Toda vez que uma tabela é criada com chave primaria (Primary key), automaticamente é criado um unique índex na coluna ou nas colunas que compõem a chave primária. • Índices únicos: quando é criado uma unique key também é criado um índice único na coluna indicada. • Índices simples: índices de colunas que não são únicas. • Um índice de texto completo no MariaDB (full text index) é um índice do tipo FULLTEXT, e permite mais opções ao procurar partes de texto de um campo. Os índices de texto completo podem ser usados apenas com as tabelas MyISAM e Aria , no MariaDB 10.0.5, com as tabelas InnoDB no MariaDB 10.0.15 e podem ser criadas somente para colunas CHAR , VARCHAR ou TEXT . As tabelas particionadas não podem conter índices de texto completo, mesmo que o mecanismo de armazenamento os suporte. https://mariadb.com/kb/en/library/fulltext-index-overview/ • Nota: Unique índices indicam que as informações nas colunas não podem se repetir tanto em primary Keys como Unique Keys.
  • 50. Exemplos Os índices podem ser criados ou adicionados nas tabelas da seguinte forma: Índices únicos: MariaDB [hr]> ALTER TABLE Employees ADD UNIQUE `EmpCode`(`employee_id`); ou MariaDB [hr]> CREATE UNIQUE INDEX emp_email ON employees(email); Indices simples: MariaDB [hr]> CREATE INDEX emp_email ON employees(email); Para remover índices: MariaDB [hr]> alter table employees drop index emp_email;
  • 51. Full text index CREATE TABLE ft2(copy TEXT,FULLTEXT(copy)) ENGINE=MyISAM; INSERT INTO ft2(copy) VALUES ('MySQL vs MariaDB database'), ('Oracle vs MariaDB database'), ('PostgreSQL vs MariaDB database'), ('MariaDB overview'), ('Foreign keys'), ('Primary keys'), ('Indexes'), ('Transactions'), ('Triggers'); Nesse exemplo, tudo o que está associado à palavra "banco de dados" é retornado quando a expansão da consulta é usada, mesmo que não seja explicitamente solicitada. Mais exemplos: https://mariadb.com/kb/en/library/fulltext-index-overview/
  • 52. Lição 5: Rebuild de Índices Para efetuar o rebuild de índice no MariaDB, deve-se utilizar o comando optimize table que possui duas funções: Desfragmentar a tabela e atualizar os índices de tabelas, porém tabelas InnoDB não suportam o optimize table. Portanto o comando abaixo é um atalho para efetuar a organização completa da tabela mais a análise. Onde o parâmetro –o indica o database. Nota: O comando optimize table loca a tabela, logo deve –se ter cautela ao executar.
  • 53. Lição 5: estatísticas de tabela A declaração SHOW TABLE_STATISTICS foi introduzida no MariaDB 5.2 como parte do recurso Estatísticas de usuário . Foi removido como uma declaração separada no MariaDB 10.1.1 , mas efetivamente substituído pela SHOW information_schema_table declaração genérica . O comando SHOW TABLE_STATISTICS G tabela mostra as estatísticas sobre o uso da tabela Exemplo:
  • 54. Lição 6: Controle de transações "Uma transação SQL (transação) é uma sequência de execuções de instruções SQL que são atômicas em relação à recuperação. Ou seja, o resultado de execução é completamente bem-sucedido ou não tem efeito em nenhum efeito.(MariaDB) O mecanismo de armazenamento InnoDB suporta transações compatíveis com ACID* . Existem vários comandos para controle de transações no MariaDB. Nesse treinamento iremos falar de:  Commit, Rollback, Start transaction e lock tables.  Commit e Rollback: O comando commit indica o fim de uma transação informando ao banco de dados a instrução para persistir os dados no disco, já o comando rollback indica exatamente ao contrário, ou seja desfaz alterações efetuadas por transações que ainda não sofreram commit.  Start transaction: A declaração START TRANSACTION ou BEGIN inicia uma nova transação. COMMIT confirma a transação atual, tornando suas mudanças permanentes. ROLLBACK desfaz a transação atual, cancelando suas alterações. O comando SET autocommit desabilita ou habilita o modo de autocommit padrão para a sessão atual.  lock tables: O MariaDB permite que as sessões do cliente adquiram bloqueios de tabela explicitamente com o objetivo de cooperar com outras sessões para acesso a tabelas ou para evitar que outras sessões modifiquem tabelas durante períodos em que uma sessão requer acesso exclusivo a elas. Uma sessão pode adquirir ou liberar bloqueios apenas para si. Uma sessão não pode adquirir bloqueios para outra sessão ou liberar bloqueios mantidos por outra sessão. https://mariadb.com/kb/en/library/transactions/ * Atomicidade, consistência, isolamento e durabilidade.
  • 55. Lição 6: Processlist O comando SHOW [FULL] PROCESSLIST mostra quais processos estão em execução. Você também pode obter essas informações da tabela information_schema.PROCESSLIST ou do comando mysqladmin processlist. Se você tiver o privilegio PROCESS, você pode ver todos os processos. Caso contrário, você pode ver apenas seus próprios processos (ou seja, processos associados à conta MariaDB que você está usando). Se você não usar a palavra - chave FULL, apenas os primeiros 100 caracteres de cada declaração são mostrados no campo Informações. Exemplo:
  • 56.
  • 57. Lição 7: Gerenciando duplicidade A duplicidade pode ser a nível de tabela, quando a mesma possui mais de um registro com a mesma informação ou na forma de select, quando o resultado de uma consulta escrita de forma incompleta implica em linhas duplicadas no resultado. O uso de primary keys e e unique Keys evitam que haja duplicidade de informações quando se insere um novo registro. Para selects com duplicidade podemos utilizar o comando Distinct . O comando “insert ignore” ignora o erro caso ao tentar inserir um registro duplicado em uma coluna única com restrição unique. Exemplos:
  • 58. Lição 8: Métodos de backup e recuperação  No MariaDb é possível efetuar backups lógicos e físicos onde os backups lógicos efetuam backup apenas dos dados e estruturas dos bancos enquanto que backups físicos efetuam o backup diretamente dos arquivos físicos no disco.  A ferramenta utilizada para fazer backup no MariaDB é o mysqldump. Executando um backup simples: shell> mysqldump db_name > backup-file.sql (Efetua o backup de todo o database) shell> mysqldump -u root -p PRODUCTS products_tbl > export_file.txt (Efetua o backup de apenas uma tabela especifica) Executando restauração: shell> mysql –u -p db_name < backup-file.sql shell> mysqld -u root -p PRODUCTS products_tbl < export_file.tx Por padrão o mysqldump loca as tabelas ao efetuar o backup, para evitar que sejam locadas as tabelas utiliza-se o parâmetro –single-transaction: Exemplo: mysqldump -uroot -proot hr > hr.sql --single-transaction
  • 59. Lição 8: Métodos de backup e recuperação Efetuando select para um arquivo externo: SELECT * FROM employees INTO OUTFILE ‘emp.txt’; Este comando gera um arquivo emp.txt no diretório do banco de dados selecionado. Outras ferramentas de backup: Percona XtraBackup: a partir da versão 10.1 MariaDB Backup: a partir da versão 10.1
  • 60. Lição 8: Métodos de backup e recuperação Cold Backup: # systemctl stop mysql # mkdir /Backup # cp -rfvp /var/lib/mysql/ /Backup/ # systemctl start mysql Para restaurar o backup em outra maquina: # systemctl stop mysql Copie o backup da maquina original ou de onde ele está localizado para a maquina onde se deseja restaurar. # scp -Cr /Backup/mysql/* 192.168.174.141:/var/lib/mysql/ # chown -R mysql:mysql /var/lib/mysql # setenforce 0 inicie o MySQL. # systemctl start mysql
  • 61. Lição 9: Replicação No MariaDB é possível fazer replicação do tipo master-slave onde o master envia as alterações para o slave e multi- master que significa que o servidor tem vários mestres que se replicam. O método de sincronização é efetuado de forma assíncrona através do envio de binlogs para os outros servidores MariaDB o que pode causar inconsistências caso o envio dos logs seja interrompidos por falha de rede por exemplo. Passos para configurar a replicação master-slave: 1- Configurar as os parâmetros de replicação no arquivo my.cnf: 2- Efetuar backup dos bancos de dados no master e restaurar no slave. 3- Criar usuário que fará a replicação e conceder privilégio. 4- Ativar a replicação a partir do servidor slave. Passos para configurar a replicação master-master: 1- Configurar as os parâmetros de replicação no arquivo my.cnf em todos servers. 2- Efetuar backup dos bancos de dados no master1 e restaurar no master2. 3- Criar usuário que fará a replicação e conceder privilégio em todos servers. 4- Ativar a replicação a partir do servidor master1. 5- Ativar a replicação a partir do servidor master2.
  • 62. Exemplo master-slave Servidor master: [root@master ~]# systemctl stop mysql Edit my.cnf: # bind-address = 127.0.0.1 Por padrão o mariadb irá aceitar apenas conexões do host local iremos comentar essa linha para ser possível receber conexões de outros hosts server-id = 1 report_host = master essas variaveis irão receber o id do servidor e hostname e precisam ser únicas. log_bin = /var/log/mysql/mariadb-bin log_bin_index = /var/log/mysql/mariadb-bin.index Enable binary logging. relay_log = /var/log/mysql/relay-bin relay_log_index = /var/log/mysql/relay-bin.index Habilita a criação de arquivos de relay log, os eventos serão lidos no arquivo binlog do servidor master e escritos no relay-log do servidor slave. replicate-do-db = testdb esse parâmetro indica quais databases serão replicados(opcional) [root@master ~]# systemctl start mysql [root@master ~]# mysql –uroot -p MariaDB [(none)]> create user replusr@'%' identified by 'replusr'; MariaDB [(none)]> grant replication slave on *.* to replusr@'%'; MariaDB [(none)]> show master status; (guarde o resultado, será utilizado na habilitação da replicação)
  • 63. Exemplo master-slave Servidor slave: [root@master ~]# systemctl stop mysql Edit my.cnf: Altere o server-id e o report_host [root@master ~]# systemctl start mysql [root@master ~]# mysql –uroot -p MariaDB [(none)]> create user 'replusr'@'%' identified by 'replusr'; MariaDB [(none)]> grant replication slave on *.* to 'replusr'@'%'; MariaDB [(none)]> STOP SLAVE; MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.174.139', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=630; MariaDB [(none)]> START SLAVE; MariaDB [(none)]> SHOW SLAVE STATUS G; Faça inserts no master e verifique se a replicação está funcionando.
  • 64. Exemplo master-master Os passos para configuração da replicação multi-master são basicamente os mesmos, o que muda é na hora de habilitar a replicação nos dois ou mais lados e algumas variáveis a mais utilizadas na replicaçaão: Server Master 1: MariaDB [(none)]> STOP SLAVE; MariaDB [(none)]> CHANGE MASTER ‘master2' TO MASTER_HOST='192.168.174.141', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=630; MariaDB [(none)]> START SLAVE ‘master1' ; MariaDB [(none)]> SHOW SLAVE ‘master1' STATUS G; Server Master 2: MariaDB [(none)]> STOP SLAVE; MariaDB [(none)]> CHANGE MASTER ‘master1’ TO MASTER_HOST='192.168.174.139', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=630; MariaDB [(none)]> START SLAVE ‘master2 ; MariaDB [(none)]> SHOW SLAVE ‘master2 STATUS G; Faça inserts dos dois lados e verifique se a replicação está funcionando.
  • 65. Lição 9: Monitoramento da replicação Alguns comando de replicação: CHANGE MASTER ['connection_name'] TO .... Isso cria ou modifica uma conexão com um master. FLUSH RELAY LOGS ['connection_name'] .... Libera ou recarrega os caches de memória usados pelo MariaDB. RESET SLAVE ['connection_name'] [ALL]. Isso é usado para redefinir a posição de replicação slave ou para remover um slave permanentemente. SHOW SLAVE ['connection_name'] STATUS ... Mostra informações de um slave specífico SHOW ALL SLAVES STATUS.... Mostra informações de todos os slaves. START SLAVE ['connection_name'...]] Inicia a replicação no slave. START ALL SLAVES ... Inicia a replicação em todos os slaves. STOP SLAVE ['connection_name'] ... Para a replicação no slave. STOP ALL SLAVES ... Para a replicação de todos os slaves. SHOW MASTER STATUS ... Mostra status do master. Mais: https://mariadb.com/kb/en/library/replication-commands/
  • 66. Lição 9: Trobleshooting da replicação Em caso de falha da replicação será necessário refazer a sincronização a partir do master que está consistente. Tenha certeza de que o slave não esteja efetuando transações nesse momento pois do contrário pode ocorrer perda de informação. Restaurando os dados a partir do master. 1- Para bloquear todas as tabelas execute: MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; MariaDB [(none)]> Show master status G Exemplo saída: MariaDB [(none)]> show master status G *************************** 1. row *************************** File: mariadb-bin.000003 Position: 328 mysqldump –uroot –p --add-drop-database test table1 table2 > testdump.sql MariaDB [(none)]> unlock tables; * Estas ações serão efetuadas no Master
  • 67. 2- Copie o backup efetuado anteriormente no master e restaure o backup no slave: MariaDB [(none)]> stop slave; MariaDB [(none)]> mysql -u root -p my_database < my_database.sql MariaDB [(none)]> show slave status G MariaDB [(none)]> flush tables with read lock; MariaDB [(none)]> show master status; MariaDB [(none)]> change master to master_log_file=' mariadb-bin.000002 ', master_log_pos=1740; MariaDB [(none)]> start slave <slave name>; MariaDB [(none)]> show slave statusG MariaDB [(none)]> unlock tables; Outra forma simples de reiniciar a replicação após uma falha: MariaDB [(none)]> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; MariaDB [(none)]> START SLAVE; !Porém é preciso verificar se as informações estão consistentes em ambas as bases;
  • 68. Lição 10: Auditoria Varias funcionalidades utilizadas no MariaDB são adicionas através da instalação de plugins como é o caso do plungin de auditoria do banco de dados, basicamente o propósito do MariaDB Audit Plugin é registrar a atividade do servidor. Para cada sessão de cliente, ele registra quem se conectou ao servidor (ou seja, nome de usuário e host), quais consultas foram executadas e quais tabelas foram acessadas e variáveis de servidor que foram alteradas. Pelo MariaDB Audit Plugin é possível audita as seguintes ações: CONNECT: quando o usuário se conecta, desconecta ou se conecta com falhas - incluindo o código de erro. QUERY : Consultas executadas e seus resultados em texto simples, incluindo consultas falhadas devido a erros de sintaxe ou permissão. TABLE : Tabelas afetadas pela execução da consulta QUERY_DDL : O mesmo que QUERY, mas filtros apenas DDL do tipo consultas ( CREATE, ALTER, DROP, RENAME e TRUNCATE- exceto CREATE/DROP [PROCEDURE / FUNCTION / USER] e RENAME USER (eles não são DDL) MariaDB 5.5.42, MariaDB 10.0.17 , MariaDB 10.1.4 QUERY_DML: consultas sql, mas filtros única DML-tipo ( DO, CALL, LOAD DATA/XML, DELETE, INSERT, UPDATE, HANDLER e REPLACE) MariaDB 5.5.42 , MariaDB 10.0.17 , MariaDB 10.1.4 QUERY_DCL: comandos de DCL(Data control language), CREATE USER, DROP USER, RENAME USER, GRANT, REVOKE,SET PASSWORD. MariaDB 5.5.43 , MariaDB 10.0.18 , MariaDB 10.1.5 Mais detalhes: https://mariadb.com/kb/en/library/mariadb-audit-plugin-log-settings/
  • 69. Configurando o audit plugin: 1- passo conect no mariadb como root INSTALL PLUGIN server_audit SONAME 'server_audit.so'; <enter> 2- edite o arquivo my.cnf (/etc/my.cnf) com os parâmetros: plugin-load = server_audit= server_audit.so server_audit_events = connect,query (ações que serão auditadas) server_audit_file_path = /var/lib/mysql-logs/audit.log (local onde será gravado os logs de auditoria) server_audit_file_rotate_size = 10G #set the size of the logfile (tamanho máximo do arquivo de log) server_audit_logging = ON (Ativa a auditoria) server_audit_file_rotations = 0 (ativa rotatividade do arquivo de log) 3- Reinicie o MariaDB 4- Configure o nível da auditoria. MariaDB [(none)]> SET GLOBAL server_audit_events = 'CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DCL,QUERY_DML'; Query OK, 0 rows affected (0.00 sec) Inclua as alterações no aquivo my.cnf server_audit_events=connect,query,table,QUERY_DDL,QUERY_DCL,QUERY_DML A partir de então todas as ações efetuadas serão gravadas no /var/lib/mysql-logs/audit.log de acordo com o nível de auditoria configurado. Nota: Caso haja replicação configurada e se deseje auditar os demais servidores o procedimento deve ser efetuado em cada host.
  • 70. Lição 11: Procedures , functions e triggers Procedures: Procedures são procedimentos armazenados no banco de dados que podem ter Por padrão, uma rotina está associada ao banco de dados atual em uso. Para associar um procedimento de forma explícita a um dado banco de dados, especifique o nome como db_name.sp_name quando você o cria. Functions: Uma função tem basicamente as mesmas funções de um procedimento, porém obrigatoriamente a função sempre deverá retornar algum valor. Funções são muito uteis com cálculos, mas poder retornar qualquer tipo de dado. Triggers: Triggers são gatilhos que são disparados por eventos que acontecem nas tabelas (inser,update,delete), para efetuar um conjunto de funções pré-programadas. Triggers podem ser utilizadas para auditoria gravando logs de ações efetuadas nas tabelas do banco de dados.
  • 71. Exemplo procedure DELIMITER // CREATE PROCEDURE simpleproc (out param1 INT) BEGIN SELECT COUNT(*) INTO param1 FROM t; END; // DELIMITER ; CALL simpleproc(@a); SELECT @a; +------+ | @a | +------+ | 1 | +------+ DELIMITER // CREATE PROCEDURE simpleproc2 ( OUT param1 CHAR(10) CHARACTER SET 'utf8' COLLATE 'utf8_bin' ) BEGIN SELECT CONCAT('a',f1) INTO param1 FROM t; END; // DELIMITER ; DELIMITER // CALL simpleproc2(@a); SELECT @a "resulatado"; Exemplos extraídos da documentação MariaDB
  • 72. Exemplo function DELIMITER // CREATE FUNCTION max_salary (dept l ) RETURNS INT RETURN (SELECT MAX(salary) FROM employees WHERE employees.dept = dept); GRANT EXECUTE ON FUNCTION max_salary TO roger; // DELIMITER ; DELIMITER // CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN CONCAT('Hello, ',s,'!'); // DELIMITER ; SELECT hello('world'); +----------------+ | hello('world') | +----------------+ | Hello, world! | +----------------+
  • 73. Exemplo trigger CREATE TRIGGER Books_Delete AFTER DELETE ON Books /* ver nota (a) */ REFERENCING OLD ROW AS Old /* ver nota (b) */ FOR EACH ROW /* ver nota (c) */ INSERT INTO Books_Deleted_Log VALUES (Old.title); /* ver nota (d) */ Nota (a): A ação da Trigger deve ser depois, uma vez que a ação Trigger inclui uma instrução SQL-data change. Nota (b): é convencional usar o alias " Old" ou " Old_Row" para a linha anterior. Nota (c): A ação será efetuada para cada linha alterada na tabela. Nota (d): OLD é um alias para o valor antigo da coluna, assim OLD.TITLE é o valor antigo da coluna title. CREATE TRIGGER Clients_Insert BEFORE INSERT ON Clients REFERENCING NEW ROW AS New FOR EACH ROW SET New.home_telephone = COALESCE(New.home_telephone,New.work_telephone); Exemplos extraídos da documentação do MariaDB
  • 74. Lição 12 Tuning SQL: Explain A declaração EXPLAIN pode ser usada como sinônimo de DESCRIBE ou como forma de obter informações sobre como o MariaDB executa uma declaração SELECT(assim como UPDATE e DELETE desde MariaDB 10.0.5): 'EXPLAIN tbl_name‘ é sinônimo de DESCRIBE tbl_name ou SHOW COLUMNS FROM tbl_name Quando você precede uma declaração SELECT (ou também com MariaDB 10.0.5 , um UPDATE ou um DELETE) com a palavra-chave EXPLAIN, a MariaDB exibe informações do otimizador sobre o plano de execução da consulta. Ou seja, MariaDB explica como ele processaria o SELECT, UPDATE ou DELETE incluindo informações sobre como as tabelas são unidas e em qual ordem. ANALYZE statement, que executa a consulta, bem como produzindo saída EXPLAIN, e fornece estatísticas reais, bem como estimadas, está disponível no MariaDB 10.1.0 . Sintaxe: EXPLAIN tbl_name ou explain <instrução select>
  • 75. Coluna Descricão id Número de seqüência que mostra em que tabelas de pedidos são juntas.select_type Que tipo de SELECTtabela vem. table Alias nome da tabela. As tabelas temporárias materializadas para sub-consultas são denominadas <subquery #> type Como as linhas são encontradas a partir da tabela (tipo de junção). possible_keys chaves na tabela que podem ser usadas para encontrar linhas na tabela key O nome da chave que é usada para recuperar linhas. NULL Não foi utilizada nenhuma chave. key_len Quantos bytes da chave que foi usada (mostra se estamos usando apenas partes da chave de várias colunas). ref A referência que é usada como o valor da chave. rows Uma estimativa de quantas linhas encontraremos na tabela para cada pesquisa de chave. Extra Informações adicionais sobre esta associação. Descrição das colunas em explain select Exemplos no próximo slide: Quando você precede uma declaração SELECT (ou, a partir do MariaDB 10.0.5 , UPDATE ou DELETE também) com a palavra-chave EXPLAIN, a MariaDB exibe informações do otimizador sobre o plano de execução da consulta. Ou seja, MariaDB explica como ele processaria o SELECT, UPDATE ou DELETE incluindo informações sobre como as tabelas são unidas e em qual ordem. Na tabela abaixo é mostrado a descrição de cada coluna do explain:
  • 76.
  • 77. Explain A coluna “select_type” pode retornar os seguintes resultados: DEPENDENT SUBQUERY DEPENDENT UNION DERIVED MATERIALIZED PRIMARY SIMPLE SUBQUERY UNCACHEABLE SUBQUERY UNCACHEABLE UNION UNION UNION RESULT Nota: O EXPLAIN pode adquirir bloqueios de metadados da mesma maneira que SELECT faz, pois precisa conhecer metadados de tabelas e, às vezes, dados também.
  • 78. Explain  A coluna “type” pode retornar os seguintes resultados: Valor Descrição All Uma verificação completa de tabela é feita para a tabela (todas as linhas são lidas). Isso é ruim se a tabela for grande e tiver feito join com uma tabela anterior! Isso acontece quando o otimizador não conseguiu encontrar nenhum índice utilizável para acessar linhas. eq_ref Um índice unico é usado para encontrar as linhas. Este é o melhor plano possível para encontrar a linha. fulltext Um índice de texto completo é usado para acessar as linhas. Index_merge Um acesso de 'intervalo' é feito para vários índices e as linhas encontradas são mescladas. A coluna da chave mostra quais chaves são usadas. Index_subquery Isso é semelhante ao ref, mas usado para sub-consultas que são transformadas em pesquisas- chave. index Uma varredura completa sobre o índice usado. Melhor do que TODOS, mas ainda é ruim se o índice for grande e a tabela se juntar a uma tabela anterior. unique_subquery Isso é semelhante ao eq_ref, mas usado para sub-consultas que são transformadas em pesquisas-chave
  • 79. Explain A coluna “Extra” pode retornar os seguintes resultados: Valor Descrição Distinct Se fosse utilizada otimização distinta (remover linhas duplicadas). Isso é marcado apenas para a última tabela no SELECT. Full scan on NULL key A tabela é uma parte da consulta secundária e se o valor que é usado para corresponder a sub-consulta será NULL, faremos uma verificação de tabela completa. Impossible HAVING A cláusula HAVING usada sempre é falsa, de modo SELECTque não retornará nenhuma linha. Impossible WHERE A cláusula WHERE usada sempre é falsa, de modo que o SELECT não retornará nenhuma linha. Por exemplo: WHERE const_column=5 e const_column teve um valor de 4. Range checked for each record (in dex map: ...) Isso acontece somente quando não houve um bom padrão de padrão de uso, mas pode haver algum índice que possa ser usado quando podemos tratar todas as colunas da tabela anterior como constantes. Para cada combinação de linhas, o otimizador irá decidir qual índice usar (se houver) para buscar uma linha dessa tabela. Isso não é rápido, mas mais rápido do que uma verificação de tabela completa que é a única outra escolha. O mapa de índice é uma máscara de bits que mostra qual índice é considerado para cada condição de linha. Using filesort Uso de order by no select. Using index Somente o índice é usado para recuperar as informações necessárias da tabela. Não é necessário realizar uma busca extra para recuperar o registro real. Using index for group-by O índice está sendo usado para resolver uma consulta GROUP BYou DISTINCT. As linhas não são lidas. Isso é muito eficiente se a tabela tiver muitas entradas de índice idênticas, pois as duplicatas são rapidamente saltadas.
  • 80. Explain O explain também pode executar verificação a partir de uma thread ativa, caso essa esteja efetuando alguma ação passível de otimização o explain recupera a declaração que está sendo executada e gera as informações do otimizador em tempo real. Exemplo: SHOW EXPLAIN FOR 1; +------+-------------+-------+-------+---------------+------+---------+------+---------+----------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +------+-------------+-------+-------+---------------+------+---------+------+---------+----------------------+ | 1 | SIMPLE | tbl | index | NULL | a | 5 | NULL | 1000107 | Using index | +------+-------------+-------+-------+---------------+------+---------+------+---------+----------------------+ 1 row in set, 1 warning (0.00 sec) Também pode ser utilizado para mostrar os índices que uma tabela possui:
  • 81.
  • 82. Apêndice A: my.cnf Neste apêndice mostraremos as variáveis mais utilizadas e qual a função essa variável possui: Todas as variáveis do servidor MariaDB devem ser colocadas logo abaixo da linha [mysqld]. data_dir: Este parâmetro recebe o caminho o diretório para onde serão armazenado os arquivos de dados. O valor padrão no Linux é /var/lib/mysql. innodb_buffer_pool_size: Utiliza 80% da memória RAM disponível. Por padrão é inicializado com 70% da mamória.7 innodb_log_file_size: Ajuste esse parâmetro para 20% do tamanho do innodb_buffer_pool_size. innodb_file_per_table: Este parâmetro identifica quantos arquivos de serão criados para cada tabela innodb, valor padrão 1. thread_cache_size: Quantidade de threads que são criadas na inicialização da instância.Este valor pode ser ajustado dinamicamente. tmp-table_size, max_heap_table_size: ambos precisam ser ajustados com o mesmo tamanho e previnem escrita em disco. Ex: tmp-table_size=1G max_heap_table_size=1G max_allowed_packet: valor máximo permitido por pacote, deve ser ajustado para o tamanho do maior pacote no sistema. Um exemplo é setar 11 vezes o valor do seu maior arquivo BLOB.
  • 83. Variaveis de replicação: auto_increment_increment , auto_incremente_offset: utiliza as duas em conjunto quando utilizar replicação multi-master, auto_incremente_offset deve receber um valor único para cada servidor e possui a função de não deixar gerar valores duplicados em campos auto-increment. binlog_format: Determina se a replicação é baseada em linha, statement ou ambos. Valor padrão: MIXED(> = MariaDB 10.2.4 ) STATEMENT(<= MariaDB 10.2.3 ). slave_skip_erros: Quando um erro ocorre a replicação para, esta variável permite que uma lista de códigos de erro ignore e a replicação continue, Usando all como uma opção permite que o slave continue replicando, independentemente do erro que ele encontre, muito cuidado ao aplicar essa variável devido possibilidade de inconsistências na replicação. sync_binlog: O MariaDB sincronizará seu arquivo de log binário com o disco após esses muitos eventos. O padrão é 0, caso em que o sistema operacional lida com a descarga do arquivo no disco. 1 é a escolha mais segura, mas mais lenta, uma vez que o arquivo é descarregado após cada gravação. Se o autocommit estiver habilitado, há uma gravação por declaração, caso contrário, há uma gravação por transação. Mais informações: https://mariadb.com/kb/en/library/replication-and-binary-log-server-system-variables/ https://mariadb.com/kb/en/library/server-system-variables/
  • 84. Referências Bem Forta, MariaDB Crash Course, 2011 Ed. Pearson MariaDB Knowledge Base em https: https://mariadb.com/kb/en/ MySQL 5.7 Reference Manual