MySQL - NERVnervinformatica.com.br/Downloads/Materiais/MYA-2020.pdfMySQL Administração Backup &...

Post on 15-Aug-2021

10 views 0 download

Transcript of MySQL - NERVnervinformatica.com.br/Downloads/Materiais/MYA-2020.pdfMySQL Administração Backup &...

MySQL Administração Backup & Recovery Tuning Alta Disponibilidade

Inclui Percona e MariaDB

Ricardo Portilho Proniricardo@nervinformatica.com.brNerv Informática Ltda.

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/.

2 2

Produtos utilizados no Treinamento● Oracle Enterprise Linux 7.9● MySQL 5.7.32 e 8.0.22● Percona Server 5.7.31● MariaDB 10.4.10● Oracle VirtualBox 6.1.16

3 3

Comandos no Treinamento

Comando com o usuário root:# mysql -u root -pNerv2020.

Comando no MySQL:mysql> SHOW DATABASES;

Adicionar texto a um arquivo:# vi /etc/my.cnf...log-bin=mysql-bin...

Algo deve ser alterado de acordo com sua máquina:# scp -Cr /root/ColdBackup/mysql/* root@192.168.0.99:/var/lib/mysql/

Quando algo dá errado propositalmente:O que aconteceu?

Todas as senhas são Nerv2020.

4

Mercado de Trabalho MySQL

4

5 5

Por que MySQL?

https://db-engines.com/en/ranking

6 6

DBA MySQLDBA MySQL e ...● Desenvolvedor● Administrador de Dados● Administrador de Sistema Operacional● DevOPS● Analista de Sistema● DBA de outro banco

7 7

Certificações

https://education.oracle.com/database/mysql/pFamily_406

8 8

Livros● MySQL 5.0 Certification Study Guide● High Performance MySQL

9 9

MySQL Blogs

10 10

MySQL Blogs

11 11

MySQL Blogs

12 12

MySQL Blogs

13 13

Fóruns

14 14

Documentação

https://dev.mysql.com/doc/refman/5.5/en/index.htmlhttps://dev.mysql.com/doc/refman/5.6/en/index.htmlhttps://dev.mysql.com/doc/refman/5.7/en/index.htmlhttps://dev.mysql.com/doc/refman/8.0/en/

15 15

MySQL Internals Manual

16

Produtos MySQL

16

17

História do MySQL

18

História do MySQL

19 19

Open Source

20 20

Open Source

21 21

Open Source

22 22

Produtos Community

23 23

Produtos Enterprise

https://www.mysql.com/products/

24 24

Produtos Enterprise

https://www.mysql.com/products/

25 25

mysqlbackup

https://www.mysql.com/products/enterprise/backup.html

26 26

Thread Pool

https://www.mysql.com/products/enterprise/scalability.html

27 27

MySQL Enterprise Monitor

https://www.mysql.com/products/enterprise/monitor.html

28 28

MySQL Enterprise Monitor - MySQL Query Analyzer

https://www.mysql.com/products/enterprise/monitor.html

29 29

MySQL Enterprise Monitor - Database File IO

https://www.mysql.com/products/enterprise/monitor.html

30 30

MySQL Enterprise Monitor - MySQL Replication Topology View

https://www.mysql.com/products/enterprise/monitor.html

31 31

MySQL Enterprise Monitor - MySQL Cluster Topology View

https://www.mysql.com/products/enterprise/monitor.html

32 32

MySQL Enterprise Monitor - MySQL Replication Multi-Source

https://www.mysql.com/products/enterprise/monitor.html

33 33

MySQL Enterprise Monitor - MySQL Replication Status

https://www.mysql.com/products/enterprise/monitor.html

34 34

MySQL Enterprise Monitor - MySQL Enterprise Backup Dashboard

https://www.mysql.com/products/enterprise/monitor.html

35

Instalação

35

36 36

Instalação – Repositório Padrão[root@CentOS-6 ~]# cat /etc/redhat-releaseCentOS release 6.10 (Final)[root@CentOS-6 ~]# yum -y install mysql-server...[root@CentOS-6 ~]# rpm -qa | grep mysqlmysql-libs-5.1.73-8.el6_8.x86_64mysql-server-5.1.73-8.el6_8.x86_64mysql-5.1.73-8.el6_8.x86_64[root@CentOS-6 ~]#

[root@CentOS-7 ~]# cat /etc/redhat-releaseCentOS Linux release 7.5.1804 (Core)[root@CentOS-7 ~]# yum -y install mysql-server...No package mysql-server available.[root@CentOS-7 ~]#

[root@CentOS-7 ~]# yum -y install mariadb-server[root@CentOS-7 ~]# rpm -qa | grep mariadb...mariadb-5.5.60-1.el7_5.x86_64mariadb-libs-5.5.60-1.el7_5.x86_64mariadb-server-5.5.60-1.el7_5.x86_64[root@CentOS-7 ~]#

37 37

Red Hat / CentOS / OEL e MySQL / MariaDB

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/7.0_release_notes/chap-red_hat_enterprise_linux-7.0_release_notes-web_servers_and_services

38 38

Instalação – Versão Específica

39 39

Instalação – Repositórios MySQL

https://dev.mysql.com/downloads/

40 40

Lab 1.1: Instalação MySQLInstale e habilite o reposítório do MySQL 5.7.# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm# yum -y install mysql80-community-release-el7-3.noarch.rpm

# vi /etc/yum.repos.d/mysql-community.repo...# Enable to use MySQL 5.7[mysql57-community]name=MySQL 5.7 Community Serverbaseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/enabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql...[mysql80-community]name=MySQL 8.0 Community Serverbaseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/enabled=0gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql...

# yum -y install mysql-server# systemctl enable mysqld# ls -lh /var/lib/mysql# systemctl start mysqld# ls -lh /var/lib/mysql

41 41

Lab 1.2: Instalação MySQLVerifique o Log do MySQL, e altere a senha do usuário root.# grep password /var/log/mysqld.log# /usr/bin/mysqladmin -u root -p password 'Nerv2020.'

Acesse o MySQL, e verifique o acesso.# mysql -u root -pmysql> EXIT;

Libere a porta do MySQL no Firewall.# firewall-cmd --zone=public --add-port=3306/tcp --permanent# firewall-cmd --reload# firewall-cmd --zone=public --permanent --list-ports

42 42

Lab 1.3: Status MySQL

Verifique as formas de conexão com o MySQL.# mysql -u root -pmysql> STATUS;mysql> EXIT;

# mysqladmin -u root -pNerv2020. status

# tail /var/log/mysqld.log

# grep -B1 'ready for connections' /var/log/mysqld.log

43 43

Lab 1.4: Client MySQL

Verifique as formas de conexão com o MySQL.# mysql -u root -pmysql> SHOW DATABASES;mysql> EXIT;

# mysql -pmysql> SHOW DATABASES;mysql> EXIT;

# mysql -u root -pNerv2020.mysql> SHOW DATABASES;mysql> EXIT;

# mysql -uroot -pNerv2020.mysql> SHOW DATABASES;mysql> EXIT;

mysql> prompt \U-\d-\R:\m:\s>mysql> SHOW DATABASES;mysql> USE mysql;mysql> EXIT;

# vi .my.cnf[client]password=Nerv2020.prompt='\U-\d-\R:\m:\\s>'

# mysql

44 44

Lab 1.5: Client MySQL

Verifique as formas de execução de comandos no MySQL.# mysqlmysql> SHOW DATABASES;# mysql -e “SHOW DATABASES”# mysql -e 'SHOW DATABASES'# mysql -t -e 'SHOW DATABASES'# mysql -B -e 'SHOW DATABASES'# mysql -E -e 'SHOW DATABASES'# mysql -X -e 'SHOW DATABASES'

# mysql -e 'SHOW DATABASES' > databases.txt# cat databases.txt

# mysql -t -e 'SHOW DATABASES' > databases.txt# cat databases.txt

# echo 'SHOW DATABASES' > databases.sql# mysql -t < databases.sql# mysql -t < databases.sql > databases.txt# cat databases.txt

mysql> source databases.sql

Importe os bancos de dados de exemplo.# mysql < MYA.sql# mysql -v < MYA.sqlmysql> SHOW DATABASES;

45 45

Lab 1.6: Client MySQL

Verifique as formas de execução de comandos no MySQL.mysql> SHOW STATUS;mysql> pager less -n -i -S -F -Xmysql> SHOW STATUS;

mysql> \Wmysql> \w

# export EDITOR=vi# mysqlmysql> SHOW DATABASES;mysql> editmysql> ;

mysql> tee audit.logmysql> SHOW DATABASES;mysql> notee# cat audit.log

mysql> system ls -lhmysql> \! ls -lh

mysql> help

46 46

Engines

https://en.wikipedia.org/wiki/Comparison_of_MySQL_database_engines

47 47

Engines

Verifique as formas de execução de comandos no MySQL.mysql> CREATE DATABASE test;mysql> USE test;

mysql> CREATE TABLE t1 (c1 INT);mysql> SHOW CREATE TABLE t1;

mysql> CREATE TABLE t2 (c1 INT) Engine=InnoDB;mysql> SHOW CREATE TABLE t2;

mysql> CREATE TABLE t3 (c1 INT) Engine=MyISAM;mysql> SHOW CREATE TABLE t3;

mysql> CREATE TABLE t4 (c1 INT) Engine=Memory;mysql> SHOW CREATE TABLE t4;

mysql> CREATE TABLE t5 (c1 INT) Engine=Archive;mysql> SHOW CREATE TABLE t5;

mysql> ALTER TABLE t5 Engine=InnoDB;mysql> SHOW CREATE TABLE t5;

mysql> SHOW ENGINES;

48 48

Engines MySQL x Percona x MariaDB

49 49

Releases MySQL x Percona x MariaDB

https://www.percona.com/blog/2017/11/02/mysql-vs-mariadb-reality-check/

50 50

MySQL x Percona Server

https://db-engines.com/en/ranking

51 51

Percona Server

52 52

Percona Server

53 53

Percona Server

