View
304
Download
7
Category
Preview:
Citation preview
MySQL- Administração- Backup & Recovery- Tuning- Alta Disponibilidade
Inclui Percona e MariaDB
Ricardo Portllo Proniricardo@nervinformatcaacomabr
Esta obra está licenciada sob a licençaCreatve Commons Atribuição-)emDerivados oa0 BrasilaPara ver uma cópia desta licença, visite ltp://creatvecommonsaorg/licenses/by-nd/oa0/br/a
22
Produtos utiizados no Treinamento● Oracle Enterprise Linux 6● Oracle VirtualBox 5a2● My)QL 5a7● Percona )erver 5a7● MariaDB 10a2
33
Comandos no Treinamento
Comando com o usuário root:# mysql -u root -pNerv2017
Comando no MySQL:mysql> show databases;
Adicionar texto a um arquivo:# vi /etc/my.cnf...log-bin=mysql-bin...
Todas as senhas são Nerv2017.
4
Mercado de Trabaiho MySQL
4
55
Por que MySQL?
66
DBA MySQLDBA MySQL e ...● Desenvolvedor● Administrador de Dados● Administrador de )istema Operacional● Analista de )istema● DBA de outro banco
77
CertfcaçõesOracie Certfed Professionai, MySQL 5.6 Database AdministratorExame: My)QL 5a6 Database Administrator (1Z0-88o)● My)QL Arclitecture● My)QL )erver Installaton, Confguraton and Maintenance● My)QL )ecurity● Diagnostc Data and Metadata )ources in My)QL● Optmizing My)QL Performance● Backups and Recovery in My)QL● Higl Availability Teclniques for My)QL
Oracie Certfed Professionai, MySQL 5.6 DeveioperExame: My)QL 5a6 Developer (1Z0-882)● My)QL Arclitecture● General My)QL )yntax● Creaton and Design of My)QL )clema Objects● Creaton, Design and Use of My)QL )tored Programs● Querying for Data● Modifying Data● Joins, subqueries and UNION● My)QL Applicaton Development● Basic Optmizatons
88
Livros
My)QL 5a0 Certfcaton )tudy GuideHigl Performance My)QL (O'Reilly)
99
Documentação
ltps://devamysqlacom/doc/refman/5a5/en/indexaltmlltps://devamysqlacom/doc/refman/5a6/en/indexaltmlltps://devamysqlacom/doc/refman/5a7/en/indexaltmlltps://devamysqlacom/doc/refman/8a0/en/
10
Produtos MySQL
10
11
História do MySQL
12
História do MySQL
1313
Produtos Community
1414
Produtos Enterprise
1515
Produtos Enterprise
16
Instaiação
16
1717
Instaiação – Repositório Padrão
[root@Melquior ~]# yum -y install mysql-server...[root@Melquior ~]# rpm -qa | grep mysqlmysql-5.1.73-7.el6_6.i686mysql-server-5.1.73-7.el6_6.i686mysql-libs-5.1.73-7.el6_6.i686[root@Melquior ~]#
1818
Instaiação – Versão Específca
1919
Instaiação – Repositórios MySQL
2020
Lab 1.1: Instaiação MySQLInstaie o MySQL.# yum -y install wget# yum -y install https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm# yum -y install mysql-server# chkconfig mysqld on# ls -lh /var/lib/mysql# service mysqld start# ls -lh /var/lib/mysql
Verifque o Log do MySQL, e aitere a senha do usuário root.# cat /var/log/mysqld.log# grep password /var/log/mysqld.log# /usr/bin/mysqladmin -u root -p password 'Nerv2017...'
Acesse o MySQL, e verifque o acesso.# mysql -u root -pmysql> exit;
Libere a porta do MySQL no Firewaii.# iptables -I INPUT -p tcp -m tcp --dport 3306 -j ACCEPT# service iptables save
2121
Lab 1.2: Status MySQL
Verifque as formas de conexão com o MySQL.# mysql -u root -pmysql> status;
# mysqladmin -u root -pNerv2017... status
# tail /var/log/mysqld.log
2222
Lab 1.3: Ciient MySQL
Verifque as formas de conexão com o MySQL.# mysql -u root -pmysql> SHOW STATUS;mysql> EXIT;
# mysql -u root -pNerv2017...mysql> SHOW STATUS;mysql> EXIT;
mysql> prompt \U-\d-\R:\m:\s>
# vi .my.cnf[client]password=Nerv2017...prompt='\U-\d-\R:\m:\\s>'...
# mysql
2323
Lab 1.4: Ciient MySQL
Verifque as formas de execução de comandos no MySQL.# mysqlmysql> show databases;
# mysql -e 'show databases’# mysql -B -e 'show databases’# mysql -t -e 'show databases’# mysql -E -e 'show databases’# mysql -X -e 'show databases’
# mysql -e 'show databases’ > status.txt# cat status.txt
# mysql -t -e 'show databases’ > status.txt# cat status.txt
# echo 'show databases' > script.sql# mysql -t < script.sql# mysql -t < script.sql > status.txt# cat status.txt
mysql> source script.sql
2424
Lab 1.5: Ciient MySQL
Verifque 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> edit
mysql> tee audit.logmysql> show databases;mysql> notee# cat audit.log
mysql> system ls -lh
2525
Lab 1.6: Banco de Exempio 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;
2626
Lab 1.7: Banco de Exempio 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;
2727
Lab 1.8: Banco de Exempio 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;
2828
Lab 1.9: Banco de Exempio 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;
2929
Lab 1.10: Banco de Exempio
# 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;
3030
Engines● MyI)AM● InnoDB● Memory● Arclive● C)V● Merge● Federated● NDB● Blacklole● Example● Aria● Percona XtraDB● Percona XtraDB Cluster● Percona TokuDB
3131
Engines
3232
Engines
3333
Engines MySQL 5.7
3434
Engines MariaDB 10.2
3535
Engines Percona Server 5.7
3636
MySQL x Percona Server x MariaDB
3737
Percona Server
3838
Percona Server
3939
Percona Server
4040
Percona Server
4141
Lab 2.1: Percona Server
Instaie o Oracie VM VirtuaiBox.# yum -y install SDL kernel-uek-devel kernel-uek-headers# yum -y install http://download.virtualbox.org/virtualbox/5.2.0/VirtualBox-5.2-5.2.0_118431_el6-1.x86_64.rpm
4242
Lab 2.2: Percona Server
No Oracie VM VirtuaiBox, ciique em “Fiie”, e em “Import Appiiance”.
4343
Lab 2.3: Percona Server
Aitere o Nome para “Percona”, e seiecione “Reiniciaiize o endereço MAC de todas as piacas de rede”.
4444
Lab 2.4: Percona ServerInicie a VM.
Verifque o endereço IP da VM.# service network restart# ifconfig eth0
4545
Lab 2.5: Percona Server
Instaie o Percona Server.# yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm# yum -y install Percona-Server-server-57# chkconfig mysql on# service mysql startgrep password /var/log/mysqld.log# mysqladmin -u root -p password 'Nerv2017...'# mysql -u root -pNerv2017...mysql> show databases;mysql> show engines;
Execute um Backup Lógico do MySQL.# mysqldump --all-databases > backup.sql
Copie e importe o Backup Lógico no Percona.# mysql -u root -pNerv2017... < backup.sql# mysql -u root -pNerv2017...mysql> show databases;mysql> select count(*) from employees.salaries;
4646
MariaDB
4747
MariaDB
4848
MariaDB - Produtos Enterprise
4949
Lab 3.1: MariaDB
No Oracie VM VirtuaiBox, ciique em “Fiie”, e em “Import Appiiance”.
5050
Lab 3.2: MariaDB
Aitere o Nome para “MariaDB”, e seiecione “Reiniciaiize o endereço MAC de todas as piacas de rede”.
5151
Lab 3.3: MariaDBInicie a VM.
Verifque o endereço IP da VM.# service network restart# ifconfig eth0
5252
Lab 3.4: MariaDB
Instaie o MariaDB.# ifconfig# vi /etc/yum.repos.d/MariaDB.repo...# MariaDB 10.2 CentOS repository list - created 2017-11-03 13:48 UTC# http://downloads.mariadb.org/mariadb/repositories/[mariadb]name = MariaDBbaseurl = http://yum.mariadb.org/10.2/centos6-x86gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDBgpgcheck=1...
# yum -y install MariaDB-server# chkconfig mysql on# service mysql start# mysqladmin -u root password 'Nerv2017'mysql> show engines;
Copie e importe o Backup Lógico no MariaDB.# mysql -u root -pNerv2017 < backup.sql# mysql -u root -pNerv2017mysql> show databases;mysql> select count(*) from employees.salaries;
53
Administração
53
5454
Lab 4.1: Estruturas Físicas e Lógicas
Crie um novo banco de dados.# mysqlmysql> show databases;mysql> create database nerv;mysql> show databases;mysql> use nerv;mysql> show tables;
5555
Lab 4.2: Estruturas Físicas e LógicasVerifque as estruturas fsicas dos MySQL.# ls -lh /var/lib/mysql/...drwxr-x---. 2 mysql mysql 4.0K Oct 22 10:38 employees-rw-r-----. 1 mysql mysql 16K Oct 22 11:17 ib_buffer_pool-rw-r-----. 1 mysql mysql 76M Oct 22 11:18 ibdata1-rw-r-----. 1 mysql mysql 48M Oct 22 11:18 ib_logfile0-rw-r-----. 1 mysql mysql 48M Oct 22 11:18 ib_logfile1-rw-r-----. 1 mysql mysql 12M Oct 22 11:27 ibtmp1drwxr-x---. 2 mysql mysql 4.0K Oct 22 10:33 menageriedrwxr-x---. 2 mysql mysql 4.0K Oct 21 17:16 mysqldrwxr-x---. 2 mysql mysql 4.0K Oct 22 12:35 nervdrwxr-x---. 2 mysql mysql 4.0K Oct 21 17:16 performance_schemadrwxr-x---. 2 mysql mysql 4.0K Oct 22 10:31 sakiladrwxr-x---. 2 mysql mysql 12K Oct 21 17:16 sysdrwxr-x---. 2 mysql mysql 4.0K Oct 22 10:26 world...
# 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
5656
Lab 4.3: Dicionário de Dados
Verifque o conteúdo das tabeias do banco mysqi.# mysqlmysql> use mysql;mysql> show tables;mysql> select * from db;mysql> select * from user;
5757
Lab 4.4: Dicionário de Dados
Verifque o conteúdo das tabeias do banco informaton_schema.# mysqlmysql> use information_schema;mysql> show tables;mysql> select * from TABLES;mysql> select * from USER_PRIVILEGES;
ltp://devamysqlacom/doc/refman/5a7/en/informaton-sclemaaltml
5858
Lab 4.5: Dicionário de Dados
Verifque o conteúdo das tabeias do banco performance_schema.# mysqlmysql> use performance_schema;mysql> show tables;mysql> select * from threads;mysql> select * from users;
ltp://devamysqlacom/doc/refman/5a7/en/performance-sclemaaltmlltp://devamysqlacom/doc/refman/5a7/en/performance-sclema-table-indexaltmlltps://devamysqlacom/doc/refman/5a7/en/sys-sclemaaltml
5959
Lab 4.6: Variabies, Status, Thread States
Verifque as Variabies, 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;
Variabiesltp://devamysqlacom/doc/refman/5a7/en/server-system-variablesaltmlltps://devamysqlacom/doc/refman/5a7/en/innodb-parametersaltml
Status Variabiesltp://devamysqlacom/doc/refman/5a7/en/server-status-variablesaltml
Thread Statesltp://devamysqlacom/doc/refman/5a7/en/general-tlread-statesaltml
6060
Lab 4.7: VariabiesAitere uma Variabie, com SET e com SET GLOBAL.# mysqlmysql> SHOW VARIABLES LIKE '%sort%';mysql> SET sort_buffer_size=524288;mysql> SHOW VARIABLES LIKE '%sort%';mysql> SET @@local.sort_buffer_size=524288;mysql> select @@local.sort_buffer_size;mysql> exit;# mysqlmysql> SHOW VARIABLES LIKE '%sort%';
# mysqlmysql> SHOW VARIABLES LIKE '%sort%';mysql> SET GLOBAL sort_buffer_size=524288;mysql> SHOW VARIABLES LIKE '%sort%';mysql> SET @@global.sort_buffer_size=524288;mysql> select @@local.sort_buffer_size;mysql> select @@global.sort_buffer_size;mysql> exit;# mysqlmysql> SHOW VARIABLES LIKE '%sort%';
mysql> set global tmpdir='/var/lib/mysql/';
6161
Lab 4.8: Variabies
6262
Lab 4.9: Variabies
Aitere uma Variabie peio arquivo de parâmetros.# mysqlmysql> SHOW VARIABLES LIKE '%sort%';mysql> exit;
# vi /etc/my.cnf...[mysqld]sort_buffer_size = 2M...
# service mysqld stop# service mysqld start
# mysqlmysql> SHOW VARIABLES LIKE '%sort%';
6363
Lab 4.10: Usuários e PermissõesCrie um usuário para conexão remota.mysql> CREATE USER 'portilho'@'localhost' IDENTIFIED BY 'Nerv2017...';mysql> CREATE USER 'portilho'@'192.168.0.102' IDENTIFIED BY 'Nerv2017...';mysql> CREATE USER 'portilho'@'%.localdomain' IDENTIFIED BY 'Nerv2017...';mysql> CREATE USER 'portilho'@'%' IDENTIFIED BY 'Nerv2017...';mysql> DROP USER 'portilho'@'%';mysql> GRANT SELECT ON world.city TO 'portilho'@'192.168.0.102';mysql> GRANT SELECT ON nerv.* TO 'portilho'@'192.168.0.102';mysql> GRANT ALL PRIVILEGES ON *.* TO 'portilho'@'localhost';mysql> REVOKE ALL PRIVILEGES ON *.* FROM 'portilho'@'localhost';mysql> SET PASSWORD FOR 'portilho'@'192.168.0.102' = PASSWORD('Nerv2016');mysql> show warnings;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 portilho -pNerv2017 -h 192.168.0.108
Priviiégiosltps://devamysqlacom/doc/refman/5a7/en/privileges-providedaltml
6464
Lab 4.11: Importação e Exportação
Exporte as tabeias do banco empioyees para texto.mysql> use employees;mysql> SELECT * FROM departments INTO OUTFILE '/tmp/departments.txt';O que aconteceu?
mysql> SELECT * FROM dept_emp INTO OUTFILE '/tmp/dept_emp.txt';mysql> SELECT * FROM dept_manager INTO OUTFILE '/tmp/dept_manager.txt';mysql> SELECT * FROM employees INTO OUTFILE '/tmp/employees.txt';mysql> SELECT * FROM salaries INTO OUTFILE '/tmp/salaries.txt';mysql> SELECT * FROM titles INTO OUTFILE '/tmp/titles.txt';
6565
Lab 4.12: Importação e Exportação
Importe os arquivos texto para as tabeias do banco empioyees.mysql> SET foreign_key_checks = 0;mysql> truncate table departments;mysql> truncate table dept_emp;mysql> truncate table dept_manager;mysql> truncate table employees;mysql> truncate table salaries;mysql> truncate table titles;mysql> LOAD DATA INFILE '/tmp/departments.txt' INTO TABLE departments;mysql> LOAD DATA INFILE '/tmp/dept_emp.txt' INTO TABLE dept_emp;mysql> LOAD DATA INFILE '/tmp/dept_manager.txt' INTO TABLE dept_manager;mysql> LOAD DATA INFILE '/tmp/employees.txt' INTO TABLE employees;mysql> LOAD DATA INFILE '/tmp/salaries.txt' INTO TABLE salaries;mysql> LOAD DATA INFILE '/tmp/titles.txt' INTO TABLE titles;mysql> SET foreign_key_checks = 1;
Outras opções:FIELDS TERMINATED BY ','ENCLOSED BY '"'LINES TERMINATED BY '\n';
6666
Lab 4.13: MySQL Workbench
Instaie o MySQL Workbench.# yum -y install mysql-workbench-community
6767
Lab 4.14: MySQL Workbench
6868
Lab 4.15: MySQL Workbench
6969
Lab 4.16: MySQL Workbench
7070
Lab 4.17: MySQL Workbench
7171
Lab 4.18: MySQL Workbench
7272
Lab 4.19: MySQL Workbench
7373
Lab 4.20: MySQL Workbench
7474
Lab 4.21: MySQL Workbench
7575
Lab 4.22: MySQL Workbench
7676
Lab 4.23: MySQL Workbench
7777
Lab 4.24: MySQL Workbench
7878
Lab 4.25: MySQL Workbench
7979
Lab 4.26: MySQL Workbench
8080
Lab 4.27: MySQL Workbench
8181
MySQL Variabies: Conexões
Aitere estas Variabies peio arquivo de parâmetros.max_connections = 1000max_user_connections = 0thread_cache_size = 200 # default = 8 + (max_connections / 100)back_log = 100 # default = max_connections / 5slow_launch_time = 2 # Slow_launch_threadsconnect_timeout = 10max_connect_errors = 10 # FLUSH HOSTShost_cache_size = -1 # default = 128 + ((max_connections – 500) / 20)skip_name_resolve = OFF
net_read_timeout = 30net_write_timeout = 60net_retry_count = 10 # FLUSH HOSTS
net_buffer_length = 16384max_allowed_packet = 4194304
wait_timeout = 28800interactive_timeout = 28800lock_wait_timeout = 31536000
8282
MySQL Logs
8383
MySQL Variabies: Logs
Aitere estas Variabies peio arquivo de parâmetros.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 = 60log_slow_admin_statements = ONlog_queries_not_using_indexes = ONlog_throttle_queries_not_using_indexes = 0min_examined_row_limit = 100
84
Backup & Recovery
84
8585
Engines● MyI)AM● InnoDB● Memory (MyI)AM-like)● Arclive (MyI)AM-like)● C)V● Merge (MyI)AM-like)● Federated● NDB (MyI)AM-like)● Blacklole● Example● Aria● Percona XtraDB (InnoDB-like)● Percona XtraDB Cluster● Percona TokuDB
8686
Lab 5.1: Backup & Recovery
No Oracie VM VirtuaiBox, ciique em “Fiie”, e em “Import Appiiance”.
8787
Lab 5.2: Backup & Recovery
Aitere o Nome para “Recovery”, e seiecione “Reiniciaiize o endereço MAC de todas as piacas de rede”.
8888
Lab 5.3: Backup & RecoveryInicie a VM.
Verifque o endereço IP da VM.# service network restart# ifconfig eth0
Instaie na VM Recovery o mesmo MySQL da máquina reai.
8989
Lab 5.4: Coid Backup
Execute um Coid Backup.# service mysqld stop# mkdir /root/ColdBackup# cp -rfvp /var/lib/mysql/ /root/ColdBackup/# service mysqld start
Na máquina de Restore, pare o MySQL.# service mysqld stop
Na máquina originai, copie o Backup.# scp -Cr /root/ColdBackup/mysql/* 192.168.56.102:/var/lib/mysql/
Na máquina de Restore, inicie o MySQL.# chown -R mysql:mysql /var/lib/mysql# setenforce 0# service mysqld start
9090
Lab 5.5: Warm Backup MyISAM
Dupiique as tabeias do banco empioyees 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;
Aitere as tabeias para o Engine MyISAM, e as coioque em LOCK.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;
9191
Lab 5.6: Warm Backup MyISAM
Coioque as tabeias MyISAM em LOCK.mysql> FLUSH TABLE departments, dept_emp, dept_manager, employees, salaries,titles WITH READ LOCK;mysql> show open tables from nerv;
Em outra sessão, execute a cópia peio sistema operacionai.# mkdir /root/WarmBackup# cp -rfp /var/lib/mysql/nerv /root/WarmBackup
Na sessão originai, desbioquei as tabeias.mysql> UNLOCK TABLEs;
Na máquina originai, copie o Backup para a máquina de Restore.# scp -Cr /root/WarmBackup/nerv/* 192.168.56.102:/var/lib/mysql/nerv/
Na máquina de Restore, corrija as permissões.# chown -R mysql:mysql /var/lib/mysql/nerv
9292
Lab 5.7: mysqidump
Execute um backup via mysqidump.# mkdir /root/Dump# mysqldump nerv > /root/Dump/nerv.sql# mysqldump --all_databases > /root/Dump/nerv01.sql
Edite o arquivo gerado.O que eie contém?Como utiizar este backup?Quais suas desvantagens?
O que faz a opção –-singie-transacton?O que faz a opção –-master-data?
9393
Lab 5.8: Bin Logs
Adicione no /etc/my.cnf as iinhas abaixo, e reinicie o mysqi.sync_binlog=1log-bin=mysql-binexpire_logs_days=28
O que aconteceu no diretório de dados?
Execute uma carga de dados, e verifque o conteúdo dos Bin Logs.# mysqlbinlog /var/lib/mysql/mysql-bin.000001 > Recover.sql# mysqlbinlog --start-datetime="2005-12-25 11:25:56" binlog.000003# mysqlbinlog --start-position=128530757 binlog.000003 > Recover03.sql
9494
Lab 5.9: Instaiação Servidor Restore
Recupere o Backup Lógico no Servidor Restore, e apiique os Bin Logs.Produção:# mysqldump nerv > /root/Dump/nerv.sqlmysql> PURGE BINARY LOGS BEFORE '2017-10-31 08:40:00';mysql> use nerv;mysql> select count(*) from salaries;mysql> insert into salaries select * from salaries;mysql> select count(*) from salaries;
Servidor de Restore:# mysql nerv < /root/Dump/nerv.sql
Produção:# mysqlbinlog /var/lib/mysql/mysql-bin.000002 > mysql-bin.000002.sql
Servidor de Restore:# mysql nerv < mysql-bin.000002.sql
9595
mysqibackup
9696
Lab 5.10: mysqibackup
Instaie o MySQL Enterprise Backup, e execute um backup.# yum install /root/meb-4.1.0-rhel5.i386.rpm# mkdir /root/MEB/# /opt/mysql/meb-4.1/bin/mysqlbackup --port=3306 --socket=/var/lib/mysql/mysql.sock --user=root –-password=Nerv2017... --backup-dir=/root/MEB/ --datadir=/var/lib/mysql/ --innodb_data_file_path=/var/lib/mysql/ backup-and-apply-log# /opt/mysql/meb-4.1/bin/mysqlbackup --port=3306 --socket=/var/lib/mysql/mysql.sock --user=root --password=Nerv2017... --backup-dir /root/MEB/ --datadir=/var/lib/mysql/ --innodb_data_file_path=/var/lib/mysql/ validate
Execute um Restore.# service mysqld stop# rm -rf /var/lib/mysql/*# /opt/mysql/meb-4.1/bin/mysqlbackup --backup-dir=/root/MEB/ --datadir=/var/lib/mysql/ copy-back# chown -R mysql:mysql /var/lib/mysql/# service mysqld start
9797
Lab 5.11: mysqibackup
Execute um backup IMAGE, e vaiide-o.# mkdir /root/MEB-Image/# /opt/mysql/meb-4.1/bin/mysqlbackup --port=3306 --socket=/var/lib/mysql/mysql.sock --user=root --password=Nerv2017... --backup-dir=/root/MEB-Image/ --backup-image=/root/MEB-Image/backup.mbi --datadir=/var/lib/mysql/ --innodb_data_file_path=/var/lib/mysql/ backup-to-image
# /opt/mysql/meb-4.1/bin/mysqlbackup --port=3306 --socket=/var/lib/mysql/mysql.sock --user=root --password=Nerv2017 --backup-image=/root/MEB-Image/backup.mbi --datadir=/var/lib/mysql/ --innodb_data_file_path=/var/lib/mysql/ validate
9898
Lab 5.12: mysqibackup
Execute um backup comprimido.# mkdir /root/MEB-Compress/# /opt/mysql/meb-4.1/bin/mysqlbackup --port=3306 --socket=/var/lib/mysql/mysql.sock --user=root --password=Nerv2017... --backup-dir=/root/MEB-Compress/ --datadir=/var/lib/mysql/ --innodb_data_file_path=/var/lib/mysql/ --compress --compress-level=9 backup
Execute um backup IMAGE comprimido.# mkdir /root/MEB-Compress-Image/# /opt/mysql/meb-4.1/bin/mysqlbackup --port=3306 --socket=/var/lib/mysql/mysql.sock --user=root --password=Nerv2017... --backup-dir /root/MEB-Compress-Image/ --backup-image=/root/MEB-Compress-Image/backup.mbi --datadir=/var/lib/mysql/ --innodb_data_file_path=/var/lib/mysql/ --compress --compress-level=9 backup-to-image
9999
Lab 5.13: mysqibackup
Execute um backup parciai.# mkdir /root/MEB-Image-Partial/# /opt/mysql/meb-4.1/bin/mysqlbackup --port=3306 --socket=/var/lib/mysql/mysql.sock --user=root --password=Nerv2017... --backup-dir /root/MEB-Image-Partial/ --backup-image=/root/MEB-Image-Partial/backup.mbi --datadir=/var/lib/mysql/ --innodb_data_file_path=/var/lib/ --include-tables='^(employess|nerv)\.' backup-to-image
100100
Lab 5.14: mysqibackup
Execute backups incrementais.# mkdir /root/MEB-Incremental-Segunda# /opt/mysql/meb-4.1/bin/mysqlbackup --port=3306 --socket=/var/lib/mysql/mysql.sock --user=root --password=Nerv2017... --backup-dir /root/MEB-Incremental-Segunda/ --backup-image=/root/MEB-Incremental-Segunda/backup.mbi --datadir=/var/lib/mysql/ --innodb_data_file_path=/var/lib/mysql/ --incremental --incremental-base=history:last_backup backup-to-image
# mkdir /root/MEB-Incremental-Terca# /opt/mysql/meb-4.1/bin/mysqlbackup --port=3306 --socket=/var/lib/mysql/mysql.sock --user=root --password=Nerv2017... --backup-dir /root/MEB-Incremental-Terca/ --backup-image=/root/MEB-Incremental-Terca/backup.mbi --datadir=/var/lib/mysql/ --innodb_data_file_path=/var/lib/mysql/ --incremental --incremental-base=history:last_backup backup-to-image
101
Tuning
101
102102
Lab 6.1: Diretório de Dados
Aitere a iocaiização do diretório de dados do MySQL.# vi /etc/selinux/config...SELINUX=disabled...
# reboot
# service mysqld stop# mkdir /mysql# chown -R mysql:mysql /mysql
# vi /etc/my.cnf...datadir=/mysql...
# cp -R -p -v /var/lib/mysql/* /mysql/# service mysqld start
103103
Lab 6.2: System Tabiespace InnoDB
Aitere a iocaiização do diretório de dados do MySQL.# service mysqld stop# mkdir /InnoDB01# mv /mysql/ibdata1 /InnoDB01/# chown -R mysql:mysql /InnoDB01/
# vi /etc/my.cnf...innodb_file_per_table=OFFinnodb_data_home_dir=innodb_data_file_path=/InnoDB01/ibdata1:10M:autoextend:max:10G...
# service mysqld start
104104
Engines● MyI)AM● InnoDB● Memory● Arclive● C)V● Merge● Federated● NDB● Blacklole● Example● MariaDB● Percona XtraDB● Percona XtraDB Cluster● Percona TokuDB
105105
InnoDB
106106
MyISAM
107107
Memory
108108
Archive
109109
Merge
110110
Federated
111111
Federated - Connecton
112112
Federated - Server
113113
Instância x Banco de Dados
114114
Lab 6.3: Benchmark - mysqisiap
Execute um teste de carga no MySQL.# yum -y install mysql-community-test# mysqlslap --user=root –-password=Nerv2017... --auto-generate-sql --concurrency=10 --iterations=10 --number-char-cols=10 --number-int-cols=5 --engine=innodb
Durante a execução do teste, acompanhe no Linux, via top.
Durante a execução do teste, acompanhe no MySQL, via mysqiadmin.# mysqladmin status
Durante a execução do teste, acompanhe no MySQL, via PROCESSLIST.mysql> SHOW PROCESSLIST;mysql> SHOW FULL PROCESSLIST;
Execute novamente o teste, com os Engines MyISAM e Memory.
115115
Lab 6.5: Parâmetros de TuningAitere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.### 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)
ltps://devamysqlacom/doc/refman/5a6/en/server-system-variablesaltmlltps://devamysqlacom/doc/refman/5a6/en/innodb-parametersaltml
116116
Lab 6.6: Parâmetros de TuningAitere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.### Metadataopen_files_limit = 10000table_open_cache_instances = 1table_open_cache = 400 # (Opened_tables)table_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 = 2Mread_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
117117
Lab 6.7: Parâmetros de TuningAitere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.### MyISAMkey_cache_block_size = 4096key_buffer_size = 128Mkey_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)
Exempio:prod.key_buffer_size = 128Mdev.key_buffer_size = 16Mmysql> CACHE INDEX t1, t2, t3 IN prod;
118118
Lab 6.8: Parâmetros de TuningAitere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.### InnoDB Filesinnodb_checksums = ON # innodb_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
119119
Lab 6.9: Parâmetros de TuningAitere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.### InnoDB Bufferinnodb_page_size = 16384innodb_buffer_pool_size = 128Minnodb_buffer_pool_instances = 1innodb_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)
120120
Lab 6.10: Parâmetros de TuningAitere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.### InnoDB Flushinnodb_use_native_aio = ON # Linuxinnodb_flush_method = O_DIRECT_NO_FSYNC # (ext4 / xfs)innodb_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
121121
Lab 6.11: Parâmetros de TuningAitere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.### 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
122122
Lab 6.12: Parâmetros de Tuning
123123
Lab 6.13: Parâmetros de Tuning
Aitere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.### 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
124124
Lab 6.14: 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;
125125
Lab 6.15: Transações e Isoiamento1a 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;
126126
Lab 6.16: Transações e Isoiamento1a 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;
127127
Lab 6.17: Comandos AdministratvosExecute estas operações no banco empioyees e nerv:mysql> ANALYZE TABLE salaries;
mysql> OPTIMIZE TABLE salaries;
mysql> REPAIR TABLE salaries;
# mysqlcheck -u root -pNerv2017... nerv# mysqlcheck -repair -u root -pNerv2017... nerv# mysqlcheck -o -u root -pNerv2017... nerv# mysqlcheck -a -u root -pNerv2017... nerv
# mysqlcheck -u root -pNerv2017... employees# mysqlcheck -repair -u root -pNerv2017... employees# mysqlcheck -o -u root -pNerv2017... employees# mysqlcheck -a -u root -pNerv2017... employees
128
Repiicação
128
129129
Aita Disponibiiidade
DRBD / Pacemaker / Corosync
130130
Aita Disponibiiidade
Windows Server Faiiover Ciustering
131131
Aita Disponibiiidade
MySQL Repiicaton
132132
Lab 7.1: MySQL RepiicatonCrie outro Cione da VM “Linux”, com o nome de “MySQL Siave 01”.
Adicione a iinha abaixo no arquivo de confguração, e reinicie o MySQL.server-id=1
Execute a confguração da Repiicação no Master.mysql> CREATE USER 'rep'@'192.168.56.102' IDENTIFIED BY 'Nerv2017...';mysql> GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.56.102';mysql> FLUSH TABLES WITH READ LOCK;mysql> SHOW MASTER STATUS;Backup no Mastermysql> UNLOCK TABLES;Restore no Slave
Execute a confguração da Repiicação no Siave.mysql> CHANGE MASTER TO
MASTER_HOST='192.168.56.101',MASTER_USER='rep',MASTER_PASSWORD='Nerv2017...',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=435;
mysql> START SLAVE;mysql> SHOW SLAVE STATUS;
133133
MySQL Proxy
134134
Aita Disponibiiidade
MySQL Ciuster
135135
Aita Disponibiiidade
Router / Fabric
136136
Aita Disponibiiidade
Gaiera Ciuster
137137
Aita Disponibiiidade
ProxySQL
138138
Aita Disponibiiidade
Percona XtraDB Ciuster
139139
Lab 8.1: Instaiação MySQL ProxyCrie outro Cione da VM “Linux”, com o nome de “MySQL Proxy”.
Instaie e inicie o MySQL Proxy# yum -y install wget# wget https://dev.mysql.com/get/Downloads/MySQL-Proxy/mysql-proxy-0.8.5-linux-el6-x86-32bit.tar.gz# tar xfzv mysql-proxy-0.8.5-linux-el6-x86-32bit.tar.gz
# vi /etc/mysql_proxy.cnf...[mysql-proxy]port=4040proxy-lua-script=/root/mysql-proxy-0.8.5-linux-el6-x86-32bit/share/doc/mysql-proxy/rw-splitting.luaproxy-backend-addresses = 192.168.0.101:3306proxy-read-only-backend-addresses = 192.168.0.102:3306...
# chmod 0660 /etc/mysql_proxy.cnf# cd /root/mysql-proxy-0.8.5-linux-el6-x86-32bit/bin# ./mysql-proxy --defaults-file=/etc/mysql_proxy.cnf
# mysql -u usuario -pNerv2017 -h IPdoProxy -P 4040
140
Upgrade para 8.0
140
141141
Upgrade
Supported Upgrade MethodsIn-place Upgrade (mysql_upgrade)Logical Upgrade (mysqldump)
Supported Upgrade Paths● Para Release )eries Version superioraPor exemplo, de 5a6a20 para 5a6a27a
● Para um (apenas um) Release )eries superioraPor exemplo, de 5a6a27 para 5a7a9 (antes faça upgrade da Release )eries Version)a
Exemplos:5.6: Release Series5.6.20: Release Series Version
142142
Upgrade
Changes Afectng Upgrades to MySQL ltp://devamysqlacom/doc/refman/5a7/en/upgrading-from-previous-seriesaltmlltps://devamysqlacom/doc/refman/8a0/en/upgrading-from-previous-seriesaltml
Server and Status Variabies and Optons Added, Deprecated, or Removedltp://devamysqlacom/doc/refman/5a7/en/added-removed-variables-optonsaltmlltps://devamysqlacom/doc/refman/8a0/en/added-removed-variables-optonsaltml
Upgrading a Repiicaton Setupltp://devamysqlacom/doc/refman/5a7/en/replicaton-upgradealtmlltps://devamysqlacom/doc/refman/8a0/en/replicaton-upgradealtml
Índice de aiterações:ltps://devamysqlacom/doc/relnotes/mysql/5a6/en/ix01altmlltps://devamysqlacom/doc/relnotes/mysql/5a7/en/ix01altmlltps://devamysqlacom/doc/relnotes/mysql/8a0/en/ix01altml
143143
Upgrade
144144
Upgrade
145145
Lab 9.1: Upgrade para 8.0
Execute o Upgrade para MySQL 8.0.# vi /etc/yum.repos.d/mysql-community.repo...[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...
# mysql --version# mysqldump --all-databases > backup.sql# ls -lh backup.sql # service mysqld stop# yum -y update# service mysqld start# mysql_upgrade# mysql --version
146
Perguntas?
Ricardo Portllo Proniricardo@informatcaacomabrNerv Informátca
Recommended