mysql - nervinformatica.com.brnervinformatica.com.br/downloads/materiais/mya-2019.pdf · 2 2...
Post on 07-Aug-2020
24 Views
Preview:
TRANSCRIPT
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/.
22
Produtos utilizados no Treinamento● Oracle Enterprise Linux 7.7● MySQL 5.7.28 e 8.0.13● Percona Server 5.7.28● MariaDB 10.4.10● Oracle VirtualBox 6.0.14
33
Comandos no Treinamento
Comando com o usuário root:# mysql -u root -pNerv2019.
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 Nerv2019.
4
Mercado de Trabalho MySQL
4
55
Por que MySQL?
https://db-engines.com/en/ranking
66
DBA MySQLDBA MySQL e ...● Desenvolvedor● Administrador de Dados● Administrador de Sistema Operacional● DevOPS● Analista de Sistema● DBA de outro banco
77
Certificações
https://education.oracle.com/database/mysql/pFamily_406
88
Livros● MySQL 5.0 Certification Study Guide● High Performance MySQL
99
MySQL Blogs
1010
MySQL Blogs
1111
MySQL Blogs
1212
MySQL Blogs
1313
Fóruns
1414
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/
1515
MySQL Internals Manual
https://dev.mysql.com/doc/internals/en/
16
Produtos MySQL
16
17
História do MySQL
18
História do MySQL
1919
Open Source
2020
Open Source
2121
Open Source
2222
Produtos Community
2323
Produtos Enterprise
https://www.mysql.com/products/
2424
Produtos Enterprise
https://www.mysql.com/products/
2525
mysqlbackup
https://www.mysql.com/products/enterprise/backup.html
2626
Thread Pool
https://www.mysql.com/products/enterprise/scalability.html
2727
MySQL Enterprise Monitor
https://www.mysql.com/products/enterprise/monitor.html
2828
MySQL Enterprise Monitor - MySQL Query Analyzer
https://www.mysql.com/products/enterprise/monitor.html
2929
MySQL Enterprise Monitor - Database File IO
https://www.mysql.com/products/enterprise/monitor.html
3030
MySQL Enterprise Monitor - MySQL Replication Topology View
https://www.mysql.com/products/enterprise/monitor.html
3131
MySQL Enterprise Monitor - MySQL Cluster Topology View
https://www.mysql.com/products/enterprise/monitor.html
3232
MySQL Enterprise Monitor - MySQL Replication Multi-Source
https://www.mysql.com/products/enterprise/monitor.html
3333
MySQL Enterprise Monitor - MySQL Replication Status
https://www.mysql.com/products/enterprise/monitor.html
3434
MySQL Enterprise Monitor - MySQL Enterprise Backup Dashboard
https://www.mysql.com/products/enterprise/monitor.html
35
Instalação
35
3636
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 ~]#
3737
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
3838
Instalação – Versão Específica
3939
Instalação – Repositórios MySQL
https://dev.mysql.com/downloads/
4040
Lab 1.1: Instalação MySQLEdite o arquivo /etc/yum.repos.d/public-yum-ol7.repo, 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
4141
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 'Nerv2019.'
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
4242
Lab 1.3: Status MySQL
Verifique as formas de conexão com o MySQL.# mysql -u root -pmysql> STATUS;mysql> EXIT;
# mysqladmin -u root -pNerv2019. status
# tail /var/log/mysqld.log
# grep -B1 “ready for connections” /var/log/mysqld.log
4343
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 -pNerv2019.mysql> SHOW DATABASES;mysql> EXIT;
# mysql -uroot -pNerv2019.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=Nerv2019.prompt='\U-\d-\R:\m:\\s>'
# mysql
4444
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;
4545
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
4646
Engines
https://en.wikipedia.org/wiki/Comparison_of_MySQL_database_engines
4747
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;
4848
Engines MySQL x Percona x MariaDB
4949
Releases MySQL x Percona x MariaDB
https://www.percona.com/blog/2017/11/02/mysql-vs-mariadb-reality-check/
5050
MySQL x Percona Server
https://db-engines.com/en/ranking
5151
Percona Server
5252
Percona Server
5353
Percona Server
5454
Percona Server
https://www.percona.com/software/mysql-database/percona-server/benchmarks
5555
Percona Server
5656
Percona Server
https://www.percona.com/software/mysql-database/percona-server/feature-comparison
5757
Percona Server
https://www.percona.com/software/mysql-database/percona-server/feature-comparison
5858
Percona Server
https://www.percona.com/software/mysql-database/percona-server/feature-comparison
5959
Percona Server
https://www.percona.com/software/mysql-database/percona-server/feature-comparison
6060
Lab 2.1: Percona Server
Instale o Oracle VM VirtualBox.# yum -y install SDL kernel-uek-devel# wget https://download.virtualbox.org/virtualbox/6.0.14/VirtualBox-6.0-6.0.14_133895_el7-1.x86_64.rpm# yum -y install VirtualBox-6.0-6.0.14_133895_el7-1.x86_64.rpm
6161
Lab 2.2: Percona Server
No Oracle VM VirtualBox, clique em “File”, e em “Import Appliance”, e importe o arquivo /root/Linux.ova.
6262
Lab 2.3: Percona Server
6363
Lab 2.4: Percona Server
6464
Lab 2.5: Percona Server
6565
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://www.percona.com/redir/downloads/percona-release/redhat/1.0-13/percona-release-1.0-13.noarch.rpm# yum -y install percona-release-1.0-13.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 'Nerv2019.'# mysql -u root -pNerv2019.mysql> SHOW DATABASES;mysql> SHOW ENGINES;
Importe os bancos de dados de exemplo.# mysql -u root -pNerv2019. -e “SHOW DATABASES”# mysql -u root -pNerv2019. < MYA.sql# mysql -u root -pNerv2019. -e “SHOW DATABASES”
6666
MariaDB
https://en.wikipedia.org/wiki/MariaDB
6767
MariaDB
https://mariadb.com/kb/en/library/mariadb-vs-mysql-features/
6868
MariaDB
https://mariadb.com/kb/en/library/mariadb-vs-mysql-features/
6969
MariaDB
https://mariadb.com/kb/en/library/mariadb-vs-mysql-features/
7070
MariaDB
https://mariadb.com/kb/en/library/optimizer-feature-comparison-matrix/
7171
MariaDB
https://mariadb.com/kb/en/library/optimizer-feature-comparison-matrix/
7272
MariaDB
https://mariadb.com/kb/en/library/mariadb-vs-mysql-compatibility/
7373
MariaDB
https://mariadb.org/performance-evaluation-of-mariadb-10-1-and-mysql-5-7-4-labs-tplc/
7474
MariaDB
7575
MariaDB - Services
https://mariadb.com/services/
7676
MariaDB - Subscription
https://mariadb.com/pricing/
7777
MariaDB - Subscription
https://mariadb.com/pricing/
7878
MariaDB x mariadb.org x mariadb.com
https://mariadb.org/about/https://mariadb.org/about/#sponsorshttps://mariadb.org/about/#board
7979
MariaDB x mariadb.org x mariadb.com
https://mariadb.com/trademarks/
8080
Business Source License (BSL)
https://mariadb.com/bsl-faq-mariadb/
8181
Business Source License (BSL)
https://mariadb.com/projects-using-bsl-11/
8282
MariaDB - Parceiros
https://mariadb.com/kb/en/library/sql-diagnostic-manager-sqlyog/
8383
Lab 3.1: MariaDBNo Oracle VM VirtualBox, crie uma nova VM, com o nome “MariaDB”, importanto novamente o arquivo /root/Linux.ova.
8484
Lab 3.2: MariaDB
https://downloads.mariadb.org/mariadb/repositories
8585
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.4/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
8787
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;
8888
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/
8989
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;
9090
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
9191
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
9292
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
9393
Variables
9494
Variables
9595
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/';
9696
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?
9797
Lab 4.9: Usuários e PermissõesCrie um usuário para conexão remota.mysql> CREATE USER 'ricardo'@'localhost' IDENTIFIED BY 'Nerv2019.';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 'Nerv2019.';mysql> CREATE USER 'ricardo'@'%.localdomain' IDENTIFIED BY 'Nerv2019.';mysql> CREATE USER 'ricardo'@'%' IDENTIFIED BY 'Nerv2019.';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 'Nerv2019.';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' = 'Nerv2019.';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 -pNerv2019. -h 192.168.0.103mysql> SHOW DATABASES;
9898
Usuários e PermissõesPrivilégioshttps://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html
9999
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';
100100
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;
101101
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;
102102
Lab 4.13: MySQL Workbench
Instale o MySQL Workbench.# yum -y install mysql-workbench-community# mysql-workbench
103103
Lab 4.14: MySQL Workbench
104104
Lab 4.15: MySQL Workbench
105105
Lab 4.16: MySQL Workbench
106106
Lab 4.17: MySQL Workbench
107107
Lab 4.18: MySQL Workbench
108108
Lab 4.19: MySQL Workbench
109109
Lab 4.20: MySQL Workbench
110110
Lab 4.21: MySQL Workbench
111111
Lab 4.22: MySQL Workbench
112112
Lab 4.23: MySQL Workbench
113113
Lab 4.24: MySQL Workbench
114114
Lab 4.25: MySQL Workbench
115115
Lab 4.26: MySQL Workbench
116116
Lab 4.27: MySQL Workbench
117117
Lab 4.28: MySQL Workbench
118118
Lab 4.29: MySQL Workbench
119119
Lab 4.30: MySQL Workbench
120120
Lab 4.31: MySQL Workbench
121121
Lab 4.32: MySQL Workbench
122122
Lab 4.33: MySQL Workbench
123123
Lab 4.34: MySQL Workbench
124124
Lab 4.35: MySQL Workbench
125125
Lab 4.36: MySQL Workbench
126126
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
127127
MySQL Logs
128128
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 = 3600min_examined_row_limit = 1000log_slow_admin_statements = ONlog_queries_not_using_indexes = ONlog_throttle_queries_not_using_indexes = 10
129129
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);
130130
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
132132
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
133133
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 'Nerv2019.'# firewall-cmd --zone=public --add-port=3306/tcp --permanent# firewall-cmd --reload# firewall-cmd --zone=public --permanent --list-ports
134134
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 -pNerv2019.mysql> SHOW DATABASES;mysql> SELECT COUNT(*) FROM employees.salaries;
135135
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;
136136
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;
137137
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
138138
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 -pNerv2019. nerv < /root/nerv.sqlmysql> SELECT COUNT(*) FROM nerv.salaries;# mysql -u root -pNerv2019. < /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
139139
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 --routines --triggers --events --compress –threads=8# mydumper --routines --triggers --events --compress --threads=8 --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=Nerv2019. --directory=/root/export-20191203-203701/ --overwrite-tables --threads=8# myloader --user=root -–password=Nerv2019. --directory=/root/eexport-20191203-203826/ --overwrite-tables –-threads=8
140140
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> 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/
141141
Lab 5.9: Bin LogsNa VM de Restore, restaure o Dump, e os Bin Logs.# mysql -u root -pNerv2019. < /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 -pNerv2019. < Recover.sql
mysql> SELECT COUNT(*) FROM nerv.salaries;mysql> SELECT COUNT(*) FROM nerv.salaries_test;
142142
XtraBackup
143143
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/
144144
XtraBackup
https://www.percona.com/doc/percona-xtrabackup/8.0/intro.html
145145
XtraBackup
https://www.percona.com/doc/percona-xtrabackup/8.0/intro.html
146146
XtraBackup
https://www.percona.com/doc/percona-xtrabackup/8.0/intro.html
147147
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://www.percona.com/redir/downloads/percona-release/redhat/1.0-13/percona-release-1.0-13.noarch.rpm# yum -y install percona-release-1.0-13.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-$HORADOBACKUP/# xtrabackup --prepare --target-dir=/root/XtraBackup-$HORADOBACKUP/# ls -lh /root/XtraBackup-$HORADOBACKUP/# cat /root/XtraBackup-$HORADOBACKUP/xtrabackup_binlog_info
Restaure o backup.# systemctl stop mysqld# rm -rf /var/lib/mysql/*# xtrabackup --copy-back --target-dir=/root/XtraBackup-$HORADOBACKUP/# chown -R mysql:mysql /var/lib/mysql# systemctl start mysqld
148148
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;
149149
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/
150150
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;
151151
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=Nerv2019. --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 --parallel=4 /root/XtraBackup/compress/# ls -lh /root/XtraBackup/compress/nerv/# rm -rf /root/XtraBackup/compress/*.qp /root/XtraBackup/compress/*/*.qp# 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;
152152
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);
153153
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
155155
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
156156
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
157157
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/
158158
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/
159159
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
160160
Engines: InnoDB
161161
Engines: MyISAM
162162
Engines: Memory
163163
Engines: Archive
164164
Lab 6.6: myisampack Crie 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*
165165
Lab 6.7: Benchmark - mysqlslap
Execute um teste de carga no MySQL.# yum -y install mysql-community-test# mysqlslap --user=root –-password=Nerv2019. --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?
166166
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 'Nerv2019.';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=Nerv2019. --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=Nerv2019. --mysql-port=3306 --tables=10 --table-size=1000000 --report-interval=1 run
Durante a execução do teste, acompanhe no MySQL, via PROCESSLIST.
167167
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=Nerv2019. --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=Nerv2019. --mysql-port=3306 run
Durante a execução do teste, acompanhe no MySQL, via PROCESSLIST.
168168
Lab 6.10: mytop
Instale o mytop.# yum -y install mytop# mytop -d mysql
Execute novamente os testes de carga, e acompanhe pelo mytop.
169169
Lab 6.11: innotop
Instale o innotop.# yum -y install innotop# innotop
Execute novamente os testes de carga com InnoDB, e acompanhe pelo innotop.
170170
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"
171171
Engines: CSV
172172
Engines: Merge
173173
Engines: Federated
174174
Engines: Federated - Connection
175175
Engines: Federated - Server
176176
Engines: Blackhole
177177
Engines: Example
178178
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
179179
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 = 8388608 join_buffer_size = 2M # (index scans, range index scans, joins FTS)max_join_size = 4Grange_alloc_block_size = 4096
180180
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;
181181
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
182182
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)
183183
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
184184
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
185185
Parâmetros de Tuning - Optimizer
186186
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
187187
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;
188188
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> SELECT THREAD_ID FROM performance_schema.threads WHERE PROCESSLIST_ID = 3;
189189
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;
190190
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 -pNerv2019. nerv# mysqlcheck -a -u root -pNerv2019. nerv# mysqlcheck -o -u root -pNerv2019. nerv# mysqlcheck -repair -u root -pNerv2019. nerv
# mysqlcheck -u root -pNerv2019. employees# mysqlcheck -a -u root -pNerv2019. employees# mysqlcheck -o -u root -pNerv2019. employees# mysqlcheck -repair -u root -pNerv2019. employees
191191
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
192192
Lab 6.26: EXPLAIN
mysql> use sakila;mysql> EXPLAIN SELECT actor.first_name, actor.last_name, film.titleFROM actor, film, film_actor WHERE actor.first_name = 'ADAM' AND actor.actor_id = film_actor.actor_id AND film_actor.film_id AND film.film_id = film_actor.film_id;
193193
Lab 6.27: SHOW PROFILE
194194
Partitioning
195195
Partitioning - RANGE
196196
Partitioning - RANGE
197197
Partitioning - LIST
198198
Partitioning - RANGE COLUMNS
199199
Partitioning - LIST COLUMNS
200200
Partitioning - HASH
201201
Partitioning - KEY
202202
memcached
https://dev.mysql.com/doc/refman/5.7/en/innodb-memcached-intro.html
203203
memcached
204
Alta Disponibilidade
204
205205
Alta Disponibilidade
DRBD / Pacemaker / Corosync
206206
Alta Disponibilidade
Windows Server Failover Clustering
207207
Alta Disponibilidade
MySQL Replication
208208
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 'Nerv2019.';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 TO
MASTER_HOST='192.168.0.101',MASTER_USER='rep',MASTER_PASSWORD='Nerv2019.',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
209209
GTID
210210
MySQL Parallel ReplicationAltere os parâmetros abaixo:slave_parallel_type = LOGICAL_CLOCKslave_parallel_workers = 20
211211
MySQL Proxy
212212
Alta Disponibilidade
ProxySQL
https://www.proxysql.com/compare
213213
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='Nerv2019.' 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', 'Nerv2019.', 1);Admin> LOAD MYSQL USERS TO RUNTIME;Admin> SAVE MYSQL USERS TO DISK;
214214
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','Nerv2019.');Admin> LOAD MYSQL USERS TO RUNTIME;Admin> SAVE MYSQL USERS TO DISK;
mysql> CREATE USER 'ricardo'@'192.168.0.19' IDENTIFIED BY 'Nerv2019.';mysql> GRANT ALL ON *.* TO 'ricardo'@'192.168.0.19';mysql> CREATE USER 'monitor'@'192.168.0.19' IDENTIFIED BY 'Nerv2019.';mysql> GRANT ALL ON *.* TO 'monitor'@'192.168.0.19';mysql> FLUSH PRIVILEGES;
# mysql -u ricardo -pNerv2019. -h 127.0.0.1 -P 6033
215215
Alta Disponibilidade
MySQL Cluster / NDB Cluster
216216
Alta Disponibilidade
InnoDB Cluster / Group Replication / Router / Shell / Fabric
217217
MySQL Group Replication
218218
MySQL Labs
219219
Alta Disponibilidade
Galera Cluster
220220
Alta Disponibilidade
Galera Cluster
221221
Alta Disponibilidade
Percona XtraDB Cluster
222
Upgrade para 8.0
222
223223
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
224224
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
225225
Upgrade
226226
Upgrade
227227
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/
228228
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/.
230230
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;
231231
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;
232232
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;
233233
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;
234234
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/.
top related