54 54

Percona Server

https://www.percona.com/software/mysql-database/percona-server/benchmarks

55 55

Percona Server

56 56

Percona Server

https://www.percona.com/software/mysql-database/percona-server/feature-comparison

57 57

Percona Server

https://www.percona.com/software/mysql-database/percona-server/feature-comparison

58 58

Percona Server

https://www.percona.com/software/mysql-database/percona-server/feature-comparison

59 59

Percona Server

https://www.percona.com/software/mysql-database/percona-server/feature-comparison

60 60

Lab 2.1: Percona Server

Instale o Oracle VM VirtualBox.# yum -y install SDL kernel-uek-devel# wget https://download.virtualbox.org/virtualbox/6.1.14/VirtualBox-6.1-6.1.14_140239_el7-1.x86_64.rpm# yum -y install VirtualBox-6.1-6.1.14_140239_el7-1.x86_64.rpm

61 61

Lab 2.2: Percona Server

No Oracle VM VirtualBox, clique em “File”, e em “Import Appliance”, e importe o arquivo /root/Linux.ova.

62 62

Lab 2.3: Percona Server

63 63

Lab 2.4: Percona Server

64 64

Lab 2.5: Percona Server

65 65

Lab 2.6: Percona Server

Verifique o IP da VM, e a acesse via ssh.# ip addr

Pelo nmtui, altere o hostname da VM para Percona.localdomain.

Instale o Percona Server.# yum -y install wget# wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm# yum -y install percona-release-latest.noarch.rpm# yum search Percona-Server# yum -y install Percona-Server-server-57# systemctl enable mysqld# systemctl start mysqld# grep password /var/log/mysqld.log# mysqladmin -u root -p password 'Nerv2020.'# mysql -u root -pNerv2020.mysql> SHOW DATABASES;mysql> SHOW ENGINES;

Importe os bancos de dados de exemplo.# mysql -u root -pNerv2020. -e 'SHOW DATABASES'# mysql -u root -pNerv2020. < MYA.sql# mysql -u root -pNerv2020. -e 'SHOW DATABASES'

66 66

MariaDB

https://en.wikipedia.org/wiki/MariaDB

67 67

MariaDB

https://mariadb.com/kb/en/library/mariadb-vs-mysql-features/

68 68

MariaDB

https://mariadb.com/kb/en/library/mariadb-vs-mysql-features/

69 69

MariaDB

https://mariadb.com/kb/en/library/mariadb-vs-mysql-features/

70 70

MariaDB

https://mariadb.com/kb/en/library/optimizer-feature-comparison-matrix/

71 71

MariaDB

https://mariadb.com/kb/en/library/optimizer-feature-comparison-matrix/

72 72

MariaDB

https://mariadb.com/kb/en/library/mariadb-vs-mysql-compatibility/

73 73

MariaDB

https://mariadb.org/performance-evaluation-of-mariadb-10-1-and-mysql-5-7-4-labs-tplc/

74 74

MariaDB

75 75

MariaDB - Services

https://mariadb.com/services/

76 76

MariaDB - Subscription

https://mariadb.com/pricing/

77 77

MariaDB - Subscription

https://mariadb.com/pricing/

78 78

MariaDB x mariadb.org x mariadb.com

https://mariadb.org/about/https://mariadb.org/about/#sponsorshttps://mariadb.org/about/#board

79 79

MariaDB x mariadb.org x mariadb.com

https://mariadb.com/trademarks/

80 80

Business Source License (BSL)

https://mariadb.com/bsl-faq-mariadb/

81 81

Business Source License (BSL)

https://mariadb.com/projects-using-bsl-11/

82 82

MariaDB - Parceiros

https://mariadb.com/kb/en/library/sql-diagnostic-manager-sqlyog/

83 83

Lab 3.1: MariaDBNo Oracle VM VirtualBox, crie uma nova VM, com o nome “MariaDB”, importanto novamente o arquivo /root/Linux.ova.

84 84

Lab 3.2: MariaDB

https://downloads.mariadb.org/mariadb/repositories

85 85

Lab 3.3: MariaDB

Verifique o IP da VM, e a acesse via ssh.# ip addr

Pelo nmtui, altere o hostname da VM para MariaDB.localdomain.

Instale o MariaDB.# vi /etc/yum.repos.d/MariaDB.repo[mariadb]name = MariaDBbaseurl = http://yum.mariadb.org/10.5/rhel7-amd64gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1

# yum -y install MariaDB-server# systemctl enable mariadb# ls -lh /var/lib/mysql/# systemctl status mariadb# systemctl start mariadb# ls -lh /var/lib/mysql/# mysqlmysql> SHOW ENGINES;

Importe os bancos de dados de exemplo.# mysql -e 'SHOW DATABASES'# mysql < MYA.sql# mysql -e 'SHOW DATABASES'

86

Administração

86

87 87

Lab 4.1: Estruturas Físicas e Lógicas

Crie um novo banco de dados.# mysqlmysql> SHOW TABLES;mysql> SHOW DATABASES;

mysql> CREATE DATABASE nerv;mysql> SHOW DATABASES;mysql> USE nerv;mysql> STATUS;mysql> SHOW TABLES;

mysql> SELECT * FROM employees.titles;mysql> select * from employees.titles;

mysql> SELECT * FROM EMPLOYEES.titles;mysql> SELECT * FROM employees.TITLES;

mysql> SHOW CREATE TABLE employees.titles;

# mysql employeesmysql> SHOW TABLES;

88 88

Lab 4.2: Estruturas Físicas e LógicasVerifique as estruturas físicas dos MySQL.# ls -lh /var/lib/mysql/...drwxr-x---. 2 mysql mysql 4.0K Nov 30 10:22 employees-rw-r-----. 1 mysql mysql 13K Dec 1 19:21 ib_buffer_pool-rw-r-----. 1 mysql mysql 48M Dec 1 19:21 ib_logfile0-rw-r-----. 1 mysql mysql 48M Dec 1 19:21 ib_logfile1drwxr-x---. 2 mysql mysql 84 Nov 30 10:22 menageriedrwxr-x---. 2 mysql mysql 4.0K Nov 30 10:22 mysqldrwxr-x---. 2 mysql mysql 20 Dec 1 18:56 nervdrwxr-x---. 2 mysql mysql 8.0K Nov 30 08:47 performance_schemadrwxr-x---. 2 mysql mysql 4.0K Nov 30 10:22 sakiladrwxr-x---. 2 mysql mysql 8.0K Nov 30 08:47 sysdrwxr-x---. 2 mysql mysql 4.0K Nov 30 10:37 testdrwxr-x---. 2 mysql mysql 4.0K Nov 30 10:22 world...[root@MySQL-01 ~]#

# ls -lh /var/lib/mysql/nerv/-rw-rw----. 1 mysql mysql 65 Out 26 15:57 db.opt

# cat /var/lib/mysql/nerv/db.optdefault-character-set=latin1default-collation=latin1_swedish_ci

# ls -lh /var/lib/mysql/menagerie/# ls -lh /var/lib/mysql/mysql/

89 89

Lab 4.3: Dicionário de Dados

Verifique o conteúdo das tabelas do banco mysql.# mysqlmysql> USE mysql;mysql> SHOW TABLES;mysql> SELECT * FROM db;mysql> SELECT * FROM user;

90 90

Lab 4.4: Dicionário de Dados

Verifique o conteúdo das tabelas do banco information_schema.# mysqlmysql> USE information_schema;mysql> SHOW TABLES;mysql> SELECT * FROM TABLES;mysql> SELECT * FROM USER_PRIVILEGES;

http://dev.mysql.com/doc/refman/5.7/en/information-schema.html

91 91

Lab 4.5: Dicionário de Dados

Verifique o conteúdo das tabelas do banco performance_schema.# mysqlmysql> USE performance_schema;mysql> SHOW TABLES;mysql> SELECT * FROM threads;mysql> SELECT * FROM users;

http://dev.mysql.com/doc/refman/5.7/en/performance-schema.htmlhttp://dev.mysql.com/doc/refman/5.7/en/performance-schema-table-index.htmlhttp://dev.mysql.com/doc/refman/5.7/en/sys-schema.html

92 92

Lab 4.6: Variables, Status, Thread States

Verifique as Variables, Status, e Thread States.# mysqlmysql> SHOW VARIABLES;mysql> SHOW VARIABLES LIKE '%wait%';

mysql> SHOW STATUS;mysql> SHOW STATUS LIKE '%Thread%';

mysql> SHOW PROCESSLIST;mysql> SHOW FULL PROCESSLIST;

Variableshttp://dev.mysql.com/doc/refman/5.7/en/server-system-variables.htmlhttps://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html

Status Variableshttp://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html

Thread Stateshttp://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html

93 93

Variables

94 94

Variables

95 95

Lab 4.7: VariablesAltere uma Variable, com SET e com SET GLOBAL.# mysqlmysql> SHOW VARIABLES LIKE '%sort%';mysql> SET sort_buffer_size=524288; (OU SET @@local.sort_buffer_size=524288;)mysql> SHOW VARIABLES LIKE '%sort%'; (OU SELECT @@local.sort_buffer_size;)mysql> SELECT @@global.sort_buffer_size;mysql> EXIT;# mysqlmysql> SHOW VARIABLES LIKE '%sort%';mysql> SELECT @@local.sort_buffer_size;

# mysqlmysql> SHOW VARIABLES LIKE '%sort%';mysql> SET GLOBAL sort_buffer_size=524288; (OU SET @@global.sort_buffer_size=524288;)mysql> SHOW VARIABLES LIKE '%sort%'; (OU SELECT @@local.sort_buffer_size;)mysql> SELECT @@global.sort_buffer_size;mysql> EXIT;# mysqlmysql> SHOW VARIABLES LIKE '%sort%';

mysql> SET GLOBAL sort_buffer_size = DEFAULT;mysql> SET sort_buffer_size = DEFAULT;

mysql> SET global tmpdir='/var/lib/mysql/';

96 96

Lab 4.8: Variables

