37
MySQL para DBAs Oracle Ricardo Portilho Proni [email protected] Esta obra está licenciada sob a licença Creative Commons Atribuição-SemDerivados 3.0 Brasil. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-nd/3.0/br/. 1

MySQL para DBAs Oraclenervinformatica.com.br/Downloads/Materiais/MYSQL.pdf · MySQL para DBAs Oracle Ricardo Portilho Proni [email protected] Esta obra está licenciada

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

MySQL para DBAs Oracle

Ricardo Portilho [email protected]

Esta obra está licenciada sob a licençaCreative Commons Atribuição-SemDerivados 3.0 Brasil.

Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-nd/3.0/br/.

1

2

Por que MySQL?

2

3

Evolução MySQL

3

Fonte: Apresentação “Novidades do Universo MySQL”, do GUOB Tech Day 2014

4

Evolução MySQL

4

Fonte: Apresentação “Novidades do Universo MySQL”, do GUOB Tech Day 2014

5

Evolução MySQL

5

Fonte: Apresentação “Novidades do Universo MySQL”, do GUOB Tech Day 2014

6

Edições

6

7

Edições

7

8

Instalação

[root@Melquior ~]# yum -y install mysql-server...[root@Melquior ~]# rpm -qa | grep mysqlmysql-server-5.1.73-3.el6_5.x86_64mysql-libs-5.1.73-3.el6_5.x86_64mysql-5.1.73-3.el6_5.x86_64[root@Melquior ~]#

8

9

Instalação

9

10

Instalação

10

11

Lab 1: Instalação

Instale o MySQL.# yum -y install wget# wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm# rpm -ivh mysql-community-release-el6-5.noarch.rpm# yum -y install mysql-server# chkconfig mysqld on# ls -lh /var/lib/mysql# service mysqld start# ls -lh /var/lib/mysql# /usr/bin/mysqladmin -u root password 'Nerv2015'

Acesse o MySQL, e verifique a versão instalada.# mysql -u root -pNerv2015mysql> exit;

Verifique o Log do MySQL.# cat /var/log/mysqld.log

Verifique o arquivo de parâmetros do MySQL.# cat /etc/my.cnf

11

12

Lab 2: Programas Cliente

# mysql -u root -pNerv2015mysql> SHOW STATUS;mysql> EXIT;

# mysql -u root -pNerv2015 -e “SHOW STATUS”

# mysql -u root -pNerv2015 -e “SHOW STATUS” > status.txt# cat status.txt

# echo “SHOW STATUS” >> script.sql# cat script.sql# mysql -u root -pNerv2015 < script.sql# rm -f status.txt# mysql -u root -pNerv2015 < script.sql > status.txt# cat status.txt

# mysqladmin# mysqladmin -u root -pNerv2015 status

12

13

Instância x Banco de Dados

13

14

Engines

● MyISAM● InnoDB● Memory● CSV● Archive● Blackhole● Merge● Federated● Example

14

15

Lab 3: Processos e Threads

Execute um teste de carga no MySQL.# yum -y install mysql-test# mysqlslap --user=root --password=Nerv2015 --auto-generate-sql --concurrency=10 --iterations=10 --number-char-cols=10 --number-int-cols=5 --engine=innodb

Durante a execução do teste, acompanhe no Linux, via top.

Durante a execução do teste, acompanhe no MySQL, via mysqladmin.# mysqladmin -u root -pNerv2015 status

15

16

Lab 4.1: Parâmetros de otimizaçãoAltere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.max_connections = 800table_open_cache = 100thread_cache_size = 16

innodb_buffer_pool_size = 128Minnodb_thread_concurrency = 32

key_buffer = 128M

read_buffer_size = 2Mread_rnd_buffer_size = 2Msort_buffer = 2Mjoin_buffer_size = 2M

query_cache_type = 1query_cache_size = 16Mquery_cache_limit = 2Mquery_cache_min_res_unit = 4096

