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
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
# 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
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'@'localhost';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;
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;