Altere uma Variable pelo arquivo de parâmetros.# mysqlmysql> SHOW VARIABLES LIKE '%sort%';mysql> exit;

# vi /etc/my.cnf...[mysqld]sort_buffer_size = 2M...

# systemctl stop mysqld# systemctl start mysqld

# mysqlmysql> SHOW VARIABLES LIKE '%sort%';

mysql> SET GLOBAL sort_buffer_size=4M;O que aconteceu?

97 97

Lab 4.9: Usuários e PermissõesCrie um usuário para conexão remota.mysql> CREATE USER 'ricardo'@'localhost' IDENTIFIED BY 'Nerv2020.';mysql> GRANT ALL PRIVILEGES ON *.* TO 'ricardo'@'localhost';mysql> REVOKE ALL PRIVILEGES ON *.* FROM 'ricardo'@'localhost';mysql> DROP USER 'ricardo'@'localhost';

mysql> CREATE USER 'ricardo'@'192.168.0.%' IDENTIFIED BY 'Nerv2020.';mysql> CREATE USER 'ricardo'@'%.localdomain' IDENTIFIED BY 'Nerv2020.';mysql> CREATE USER 'ricardo'@'%' IDENTIFIED BY 'Nerv2020.';mysql> DROP USER 'ricardo'@'192.168.0.%';mysql> DROP USER 'ricardo'@'%.localdomain';mysql> DROP USER 'ricardo'@'%';

mysql> CREATE USER 'ricardo'@'192.168.0.102' IDENTIFIED BY 'Nerv2020.';mysql> GRANT SELECT ON world.city TO 'ricardo'@'192.168.0.102';mysql> GRANT SELECT ON nerv.* TO 'ricardo'@'192.168.0.102';mysql> SET PASSWORD FOR 'ricardo'@'192.168.0.102' = 'Nerv2020.';mysql> FLUSH PRIVILEGES;

mysql> SELECT * FROM information_schema.USER_PRIVILEGES;mysql> SELECT * FROM information_schema.SCHEMA_PRIVILEGES;mysql> SELECT * FROM information_schema.TABLE_PRIVILEGES;mysql> SELECT * FROM mysql.user;

Execute uma conexão remota.# mysql -u ricardo -pNerv2020. -h 192.168.0.103mysql> SHOW DATABASES;

98 98

Usuários e PermissõesPrivilégioshttps://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html

99 99

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

Exporte as tabelas do banco employees para texto.mysql> USE employees;mysql> SELECT * FROM departments INTO OUTFILE '/tmp/departments.txt';O que aconteceu?

mysql> SHOW VARIABLES LIKE 'secure_file_priv';mysql> SELECT * FROM departments INTO OUTFILE '/var/lib/mysql-files/departments.txt';mysql> SELECT * FROM dept_emp INTO OUTFILE '/var/lib/mysql-files/dept_emp.txt';mysql> SELECT * FROM dept_manager INTO OUTFILE '/var/lib/mysql-files/dept_manager.txt';mysql> SELECT * FROM employees INTO OUTFILE '/var/lib/mysql-files/employees.txt';mysql> SELECT * FROM salaries INTO OUTFILE '/var/lib/mysql-files/salaries.txt';mysql> SELECT * FROM titles INTO OUTFILE '/var/lib/mysql-files/titles.txt';

Outras opções:FIELDS TERMINATED BY ','ENCLOSED BY '"'LINES TERMINATED BY '\n';

100 100

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

Importe os arquivos texto para as tabelas do banco employees.mysql> CREATE DATABASE employees_dev;mysql> USE employees_dev;mysql> CREATE TABLE departments AS SELECT * FROM employees.departments WHERE 1=0;mysql> CREATE TABLE dept_emp AS SELECT * FROM employees.dept_emp WHERE 1=0;mysql> CREATE TABLE dept_manager AS SELECT * FROM employees.dept_manager WHERE 1=0;mysql> CREATE TABLE employees AS SELECT * FROM employees.employees WHERE 1=0;mysql> CREATE TABLE salaries AS SELECT * FROM employees.salaries WHERE 1=0;mysql> CREATE TABLE titles AS SELECT * FROM employees.titles WHERE 1=0;

mysql> SET foreign_key_checks = 0;mysql> LOAD DATA INFILE '/var/lib/mysql-files/departments.txt' INTO TABLE departments;mysql> LOAD DATA INFILE '/var/lib/mysql-files/dept_emp.txt' INTO TABLE dept_emp;mysql> LOAD DATA INFILE '/var/lib/mysql-files/dept_manager.txt' INTO TABLE dept_manager;mysql> LOAD DATA INFILE '/var/lib/mysql-files/employees.txt' INTO TABLE employees;mysql> LOAD DATA INFILE '/var/lib/mysql-files/salaries.txt' INTO TABLE salaries;mysql> LOAD DATA INFILE '/var/lib/mysql-files/titles.txt' INTO TABLE titles;mysql> SET foreign_key_checks = 1;

101 101

Lab 4.12: Velocidade de Importação e Exportação

Teste a velocidade de exportação e importação com uma tabela maior.mysql> USE nerv;mysql> CREATE TABLE salaries_BIG AS SELECT * FROM employees.salaries;mysql> INSERT INTO salaries_BIG SELECT * FROM salaries_BIG;mysql> INSERT INTO salaries_BIG SELECT * FROM salaries_BIG;mysql> INSERT INTO salaries_BIG SELECT * FROM salaries_BIG;mysql> SELECT COUNT(*) FROM salaries_BIG;mysql> SELECT * FROM salaries_BIG INTO OUTFILE '/var/lib/mysql-files/BIG.txt';mysql> TRUNCATE TABLE salaries_BIG;mysql> LOAD DATA INFILE '/var/lib/mysql-files/BIG.txt' INTO TABLE salaries_BIG;

102 102

Lab 4.13: MySQL Workbench

Instale o MySQL Workbench.# yum -y install mysql-workbench-community# mysql-workbench

103 103

Lab 4.14: MySQL Workbench

104 104

Lab 4.15: MySQL Workbench

105 105

Lab 4.16: MySQL Workbench

106 106

Lab 4.17: MySQL Workbench

107 107

Lab 4.18: MySQL Workbench

108 108

Lab 4.19: MySQL Workbench

109 109

Lab 4.20: MySQL Workbench

110 110

Lab 4.21: MySQL Workbench

111 111

Lab 4.22: MySQL Workbench

112 112

Lab 4.23: MySQL Workbench

113 113

Lab 4.24: MySQL Workbench

114 114

Lab 4.25: MySQL Workbench

115 115

Lab 4.26: MySQL Workbench

116 116

Lab 4.27: MySQL Workbench

117 117

Lab 4.28: MySQL Workbench

118 118

Lab 4.29: MySQL Workbench

119 119

Lab 4.30: MySQL Workbench

120 120

Lab 4.31: MySQL Workbench

121 121

Lab 4.32: MySQL Workbench

122 122

Lab 4.33: MySQL Workbench

123 123

Lab 4.34: MySQL Workbench

124 124

Lab 4.35: MySQL Workbench

125 125

Lab 4.36: MySQL Workbench

126 126

Lab 4.37: MySQL Variables: Conexões

Altere estas Variables pelo arquivo de parâmetros, e reinicie o MySQL.max_connections = 1000 # default = 151max_user_connections = 0thread_cache_size = 200 # default = 8 + (max_connections / 100)back_log = 100 # default = max_connections / 5slow_launch_time = 2 # Slow_launch_threads

max_connect_errors = 10 # FLUSH HOSTS

host_cache_size = -1 # default = 128 + ((max_connections – 500) / 20)skip_name_resolve = OFF

connect_timeout = 10net_read_timeout = 30net_write_timeout = 60net_retry_count = 10 # FLUSH HOSTS

net_buffer_length = 16384max_allowed_packet = 4194304

wait_timeout = 28800 # 28800 segundos = 8 horas.interactive_timeout = 28800lock_wait_timeout = 31536000 # 31536000 segundos = 1 ano.

Se o MySQL não iniciar:# grep ERR /var/log/mysqld.log

127 127

MySQL Logs

128 128

Lab 4.38: MySQL Variables: Logs

Altere estas Variables pelo arquivo de parâmetros, e reinicie o MySQL.log_output = FILElog_error_verbosity = 3log_error = /var/lib/mysql/mysql-error.log

general_log = OFFgeneral_log_file = /var/lib/mysql/mysql-general.log

slow_query_log = ONslow_query_log_file = /var/lib/mysql/mysql-slow.loglong_query_time = 10min_examined_row_limit = 10log_slow_admin_statements = ONlog_queries_not_using_indexes = ONlog_throttle_queries_not_using_indexes = 1000

129 129

Lab 4.39: Event Scheduler

Habilite o Event Schedulermysql> SELECT @@GLOBAL.event_scheduler;mysql> SHOW PROCESSLIST;mysql> SET GLOBAL event_scheduler = ON;mysql> SELECT @@GLOBAL.event_scheduler;mysql> SHOW PROCESSLIST;mysql> SELECT @@GLOBAL.event_scheduler;

mysql> USE nerv;mysql> SHOW EVENTS;

mysql> CREATE TABLE IF NOT EXISTS messages ( id INT PRIMARY KEY AUTO_INCREMENT, message VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL);

130 130

Lab 4.40: Event Scheduler

Habilite o Event Schedulermysql> SHOW EVENTS;

mysql> CREATE EVENT IF NOT EXISTS test_event_01ON SCHEDULE AT CURRENT_TIMESTAMPDOINSERT INTO messages(message,created_at) VALUES ('Test MySQL Event 1',NOW());mysql> SELECT * FROM messages;

mysql> CREATE EVENT test_event_02ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTEON COMPLETION PRESERVEDOINSERT INTO messages(message,created_at) VALUES ('Test MySQL Event 2',NOW());mysql> SELECT * FROM messages;

mysql> CREATE EVENT test_event_03ON SCHEDULE EVERY 1 MINUTESTARTS CURRENT_TIMESTAMPENDS CURRENT_TIMESTAMP + INTERVAL 1 HOURDOINSERT INTO messages(message,created_at) VALUES ('Test MySQL Event 3',NOW());mysql> SELECT * FROM messages;

