mysql - nervnervinformatica.com.br/downloads/materiais/mya-2020.pdfmysql administração backup...
TRANSCRIPT
MySQL Administração Backup & Recovery Tuning Alta Disponibilidade
Inclui Percona e MariaDB
Ricardo Portilho [email protected] 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/* [email protected]:/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/* [email protected]:/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/* [email protected]:/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 [email protected]:/root/# scp /root/Dump/nerv01.sql [email protected]:/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-* [email protected]:/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 [email protected]:/root/# scp /var/lib/mysql/mysql-bin.0* [email protected]:/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/* [email protected]:/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 [email protected] 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 [email protected] 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/.