16

17

Lab 4.2: Parâmetros de recuperação

Altere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.tmp_table_size = 8Mtmpdir = /tmp/

slow_query_log_file = /var/log/mysql-slow.loglong_query_time = 5

innodb_log_file_size = 32Minnodb_log_files_in_group = 7innodb_log_buffer_size = 64Minnodb_flush_log_at_trx_commit = 1

mysql> show variables like '%slow%';mysql> show variables;set = ALTER SESSIONset global = ALTER SYSTEM

17

18

Lab 5: Bancos de Dados

Crie um novo banco de dados.# mysql -u root -pNerv2015mysql> show databases;mysql> create database nerv;mysql> show databases;mysql> use nerv;mysql> show tables;

Banco mysql = Schema SYSTEM

18

19

Usuários e Permissõesmysql> CREATE USER 'portilho'@'localhost' IDENTIFIED BY 'Nerv2015';mysql> CREATE USER 'portilho'@'192.168.0.5' IDENTIFIED BY 'Nerv2015';mysql> CREATE USER 'portilho'@'%' IDENTIFIED BY 'Nerv2015';

mysql> GRANT SELECT ON nerv.teste TO 'portilho'@'%';mysql> GRANT SELECT ON nerv.* TO 'portilho'@'localhost';mysql> GRANT ALL PRIVILEGES ON *.* TO 'portilho'@'localhost';

Conexão remota$ mysql -u root -pNerv2015 -h 192.168.0.2

Tabela mysql.user = Tabela DBA_USERS

19

20

Estruturas físicas

# ls -lh /var/lib/mysql/total 29M-rw-rw----. 1 mysql mysql 18M Jan 24 14:45 ibdata1-rw-rw----. 1 mysql mysql 5.0M Jan 24 14:45 ib_logfile0-rw-rw----. 1 mysql mysql 5.0M Jan 24 14:45 ib_logfile1drwx--x--x. 2 mysql mysql 4.0K Jan 24 14:43 mysqlsrwxrwxrwx. 1 mysql mysql 0 Jan 24 14:45 mysql.sockdrwx------. 2 mysql mysql 4.0K Jan 24 15:12 nervdrwx------. 2 mysql mysql 4.0K Jan 24 14:43 performance_schema-rw-rw----. 1 mysql mysql 6 Jan 24 14:45 Proni-PC.localdomain.pid-rw-r--r--. 1 root root 112 Jan 24 14:43 RPM_UPGRADE_HISTORY-rw-r--r--. 1 mysql mysql 112 Jan 24 14:43 RPM_UPGRADE_MARKER-LASTdrwxr-xr-x. 2 mysql mysql 4.0K Jan 24 14:43 test

# ls -lh /var/lib/mysql/nerv/total 4.0K-rw-rw----. 1 mysql mysql 65 Jan 24 15:12 db.opt

20

21

Lab 6: Tabelas

mysql> use nerv;mysql> CREATE TABLE teste (coluna1 int, coluna2 char(50), coluna3 varchar(255)) Engine=InnoDB;mysql> show tables;O que a criação desta tabela alterou nas estruturas físicas?

mysql> CREATE TABLE teste2 (coluna1 int, coluna2 char(50), coluna3 varchar(255)) Engine=MyISAM;mysql> show tables;O que a criação desta tabela alterou nas estruturas físicas?

mysql> use mysql;mysql> desc user;mysql> desc nerv.teste;

innodb_file_per_table

21

22

Lab 7: INSERT, UPDATE, DELETE, SELECT

Execute INSERT de 10 registros diferentes nas tabelas que você criou.

22

23

Lab 8: Transações e Isolamento

Execute um UPDATE em todas os registros da teste.

Abra outra sessão, e execute SELECT em todos os dados da tabela.O que aconteceu?