mysql> SHOW EVENTS;mysql> DROP EVENT test_event_02;mysql> DROP EVENT test_event_03;mysql> SHOW EVENTS;

131

Backup & Recovery

131

132 132

Engines● MyISAM● InnoDB● Memory (MyISAM-like)● Archive (MyISAM-like)● CSV● Merge (MyISAM-like)● Federated● NDB (MyISAM-like)● Blackhole● Example● Aria● Percona XtraDB (InnoDB-like)● Percona XtraDB Cluster (InnoDB-like)● Percona TokuDB

133 133

Lab 5.1: Backup & RecoveryNo Oracle VM VirtualBox, crie uma nova VM, com o nome “Restore”, importanto novamente o arquivo /root/Linux.ova.Verifique o IP da VM, e a acesse via ssh.# ip addr

Pelo nmtui, altere o hostname da VM para Recover.localdomain.

Instale o Repositório do MySQL, edite o arquivo /etc/yum.repos.d/mysql-community.repo, habilite o reposítório do MySQL 5.7, desabilite do 8.0, e instale o MySQL 5.7.# yum -y install wget# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm# yum -y install mysql80-community-release-el7-3.noarch.rpm# yum -y install mysql-server# systemctl enable mysqld# systemctl start mysqld# grep password /var/log/mysqld.log# /usr/bin/mysqladmin -u root -p password 'Nerv2020.'# firewall-cmd --zone=public --add-port=3306/tcp --permanent# firewall-cmd --reload# firewall-cmd --zone=public --permanent --list-ports

134 134

Lab 5.2: Cold Backup

Execute um Cold Backup.# systemctl stop mysqld# mkdir /root/ColdBackup# cp -rfvp /var/lib/mysql/ /root/ColdBackup/# systemctl start mysqld

Na máquina de Restore, pare o MySQL.# systemctl stop mysqld# rm -rf /var/lib/mysql/*

Na máquina original, copie o Backup para a VM de Restore.# scp -Cr /root/ColdBackup/mysql/* root@192.168.0.99:/var/lib/mysql/

Na VM de Restore, inicie o MySQL.# chown -R mysql:mysql /var/lib/mysql# systemctl start mysqld# mysql -u root -pNerv2020.mysql> SHOW DATABASES;mysql> SELECT COUNT(*) FROM employees.salaries;

135 135

Lab 5.3: Not-so-cold Backup MyISAM

Duplique as tabelas do banco employees no banco nerv.mysql> USE nerv;mysql> CREATE TABLE departments AS SELECT * FROM employees.departments;mysql> CREATE TABLE dept_emp AS SELECT * FROM employees.dept_emp;mysql> CREATE TABLE dept_manager AS SELECT * FROM employees.dept_manager;mysql> CREATE TABLE employees AS SELECT * FROM employees.employees;mysql> CREATE TABLE salaries AS SELECT * FROM employees.salaries;mysql> CREATE TABLE titles AS SELECT * FROM employees.titles;

Altere as tabelas para o Engine MyISAM.mysql> ALTER TABLE departments ENGINE=MyISAM;mysql> ALTER TABLE dept_emp ENGINE=MyISAM;mysql> ALTER TABLE dept_manager ENGINE=MyISAM;mysql> ALTER TABLE employees ENGINE=MyISAM;mysql> ALTER TABLE salaries ENGINE=MyISAM;mysql> ALTER TABLE titles ENGINE=MyISAM;

136 136

Lab 5.4: Not-so-cold Backup MyISAM

Coloque as tabelas MyISAM em LOCK.mysql> SHOW OPEN TABLES FROM nerv;mysql> FLUSH TABLE departments, dept_emp, dept_manager, employees, salaries,titles WITH READ LOCK;mysql> SHOW OPEN TABLES FROM nerv;

Em outra sessão, confira o Lock.mysql> USE nerv;mysql> SELECT * FROM departments;mysql> DELETE FROM departments;^C

Em outra sessão, execute a cópia pelo sistema operacional.# mkdir /root/WarmBackup# cp -rfpv /var/lib/mysql/nerv /root/WarmBackup

Na sessão original, desbloquei as tabelas.mysql> SHOW OPEN TABLES FROM nerv;mysql> UNLOCK TABLES;mysql> SHOW OPEN TABLES FROM nerv;

Na máquina original, copie o Backup para a máquina de Restore.# scp -Cr /root/WarmBackup/nerv/* root@192.168.0.99:/var/lib/mysql/nerv/

Na máquina de Restore, corrija as permissões e confira o banco restaurado.# chown -R mysql:mysql /var/lib/mysql/nervmysql> SELECT COUNT(*) FROM nerv.salaries;

137 137

Lab 5.5: mysqldump

Execute um backup via mysqldump.# mkdir /root/Dump# mysqldump nerv > /root/Dump/nerv.sqlO que aconteceu?# mysqldump --all_databases > /root/Dump/nerv01.sql

Edite o arquivo gerado.O que ele contém?Quais suas desvantagens?

–-single-transaction--lock-all-tables

--events--routines

--compress--quick--no-autocommit

Execute novamente o Dump.# mysqldump --single-transaction --events --routines --compress --quick --no-autocommit nerv > /root/Dump/nerv.sql# mysqldump --single-transaction --events --routines --compress --quick --no-autocommit --all-databases > /root/Dump/nerv01.sql

138 138

Lab 5.6: mysqldump

Copie os Dumps para a VM de Restore.# scp /root/Dump/nerv.sql root@192.168.0.99:/root/# scp /root/Dump/nerv01.sql root@192.168.0.99:/root/

Na VM de Restore, restaure os Dumps e confira o Restore.# mysql -u root -pNerv2020. nerv < /root/nerv.sqlmysql> SELECT COUNT(*) FROM nerv.salaries;# mysql -u root -pNerv2020. < /root/nerv01.sqlmysql> SELECT COUNT(*) FROM nerv.salaries;

O que acontece se o banco de dados não existir na VM de Restore, no 1o Dump? E no 2o?O que acontece se uma tabela existir na VM de Restore, mas não existir no 1o Dump? E no 2o?--add-drop-database

139 139

Lab 5.7: mydumper / myloader

Copie os Dumps para a VM de Restore.# wget https://github.com/maxbube/mydumper/releases/download/v0.9.5/mydumper-0.9.5-2.el7.x86_64.rpm# yum -y install mydumper-0.9.5-2.el7.x86_64.rpm# top -H# mydumper --trx-consistency-only --routines --triggers --events --compress -–threads=8 --logfile /root/mydumper-all.out --verbose=3# mydumper --trx-consistency-only --routines --triggers --events --compress --threads=8 --logfile /root/mydumper-nerv.out –verbose=3 ––database=nerv # ls -lh export*

Copie os Dumps para a VM de Restore.# scp -Cr export-* root@192.168.0.99:/root/

Na VM de Restore, restaure os Dumps (o completo e o de um só banco) e confira o Restore.# wget https://github.com/maxbube/mydumper/releases/download/v0.9.5/mydumper-0.9.5-2.el7.x86_64.rpm# yum -y install mydumper-0.9.5-2.el7.x86_64.rpm# myloader --user=root -–password=Nerv2020. --directory=/root/export-20201203-203701/ --overwrite-tables --threads=8

140 140

Lab 5.8: Bin Logs

Adicione no /etc/my.cnf as linhas abaixo, e reinicie 3 vezes o mysql.server_id = 1sync_binlog = 1log-bin = mysql-binexpire_logs_days = 32Que novos arquivos passaram a existir no diretório de dados?

Execute um Dump com a opção --master-data.# mysqldump --single-transaction --events --routines --compress --quick --no-autocommit –-master-data=2 --all-databases > /root/Dump/nerv01-BinLog.sqlQue nova informação existe no arquivo de Dump?

Execute alterações no banco de dados.mysql> SHOW BINARY LOGS;mysql> SHOW MASTER STATUS;mysql> USE nerv;mysql> CREATE TABLE salaries_test AS SELECT * FROM salaries;mysql> TRUNCATE TABLE salaries;mysql> INSERT INTO salaries_test SELECT * FROM salaries_test;mysql> SHOW BINARY LOGS;mysql> FLUSH LOGS;mysql> SHOW BINARY LOGS;

Copie o Dump e os Bin Logs para a VM de Restore.# scp /root/Dump/nerv01-BinLog.sql root@192.168.0.99:/root/# scp /var/lib/mysql/mysql-bin.0* root@192.168.0.99:/root/

141 141

Lab 5.9: Bin LogsNa VM de Restore, restaure o Dump, e os Bin Logs.# mysql -u root -pNerv2020. < /root/nerv01-BinLog.sql# head -100 /root/nerv01-BinLog.sql | grep MASTER_LOG_POS# mysqlbinlog --start-position=154 mysql-bin.000003 > Recover.sql# mysqlbinlog mysql-bin.000004 >> Recover.sql# mysqlbinlog mysql-bin.000005 >> Recover.sql# grep salaries Recover.sql# mysql -u root -pNerv2020. < Recover.sql

mysql> SELECT COUNT(*) FROM nerv.salaries;mysql> SELECT COUNT(*) FROM nerv.salaries_test;

142 142

XtraBackup

143 143

XtraBackup / MyQL Enterprise Backup / Mariabackup

Percona Percona XtraBackup 1.4Released on November 22, 2010https://www.percona.com/doc/percona-xtrabackup/2.4/release-notes/1.4.html

Changes in MySQL Enterprise Backup 3.12.0 (2015-03-16)https://dev.mysql.com/doc/relnotes/mysql-enterprise-backup/3.12/en/

Mariabackup was first released in MariaDB 10.1.23 and MariaDB 10.2.7.It was first released as GA in MariaDB 10.1.26 and MariaDB 10.2.10.https://mariadb.com/kb/en/library/mariabackup-overview/

MariaDB 10.1.23 Release NotesRelease date: 3 May 2017https://mariadb.com/kb/en/library/mariadb-10123-release-notes/

144 144

XtraBackup

https://www.percona.com/doc/percona-xtrabackup/8.0/intro.html

145 145

XtraBackup

https://www.percona.com/doc/percona-xtrabackup/8.0/intro.html

146 146

XtraBackup

https://www.percona.com/doc/percona-xtrabackup/8.0/intro.html

147 147

Lab 5.10: xtrabackup

Instale o xtrabackup.# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm# yum -y install epel-release-latest-7.noarch.rpm# wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm# yum -y install percona-release-latest.noarch.rpm# yum -y install percona-xtrabackup-24.x86_64

Execute um backup.# mkdir -p /root/XtraBackup/# export HORADOBACKUP=`date +%Y%m%d-%H%M%S`# xtrabackup --backup --parallel=4 --target-dir=/root/XtraBackup/XtraBackup-$HORADOBACKUP/# xtrabackup --prepare --target-dir=/root/XtraBackup/XtraBackup-$HORADOBACKUP/# ls -lh /root/XtraBackup/XtraBackup-$HORADOBACKUP/# cat /root/XtraBackup/XtraBackup-$HORADOBACKUP/xtrabackup_binlog_info

Restaure o backup.# systemctl stop mysqld# rm -rf /var/lib/mysql/*# xtrabackup --copy-back --target-dir=/root/XtraBackup/XtraBackup-$HORADOBACKUP/# chown -R mysql:mysql /var/lib/mysql# systemctl start mysqld

148 148

Lab 5.11: xtrabackup

Na VM de Restore, pare o MySQL.# systemctl stop mysqld# rm -rf /var/lib/mysql/*

Copie o Backup para a VM de Restore.# scp -Cr /root/XtraBackup-$HORADOBACKUP/* root@192.168.0.99:/var/lib/mysql/

Na VM de Restore, inicie o MySQL e confira o Restore.# chown -R mysql:mysql /var/lib/mysql# systemctl start mysqldmysql> SELECT COUNT(*) FROM nerv.salaries;mysql> SELECT COUNT(*) FROM nerv.salaries_test;

149 149

Lab 5.12: xtrabackup

Crie os diretórios para os backups incrementais.# mkdir /root/XtraBackup/base# mkdir /root/XtraBackup/incremental1# mkdir /root/XtraBackup/incremental2# mkdir /root/XtraBackup/incremental3

Execute um backup base, e os incrementais.# xtrabackup --backup --target-dir=/root/XtraBackup/base/mysql> CREATE TABLE nerv.AposBackupBase (c1 INT);

# xtrabackup --backup --target-dir=/root/XtraBackup/incremental1/ --incremental-basedir=/root/XtraBackup/base/mysql> CREATE TABLE nerv.AposBackupIncremental1 (c1 INT);

# xtrabackup --backup --target-dir=/root/XtraBackup/incremental2/ --incremental-basedir=/root/XtraBackup/incremental1/mysql> CREATE TABLE nerv.AposBackupIncremental2 (c1 INT);

# xtrabackup --backup --target-dir=/root/XtraBackup/incremental3/ --incremental-basedir=/root/XtraBackup/incremental2/mysql> CREATE TABLE nerv.AposBackupIncremental3 (c1 INT);

Verifique o tamanho dos backups.# du -sh /root/XtraBackup/base/# du -sh /root/XtraBackup/incremental*# ls -lh /root/XtraBackup/base/nerv/# ls -lh /root/XtraBackup/incremental1/nerv/

150 150

Lab 5.13: xtrabackup

Atualize o backup base com os backups incrementais.# xtrabackup --prepare --apply-log-only --target-dir=/root/XtraBackup/base/# xtrabackup --prepare --apply-log-only --target-dir=/root/XtraBackup/base/ --incremental-dir=/root/XtraBackup/incremental1/# xtrabackup --prepare --apply-log-only --target-dir=/root/XtraBackup/base/ --incremental-dir=/root/XtraBackup/incremental2/# xtrabackup --prepare --apply-log-only --target-dir=/root/XtraBackup/base/ --incremental-dir=/root/XtraBackup/incremental3/

Restaure e confira o Restore.# systemctl stop mysqld# rm -rf /var/lib/mysql/*# xtrabackup --copy-back --target-dir=/root/XtraBackup/base/# chown -R mysql:mysql /var/lib/mysql/# systemctl start mysqldmysql> USE nerv;mysql> SHOW TABLES;

151 151

Lab 5.14: xtrabackup / innobackupex

Crie um diretório e execute um backup comprimido.# mkdir -p /root/XtraBackup/compress/# innobackupex --no-timestamp --datadir=/var/lib/mysql/ --user=root --password=Nerv2020. --parallel=4 --compress --compress-threads=4 /root/XtraBackup/compress/# ls -lh /root/XtraBackup/compress/nerv/

Prepare o backup para restauração.# yum -y install qpress# innobackupex --decompress –-remove-original --parallel=4 /root/XtraBackup/compress/# ls -lh /root/XtraBackup/compress/nerv/# innobackupex --apply-log --parallel=4 --use-memory=1G /root/XtraBackup/compress/

Restaure e confira o Restore.# systemctl stop mysqld# rm -rf /var/lib/mysql/*# xtrabackup --copy-back --target-dir=/root/XtraBackup/compress/# chown -R mysql:mysql /var/lib/mysql/# systemctl start mysqldmysql> USE nerv;mysql> SHOW TABLES;

152 152

Lab 5.15: xtrabackup / innobackupexCrie os diretórios, e execute backups comprimidos e incrementais.# mkdir -p /root/XtraBackup/compress/base# mkdir -p /root/XtraBackup/compress/incremental1# mkdir -p /root/XtraBackup/compress/incremental2# mkdir -p /root/XtraBackup/compress/incremental3

# innobackupex --no-timestamp --datadir=/var/lib/mysql/ --parallel=4 --compress --compress-threads=4 /root/XtraBackup/compress/basemysql> CREATE TABLE nerv.AposBackupCompressedBase (c1 INT);

# innobackupex --no-timestamp --parallel=4 --compress --compress-threads=4 --incremental /root/XtraBackup/compress/incremental1/ --incremental-basedir=/root/XtraBackup/compress/base/mysql> CREATE TABLE nerv.AposBackupCompressedIncremental1 (c1 INT);

# innobackupex --no-timestamp --parallel=4 --compress --compress-threads=4 --incremental /root/XtraBackup/compress/incremental2/ --incremental-basedir=/root/XtraBackup/compress/incremental1/mysql> CREATE TABLE nerv.AposBackupCompressedIncremental2 (c1 INT);

# innobackupex --no-timestamp --parallel=4 --compress --compress-threads=4 --incremental /root/XtraBackup/compress/incremental3/ --incremental-basedir=/root/XtraBackup/compress/incremental2/mysql> CREATE TABLE nerv.AposBackupCompressedIncremental3 (c1 INT);

153 153

Lab 5.16: xtrabackup / innobackupexAtualize o backup base com os backups incrementais.# innobackupex --decompress --parallel=4 /root/XtraBackup/compress/base/# innobackupex --apply-log --redo-only --use-memory=1G /root/XtraBackup/compress/base/

# innobackupex --decompress --parallel=4 /root/XtraBackup/compress/incremental1/# innobackupex --apply-log --redo-only --use-memory=1G /root/XtraBackup/compress/base/ --incremental-dir=/root/XtraBackup/compress/incremental1/

# innobackupex --decompress --parallel=4 /root/XtraBackup/compress/incremental2/# innobackupex --apply-log --redo-only --use-memory=1G /root/XtraBackup/compress/base/ --incremental-dir=/root/XtraBackup/compress/incremental2/

# innobackupex --decompress --parallel=4 /root/XtraBackup/compress/incremental3/# innobackupex --apply-log --redo-only --use-memory=1G /root/XtraBackup/compress/base/ --incremental-dir=/root/XtraBackup/compress/incremental3/

# rm -rf /root/XtraBackup/compress/base/*.qp

Restaure e confira o Restore.# systemctl stop mysqld# rm -rf /var/lib/mysql/*# xtrabackup --copy-back --target-dir=/root/XtraBackup/compress/base/# chown -R mysql:mysql /var/lib/mysql# systemctl start mysqldmysql> USE nerv;mysql> SHOW TABLES;

154

Tuning

154

155 155

Lab 6.1: datadir

Altere a localização do diretório de dados do MySQL.# systemctl stop mysqld# mkdir /mysql# cp -R -p -v /var/lib/mysql/* /mysql/

# chown -R mysql:mysql /mysql# yum -y install policycoreutils-python# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"# restorecon -Rv /mysql# cat /etc/selinux/targeted/contexts/files/file_contexts.local# chcon -R -u system_u -r object_r -t mysqld_db_t /mysql

# vi /etc/my.cnf...datadir=/mysql...

# systemctl start mysqld

156 156

Lab 6.2: InnoDB System Tablespace

Altere a localização da System Tablespace do InnoDB do MySQL.# systemctl stop mysqld# mkdir /InnoDB01# mv /mysql/ibdata1 /InnoDB01/

# chown -R mysql:mysql /InnoDB01# semanage fcontext -a -t mysqld_db_t "/InnoDB01(/.*)?"# restorecon -Rv /InnoDB01# cat /etc/selinux/targeted/contexts/files/file_contexts.local# chcon -R -u system_u -r object_r -t mysqld_db_t /InnoDB01

# vi /etc/my.cnf...innodb_file_per_table=OFFinnodb_data_home_dir=innodb_data_file_path=/InnoDB01/ibdata1:10M:autoextend:max:10G...

# systemctl start mysqld

157 157

Lab 6.3: Bin Logs

Altere a localização dos Bin Logs do MySQL.# systemctl stop mysqld# mkdir /BinLogs# mv /mysql/mysql-bin* /BinLogs/

# chown -R mysql:mysql /BinLogs# semanage fcontext -a -t mysqld_db_t "/BinLogs(/.*)?"# restorecon -Rv /BinLogs# cat /etc/selinux/targeted/contexts/files/file_contexts.local# chcon -R -u system_u -r object_r -t mysqld_db_t /BinLogs