Repita a operação, mas antes do UPDATE, coloque como abaixo.mysql> START TRANSACTION;mysql> UPDATE ...O que aconteceu?

Execute INSERT,UPDATE, DELETE e SELECT nas tabelas que você criou.

23

24

Lab 9: System StatesExecute novamente o teste de carga, e acompamnhe pelos comandos abaixo.mysql> SHOW PROCESSLIST;mysql> SHOW FULL PROCESSLIST;

http://dev.mysql.com/doc/refman/5.6/en/general-thread-states.html

24

25

Lab 10: Importação e Exportação

ExemplosSELECT * FROM Cars INTO OUTFILE '/tmp/cars.txt';LOAD DATA INFILE '/tmp/cars.txt' INTO TABLE Cars;

SELECT * FROM Cars INTO OUTFILE '/tmp/cars.csv' FIELDS TERMINATED BY ',';LOAD DATA INFILE '/tmp/cars.csv' INTO TABLE Cars FIELDS TERMINATED BY ',';

Execute este procedimento para as tabelas que você criou.

25

26

Lab 11: Bin Logs

Adicione no /etc/my.cnf a linha abaixo, e reinicie o mysql.log-bin=mysql-bin

O que aconteceu no diretório de dados?

expire_logs_days

26

27

Lab 12: Backup MyISAM

Coloque uma tabela MyISAM em LOCK, e a copie para outro diretório.LOCK TABLE teste2 WRITE;FLUSH TABLE teste2;

Execute a cópia pelo sistema operacional.# cp -rf /var/lib/mysql/nerv /root

UNLOCK TABLEs;

27

28

Lab 13: mysqldump

Execute um backup via mysqldump.$ mysqldump -u root -pNerv2015 nerv > nerv.sql$ mysqldump -u root -pNerv2015 --all_databases > nerv01.sql

Edite o arquivo gerado.O que ele contém?Como utilizar este backup?Quais suas desvantagens?

28

29

Lab 14: INFORMATION_SCHEMA

Verifique as tabelas do banco de dados INFORMATION_SCHEMA.Quantas tabelas você possui em todo o MySQL?E em seu banco de dados?

29

30

Lab 15: System Status

Execute no MySQL o comando abaixo.mysql> SHOW STATUS;

Que informações que este comando gera são úteis?

30

31

Alta Disponibilidade

MySQL Replication

31

32

MySQL Replication

32

Mastermysql> CREATE USER 'replicator'@'192.168.0.2' IDENTIFIED BY 'Nerv2015';mysql> GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'192.168.0.3';mysql> FLUSH TABLES WITH READ LOCK;mysql> SHOW MASTER STATUS;Backup no Master / Restore no Slavemysql> UNLOCK TABLES;

Slavemysql> CHANGE MASTER TO

MASTER_HOST='192.168.0.4',MASTER_USER='replicator',MASTER_PASSWORD='Nerv2015',MASTER_LOG_FILE='mysql-bin.000087',MASTER_LOG_POS=197872700;

mysql> START SLAVE;mysql> SHOW SLAVE STATUS;

33

Alta Disponibilidade

MySQL Proxy

33

34

Alta Disponibilidade

MySQL Cluster

34

35

Alta Disponibilidade

MySQL Fabric

35

36

Documentação / Livros

Documentação oficialhttp://dev.mysql.com/doc/refman/5.0/en/index.htmlhttp://dev.mysql.com/doc/refman/5.1/en/index.htmlhttp://dev.mysql.com/doc/refman/5.5/en/index.htmlhttp://dev.mysql.com/doc/refman/5.6/en/index.htmlhttp://dev.mysql.com/doc/refman/5.7/en/index.html

LivrosMySQL 5.0 Certification Study GuideHigh Performance MySQL (O'Reilly)

36

37

Certificações

● Oracle Certified Professional, MySQL 5.6 Database Administrator● Oracle Certified Professional, MySQL 5.6 Developer

37