# vi /etc/my.cnf...log-bin=/BinLogs/mysql-bin...

# systemctl start mysqld# systemctl restart mysqld# systemctl restart mysqld# ls -lh /BinLogs/

158 158

Lab 6.4: InnoDB Logs

Altere a localização dos Logs do InnoDB.# systemctl stop mysqld# mkdir /InnoDBLogs# mv /mysql/ib_logfile* /InnoDBLogs/

# chown -R mysql:mysql /InnoDBLogs# semanage fcontext -a -t mysqld_db_t "/InnoDBLogs(/.*)?"# restorecon -Rv /InnoDBLogs# cat /etc/selinux/targeted/contexts/files/file_contexts.local# chcon -R -u system_u -r object_r -t mysqld_db_t /InnoDBLogs

# vi /etc/my.cnf...innodb_log_group_home_dir=/InnoDBLogs/...

# systemctl start mysqld# ls -lh /InnoDBLogs/

159 159

Lab 6.5: Tablespaces InnoDB

Crie uma TABLESPACE, e mova tabelas para ela.# mkdir /BigTablespace

# chown -R mysql:mysql /BigTablespace# semanage fcontext -a -t mysqld_db_t "/BigTablespace(/.*)?"# restorecon -Rv /BigTablespace# cat /etc/selinux/targeted/contexts/files/file_contexts.local# chcon -R -u system_u -r object_r -t mysqld_db_t /BigTablespace

mysql> CREATE TABLESPACE BigTS ADD DATAFILE '/BigTablespace/BigTS.ibd' Engine=InnoDB;# ls -lh /mysql/nerv/salaries*# ls -lh /BigTablespace/BigTS.ibd

mysql> ALTER TABLE nerv.salaries_BIG TABLESPACE BigTS;mysql> ALTER TABLE nerv.salaries_test TABLESPACE BigTS;# ls -lh /mysql/nerv/salaries*# ls -lh /BigTablespace/BigTS.ibd

160 160

Engines: InnoDB

161 161

Engines: MyISAM

162 162

Engines: Memory

163 163

Engines: Archive

164 164

Lab 6.6: myisampackCrie uma tabela graande, e teste sua velocidade de leitura antes e depois da compactação.mysql> CREATE TABLE nerv.salaries_BIG_RO AS SELECT * FROM nerv.salaries_BIG;mysql> ALTER TABLE nerv.salaries_BIG_RO Engine=MyISAM;mysql> INSERT INTO nerv.salaries_BIG_RO SELECT * FROM nerv.salaries_BIG_RO;mysql> INSERT INTO nerv.salaries_BIG_RO SELECT * FROM nerv.salaries_BIG_RO;mysql> INSERT INTO nerv.salaries_BIG_RO SELECT * FROM nerv.salaries_BIG_RO;mysql> CREATE INDEX IX_salaries_BIG_RO_emp_no ON nerv.salaries_BIG_RO(emp_no);

mysql> SELECT COUNT(salary) FROM nerv.salaries_BIG_RO;mysql> SELECT SUM(salary) FROM nerv.salaries_BIG_RO;mysql> SELECT SUM(salary) FROM nerv.salaries_BIG_RO;mysql> SELECT SUM(salary) FROM nerv.salaries_BIG_RO;

# myisamchk -dvv /mysql/nerv/salaries_BIG_RO# ls -lh /mysql/nerv/salaries_BIG_RO*# myisampack -v /mysql/nerv/salaries_BIG_RO# ls -lh /mysql/nerv/salaries_BIG_RO*# myisamchk -rq /mysql/nerv/salaries_BIG_RO# ls -lh /mysql/nerv/salaries_BIG_RO*# myisamchk -dvv /mysql/nerv/salaries_BIG_ROmysql> SELECT COUNT(salary) FROM nerv.salaries_BIG_RO;mysql> SELECT SUM(salary) FROM nerv.salaries_BIG_RO;O que aconteceu?mysql> FLUSH TABLES;

# myisamchk --unpack /mysql/nerv/salaries_BIG_RO# ls -lh /mysql/nerv/salaries_BIG_RO*

165 165

Lab 6.7: Benchmark - mysqlslap

Execute um teste de carga no MySQL.# yum -y install mysql-community-test# mysqlslap --user=root –-password=Nerv2020. --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.# top -H

Durante a execução do teste, acompanhe no MySQL, via PROCESSLIST.mysql> SHOW PROCESSLIST;

Execute novamente o teste, mas com os Engines MyISAM e Memory.Qual o Engine mais rápido?Qual o Engine mais escalável?

166 166

Lab 6.8: Benchmark - sysbench

Instale o sysbench.# yum -y install sysbench

Durante a execução do teste, acompanhe no MySQL, via mysqladmin.mysql> create database sbtest;mysql> create user 'sbtest'@'localhost' identified by 'Nerv2020.';mysql> grant all privileges on sbtest.* to 'sbtest'@'localhost';

# sysbench --db-driver=mysql /usr/share/sysbench/oltp_read_only.lua --threads=4 --mysql-host=localhost --mysql-user=sbtest --mysql-password=Nerv2020. --mysql-port=3306 --tables=10 --table-size=1000000 prepare

# sysbench --db-driver=mysql /usr/share/sysbench/oltp_read_only.lua --threads=16 --events=0 --time=300 --mysql-host=localhost --mysql-user=sbtest --mysql-password=Nerv2020. --mysql-port=3306 --tables=10 --table-size=1000000 --report-interval=1 run

Durante a execução do teste, acompanhe no MySQL, via PROCESSLIST.

167 167

Lab 6.9: Benchmark - sysbench

Durante a execução do teste, acompanhe no MySQL, via mysqladmin.mysql> drop database sbtest;mysql> create database sbtest;mysql> grant all privileges on sbtest.* to 'sbtest'@'localhost';

# sysbench --db-driver=mysql /usr/share/sysbench/tpcc.lua --tables=10 --scale=1 --threads=4 --mysql-host=localhost --mysql-user=sbtest --mysql-password=Nerv2020. --mysql-port=3306 prepare

# sysbench --db-driver=mysql /usr/share/sysbench/tpcc.lua --tables=10 --scale=1 --threads=16 --mysql-host=localhost --mysql-user=sbtest --mysql-password=Nerv2020. --mysql-port=3306 run

Durante a execução do teste, acompanhe no MySQL, via PROCESSLIST.

168 168

Lab 6.10: mytop

Instale o mytop.# yum -y install mytop# mytop -d mysql

Execute novamente os testes de carga, e acompanhe pelo mytop.

169 169

Lab 6.11: innotop

Instale o innotop.# yum -y install innotop# innotop

Execute novamente os testes de carga com InnoDB, e acompanhe pelo innotop.

170 170

Lab 6.12: SHOW ENGINE INNODB

Execute novamente os teste de carga com InnoDB, e acompanhe pelo comando abaixo.# mysql -E -e "SHOW ENGINE INNODB STATUS"

171 171

Engines: CSV

172 172

Engines: Merge

173 173

Engines: Federated

174 174

Engines: Federated - Connection

175 175

Engines: Federated - Server

176 176

Engines: Blackhole

177 177

Engines: Example

178 178

Lab 6.13: Parâmetros de TuningAltere os parâmetros abaixo de forma a otimizar os Labs 4.12, 5.6, 6.6, 6.7 e 6.9.### Huge Pageslarge_pages = OFF

### Asyncronous Writeflush = OFFflush_time = 0

### Temporary Tablesmax_heap_table_size = 16777216default_tmp_storage_engine = MyISAMtmp_table_size = 8M # (Created_tmp_tables – Created_tmp_disk_tables) > 0tmpdir = /tmp/

### Query Cachequery_cache_type = ON # (BI / OLAP / DSS)query_cache_size = 16M # (Qcache_hits)query_cache_limit = 1M # (Qcache_inserts)query_cache_min_res_unit = 4096 # (Qcache_inserts)

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.htmlhttps://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html

179 179

Lab 6.14: Parâmetros de TuningAltere os parâmetros abaixo de forma a otimizar os Labs 4.12, 5.6, 6.6, 6.7 e 6.9.### Metadataopen_files_limit = 10000table_open_cache = 400 # (Opened_tables)table_open_cache_instances = 1 # Thread State Opening tablestable_definition_cache = 600 # (400 + (table_open_cache / 2))metadata_locks_cache_size = 1024 # (Waiting for table metadata lock)metadata_locks_hash_instances = 8 # (Waiting for table metadata lock)max_prepared_stmt_count = 16382 # (Com_prepare_sql Prepared_stmt_count)query_prealloc_size = 8192query_alloc_block_size = 8192stored_program_cache = 256transaction_alloc_block_size = 8192transaction_prealloc_size = 4096

### Individual Buffersread_buffer_size = 2M # Thread State Sending dataread_rnd_buffer_size = 2Msort_buffer_size = 2M # (Sort_merge_passes)max_length_for_sort_data = 8388608join_buffer_size = 2M # (index scans, range index scans, joins FTS)max_join_size = 4Grange_alloc_block_size = 4096

180 180

Lab 6.15: Parâmetros de TuningAltere os parâmetros abaixo de forma a otimizar os Labs 4.12, 5.6, 6.6, 6.7 e 6.9.### MyISAMkey_cache_block_size = 4096key_buffer_size = 128M # 25% RAMkey_cache_age_threshold = 300key_cache_division_limit = 100 # (Hot)bulk_insert_buffer_size = 8388608concurrent_insert = ALWAYSdelay_key_write = ALLlow_priority_updates = OFF # (INSERT, UPDATE, DELETE, LOCK TABLE WRITE)myisam_sort_buffer_size = 8388608 # (REPAIR TABLE, CREATE INDEX, ALTER TABLE)myisam_max_sort_file_size = 2147483648 # (REPAIR TABLE,ALTER TABLE, LOAD DATA INFILE)

Exemplo:prod.key_buffer_size = 128Mdev.key_buffer_size = 16Mmysql> CACHE INDEX t1, t2, t3 IN prod;

181 181

Lab 6.16: Parâmetros de TuningAltere os parâmetros abaixo de forma a otimizar os Labs 4.12, 5.6, 6.6, 6.7 e 6.9.### InnoDB Filesinnodb_checksums = ON # < 5.7innodb_checksum_algorithm = crc32innodb_doublewrite = OFFinnodb_autoextend_increment = 64innodb_file_per_table = 1innodb_file_format = Barracudainnodb_compression_level = 6innodb_compression_failure_threshold_pct = 0innodb_compression_pad_pct_max = 50

### InnoDB Threadsinnodb_numa_interleave = OFFinnodb_read_io_threads = 4 # (Pending reads) show engine innodb status;innodb_write_io_threads = 4 # (Pending writes)innodb_thread_concurrency = 0 # (cs)innodb_concurrency_tickets = 5000innodb_thread_sleep_delay = 10000innodb_adaptive_max_sleep_delay = 150000

### Lockinnodb_lock_wait_timeout = 50innodb_rollback_on_timeout = OFF

182 182

Lab 6.17: Parâmetros de TuningAltere os parâmetros abaixo de forma a otimizar os Labs 4.12, 5.6, 6.6, 6.7 e 6.9.### InnoDB Bufferinnodb_page_size = 16384innodb_buffer_pool_size = 2Ginnodb_buffer_pool_instances = 1 # 1 para cada 10GB de innodb_buffer_pool_sizeinnodb_change_buffering = ALLinnodb_change_buffer_max_size = 25

innodb_buffer_pool_dump_at_shutdown = ONinnodb_buffer_pool_load_at_startup = ONinnodb_buffer_pool_dump_now = OFFinnodb_buffer_pool_load_now = OFFinnodb_buffer_pool_load_abort = OFFinnodb_buffer_pool_filename = InnoDB.dumpinnodb_buffer_pool_dump_pct = 100

innodb_random_read_ahead = ON # (OFF em SSD)innodb_read_ahead_threshold = 32

### InnoDB Undoinnodb_purge_threads = 1 ### show engine innodb status; (History list length)innodb_purge_batch_size = 300innodb_max_purge_lag = 0 # (History list length)innodb_max_purge_lag_delay = 0 # (History list length)

183 183

Lab 6.18: Parâmetros de TuningAltere os parâmetros abaixo de forma a otimizar os Labs 4.12, 5.6, 6.6, 6.7 e 6.9.### InnoDB Flushinnodb_use_native_aio = ON # Linuxinnodb_flush_method = O_DIRECTinnodb_flush_neighbors = 1 # (0 em SSD)innodb_adaptive_flushing = ONinnodb_flushing_avg_loops = 30innodb_adaptive_flushing_lwm = 10innodb_lru_scan_depth = 1024innodb_max_dirty_pages_pct_lwm = 10innodb_max_dirty_pages_pct = 75innodb_old_blocks_pct = 37innodb_old_blocks_time = 1000innodb_io_capacity = 200innodb_io_capacity_max = 2000

### InnoDB Loginnodb_log_file_size = 32Minnodb_log_files_in_group = 7innodb_log_buffer_size = 64Minnodb_log_compressed_pages = ONinnodb_flush_log_at_trx_commit = 1innodb_flush_log_at_timeout = 1 # (1 a 2700)innodb_fast_shutdown = 1

184 184

Lab 6.19: Parâmetros de TuningAltere os parâmetros abaixo de forma a otimizar os Labs 4.12, 5.6, 6.6, 6.7 e 6.9.### InnoDB Statisticsinnodb_stats_auto_recalc = ONinnodb_stats_transient_sample_pages = 8 # (STATS_SAMPLE_PAGES)innodb_stats_persistent = ONinnodb_stats_persistent_sample_pages = 20 # (STATS_SAMPLE_PAGES)

### InnoDB Optimizerinnodb_adaptive_hash_index = ONinnodb_sort_buffer_size = 67108864 # (CREATE INDEX)innodb_disable_sort_file_cache = OFF

185 185

Parâmetros de Tuning - Optimizer

186 186

Lab 6.20: Parâmetros de Tuning

Altere os parâmetros abaixo de forma a otimizar os Labs 4.12, 5.6, 6.6, 6.7 e 6.9.### Optimizeroptimizer_prune_level = 1optimizer_search_depth = 62eq_range_index_dive_limit = 10max_seeks_for_key = 1000

optimizer_switch=index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,subquery_materialization_cost_based=on,use_index_extensions=on

187 187

Lab 6.21: Transações e Isolamento

Altere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.mysql> use nerv;mysql> CREATE TABLE teste1 (c1 int, c2 char(50), c3 varchar(255)) Engine=InnoDB;mysql> CREATE TABLE teste2 (c1 int, c2 char(50), c3 varchar(255)) Engine=MyISAM;

mysql> insert into teste1 values (1, 'AAA', 'AAAAAAAAAA');mysql> insert into teste1 values (2, 'AAA', 'AAAAAAAAAA');mysql> insert into teste1 values (3, 'AAA', 'AAAAAAAAAA');mysql> insert into teste1 values (4, 'AAA', 'AAAAAAAAAA');mysql> insert into teste1 values (5, 'AAA', 'AAAAAAAAAA');mysql> insert into teste1 values (6, 'AAA', 'AAAAAAAAAA');mysql> insert into teste1 values (7, 'AAA', 'AAAAAAAAAA');mysql> insert into teste1 values (8, 'AAA', 'AAAAAAAAAA');mysql> insert into teste1 values (9, 'AAA', 'AAAAAAAAAA');mysql> insert into teste1 values (10, 'AAA', 'AAAAAAAAAA');mysql> insert into teste2 select * from teste1;

188 188

Lab 6.22: Transações e Isolamento1a Sessão:mysql> update teste1 set c2 = 'BBB';mysql> select * from teste1;

mysql> start transaction;mysql> update teste1 set c2 = 'CCC';mysql> select * from teste1;

mysql> commit;mysql> select * from teste1;

mysql> start transaction;mysql> update teste1 set c2 = 'DDD';

mysql> commit;mysql> select * from teste1;

2a Sessão:

mysql> select * from teste1;

mysql> select * from teste1;

mysql> select * from teste1;

mysql> update teste1 set c2 = 'EEE';

mysql> select * from teste1;

3a Sessão:mysql> SHOW PROCESSLIST;mysql> SELECT waiting_trx_id, waiting_pid, waiting_query, blocking_trx_id, blocking_pid, blocking_query FROM sys.innodb_lock_waits;mysql> KILL 22;

189 189

Lab 6.23: Transações e Isolamento1a Sessão:mysql> update teste2 set c2 = 'BBB';mysql> select * from teste2;

mysql> start transaction;mysql> update teste2 set c2 = 'CCC';mysql> select * from teste2;

mysql> commit;mysql> select * from teste2;

mysql> start transaction;mysql> update teste2 set c2 = 'DDD';

mysql> commit;mysql> select * from teste2;

2a Sessão:

mysql> select * from teste2;

mysql> select * from teste2;

mysql> select * from teste2;

mysql> update teste2 set c2 = 'EEE';

mysql> select * from teste2;

190 190

Lab 6.24: Comandos AdministrativosExecute estas operações no banco employees e nerv:mysql> ANALYZE TABLE employees.salaries;mysql> INSERT INTO nerv.salaries SELECT * FROM employees.salaries;mysql> ANALYZE TABLE nerv.salaries;

mysql> OPTIMIZE TABLE employees.salaries;

# ls -lh /mysql/nerv/salaries.*mysql> OPTIMIZE TABLE nerv.salaries;# ls -lh /mysql/nerv/salaries.*mysql> DELETE FROM nerv.salaries;# ls -lh /mysql/nerv/salaries.*mysql> OPTIMIZE TABLE nerv.salaries;mysql> OPTIMIZE TABLE nerv.salaries;# ls -lh /mysql/nerv/salaries.*

mysql> REPAIR TABLE employees.salaries;mysql> REPAIR TABLE nerv.salaries;

# mysqlcheck -u root -pNerv2020. nerv# mysqlcheck -a -u root -pNerv2020. nerv# mysqlcheck -o -u root -pNerv2020. nerv# mysqlcheck -r -u root -pNerv2020. nerv

# mysqlcheck -u root -pNerv2020. employees# mysqlcheck -a -u root -pNerv2020. employees# mysqlcheck -o -u root -pNerv2020. employees# mysqlcheck -r -u root -pNerv2020. employees

191 191

Lab 6.25: mysqldumpslowExecute o mysqldumpslow.# mysqldumpslow /var/lib/mysql/mysql-slow.log# mysqldumpslow /var/lib/mysql/mysql-slow.log > /root/Slow.txt# mysqldumpslow -s r /var/lib/mysql/mysql-slow.log > /root/Slow.txt

192 192

Lab 6.26: EXPLAIN

mysql> use sakila;mysql> EXPLAIN SELECT actor.first_name, actor.last_name, film.titleFROM actor, film, film_actorWHERE actor.first_name = 'ADAM' ANDactor.actor_id = film_actor.actor_id ANDfilm_actor.film_id ANDfilm.film_id = film_actor.film_id;

193 193

Lab 6.27: SHOW PROFILE

194 194

Partitioning

195 195

Partitioning - RANGE

196 196

Partitioning - RANGE

197 197

Partitioning - LIST

198 198

Partitioning - RANGE COLUMNS

199 199

Partitioning - LIST COLUMNS

200 200

Partitioning - HASH

201 201

Partitioning - KEY

202 202

memcached

https://dev.mysql.com/doc/refman/5.7/en/innodb-memcached-intro.html

203 203

memcached

204

Alta Disponibilidade

204

205 205

Alta Disponibilidade

DRBD / Pacemaker / Corosync

206 206

Alta Disponibilidade

Windows Server Failover Clustering

207 207

Alta Disponibilidade

MySQL Replication

208 208

Lab 7.1: MySQL ReplicationNo Oracle VM VirtualBox, crie uma nova VM, com o nome “Slave 01”, importanto novamente o arquivo /root/Linux.ova.Inicie a VM, verifique seu IP, e acesse por ssh.Pelo nmtui, altere o hostname da VM.

Adicione a linha abaixo no arquivo de configuração, e reinicie o MySQL.server-id=2

Execute a configuração da Replicação no Master.mysql> CREATE USER 'rep'@'192.168.0.99' IDENTIFIED BY 'Nerv2020.';mysql> GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.0.99';mysql> FLUSH TABLES WITH READ LOCK;mysql> SHOW MASTER STATUS;Backup no Mastermysql> UNLOCK TABLES;Restore no Slave

Execute a configuração da Replicação no Slave.mysql> CHANGE MASTER TOMASTER_HOST='192.168.0.101',MASTER_USER='rep',MASTER_PASSWORD='Nerv2020.',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=435;mysql> START SLAVE;mysql> SHOW SLAVE STATUS;# mysql -E -e "SHOW SLAVE STATUS" | grep -e Running -e Seconds

209 209

GTID

210 210

MySQL Parallel ReplicationAltere os parâmetros abaixo:slave_parallel_type = LOGICAL_CLOCKslave_parallel_workers = 20

211 211

MySQL Proxy

212 212

Alta Disponibilidade

ProxySQL

https://www.proxysql.com/compare

213 213

Proxy SQL# wget http://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/7/proxysql-2.0.8-1-centos7.x86_64.rpm# yum -y install proxysql-2.0.8-1-centos7.x86_64.rpm

# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm# yum -y install mysql80-community-release-el7-3.noarch.rpm# vi /etc/yum.repos.d/mysql-community.repo

# yum -y install mysql-community-client proxysql

# systemctl enable proxysql# systemctl start proxysql

# mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '

Admin> UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';Admin> UPDATE global_variables SET variable_value='Nerv2020.' WHERE variable_name='mysql-monitor_password';Admin> LOAD MYSQL VARIABLES TO RUNTIME;Admin> SAVE MYSQL VARIABLES TO DISK;

Admin> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (1, '192.168.0.97', 3306);Admin> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '192.168.0.98', 3306);Admin> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '192.168.0.99', 3306);Admin> SELECT hostgroup_id, hostname, status FROM mysql_servers ORDER BY hostgroup_id;Admin> LOAD MYSQL SERVERS TO RUNTIME;Admin> SAVE MYSQL SERVERS TO DISK;

Admin> INSERT INTO mysql_users(username, password, default_hostgroup) VALUES ('sbtest', 'Nerv2020.', 1);Admin> LOAD MYSQL USERS TO RUNTIME;Admin> SAVE MYSQL USERS TO DISK;

214 214

Proxy SQLAdmin> INSERT INTO mysql_query_rules (rule_id,active,match_digest,destination_hostgroup,apply)VALUES(1,1,'^SELECT.*FOR UPDATE$',1,1),(2,1,'^SELECT',2,1);Admin> LOAD MYSQL QUERY RULES TO RUNTIME;Admin> SAVE MYSQL QUERY RULES TO DISK;

Admin> INSERT INTO mysql_users (username, password) VALUES ('ricardo','Nerv2020.');Admin> LOAD MYSQL USERS TO RUNTIME;Admin> SAVE MYSQL USERS TO DISK;

mysql> CREATE USER 'ricardo'@'192.168.0.19' IDENTIFIED BY 'Nerv2020.';mysql> GRANT ALL ON *.* TO 'ricardo'@'192.168.0.19';mysql> CREATE USER 'monitor'@'192.168.0.19' IDENTIFIED BY 'Nerv2020.';mysql> GRANT ALL ON *.* TO 'monitor'@'192.168.0.19';mysql> FLUSH PRIVILEGES;

# mysql -u ricardo -pNerv2020. -h 127.0.0.1 -P 6033

215 215

Alta Disponibilidade

MySQL Cluster / NDB Cluster

216 216

Alta Disponibilidade

InnoDB Cluster / Group Replication / Router / Shell / Fabric

217 217

MySQL Group Replication

218 218

MySQL Labs

219 219

Alta Disponibilidade

Galera Cluster

220 220

Alta Disponibilidade

Galera Cluster

221 221

Alta Disponibilidade

Percona XtraDB Cluster

222

Upgrade para 8.0

222

223 223

Upgrade

Supported Upgrade MethodsIn-place Upgrade (mysql_upgrade)Logical Upgrade (mysqldump)

Supported Upgrade Paths●Para Release Series Version superior.Por exemplo, de 5.6.20 para 5.6.27.

●Para um (apenas um) Release Series superior.Por exemplo, de 5.6.27 para 5.7.9 (antes faça upgrade da Release Series Version).

Exemplos:5.6: Release Series5.6.20: Release Series Version

224 224

Upgrade

Changes in MySQL 5.7 / Changes in MySQL 8.0https://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.htmlhttps://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html

Server and Status Variables and Options Added, Deprecated, or Removedhttps://dev.mysql.com/doc/refman/5.7/en/added-deprecated-removed.htmlhttps://dev.mysql.com/doc/refman/8.0/en/added-deprecated-removed.html

Upgrading a Replication Setuphttps://dev.mysql.com/doc/refman/5.7/en/replication-upgrade.htmlhttps://dev.mysql.com/doc/refman/8.0/en/replication-upgrade.html

Índice de alterações:https://dev.mysql.com/doc/relnotes/mysql/5.6/en/ix01.htmlhttps://dev.mysql.com/doc/relnotes/mysql/5.7/en/ix01.htmlhttps://dev.mysql.com/doc/relnotes/mysql/8.0/en/ix01.html

225 225

Upgrade

226 226

Upgrade

227 227

8.0 New Features

http://mysqlserverteam.com/the-mysql-8-0-0-milestone-release-is-available/https://dev.mysql.com/doc/relnotes/mysql/8.0/en/

228 228

Lab 9.1: Upgrade para 8.0

Edite o arquivo /etc/yum.repos.d/mysql-community.repo, e habilite o reposítório do MySQL 8.0....[mysql57-community]name=MySQL 5.7 Community Serverbaseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/enabled=0gpgcheck=1...[mysql80-community]name=MySQL 8.0 Community Serverbaseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/6/$basearch/enabled=1gpgcheck=1...

Execute o Upgrade para MySQL 8.0.# mysql --version# mysqldump --all-databases > backup.sql# ls -lh backup.sql# systemctl stop mysqld# yum -y update mysql-community-*# systemctl start mysqld# mysqlcheck --all-databases --check-upgrade# mysql_upgrade# grep upgrade /var/lib/mysql/mysql-error.log# mysql --version

229

Perguntas?http://nervinformatica.com.br/forum/

Ricardo Portilho Proni ricardo@nervinformatica.com.br Nerv Informática Ltda. 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/.

230 230

Lab Extra 1.1: Banco de Exemplo WORLD# cd# wget http://downloads.mysql.com/docs/world.sql.zip# ls -lh world.sql.zip# yum -y install unzip# unzip world.sql.zip# ls -lh world.sql# mysql < world.sql

mysql> SHOW DATABASES;mysql> use world;mysql> show tables;mysql> select count(*) from city;mysql> select count(*) from country;mysql> select count(*) from countrylanguage;

231 231

Lab Extra 1.2: Banco de Exemplo SAKILA# cd# wget http://downloads.mysql.com/docs/sakila-db.zip# ls -lh sakila-db.zip# unzip sakila-db.zip# ls -lh sakila-db/

# cd sakila-db/# mysql < sakila-schema.sql# mysql < sakila-data.sql

mysql> SHOW DATABASES;mysql> use sakila;mysql> show tables;mysql> select count(*) from actor;mysql> select count(*) from film;mysql> select count(*) from film_actor;

232 232

Lab Extra 1.3: Banco de Exemplo MENAGERIE

# cd# wget http://downloads.mysql.com/docs/menagerie-db.zip# ls -lh menagerie-db.zip# unzip menagerie-db.zip# ls -lh menagerie-db/

# cd menagerie-db/# cat pet.txt# cat event.txt# mysql -tmysql> CREATE DATABASE menagerie;mysql> use menagerie;mysql> SOURCE cr_pet_tbl.sqlmysql> LOAD DATA LOCAL INFILE 'pet.txt' INTO TABLE pet;mysql> SOURCE ins_puff_rec.sqlmysql> SOURCE cr_event_tbl.sqlmysql> LOAD DATA LOCAL INFILE 'event.txt' INTO TABLE event;

mysql> show tables;mysql> select count(*) from pet;mysql> select count(*) from event;

233 233

Lab Extra 1.4: Banco de Exemplo EMPLOYEES# cd# wget https://launchpad.net/test-db/employees-db-1/1.0.6/+download/employees_db-full-1.0.6.tar.bz2# ls -lh employees_db-full-1.0.6.tar.bz2# bunzip2 employees_db-full-1.0.6.tar.bz2# tar xfv employees_db-full-1.0.6.tar# ls -lh employees_db/

# cd employees_db/

# vi employees.sql...-- set storage_engine = InnoDB;...-- select CONCAT('storage engine: ', @@storage_engine) as INFO;...

# mysql -t < employees.sqlmysql> SHOW DATABASES;mysql> use employees;mysql> show tables;mysql> select count(*) from departments;mysql> select count(*) from employees;mysql> select count(*) from salaries;

234 234

Lab Extra 1.5: Banco de Exemplo# mysqlmysql> use employees;mysql> show tables;

# mysql employeesmysql> show tables;

# mysqlmysql> select count(*) from employees.salaries;mysql> select count(*) from menagerie.pet;

mysql> select count(*) from employees.salaries;mysql> select count(*) from EMPLOYEES.SALARIES;mysql> select count(*) from EMPLOYEES.salaries;mysql> select count(*) from employees.SALARIES;mysql> select count(*) from Employees.salaries;mysql> select count(*) from employees.Salaries;

235

Fim

Ricardo Portilho Proni ricardo@nervinformatica.com.br Nerv Informática Ltda. 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/.