SlideShare ist ein Scribd-Unternehmen logo
1 von 33
© 2017 Percona1
Marcelo Altmann
ProxySQL para MySQL
Mais que um simples proxy - Exemplos de uso
Senior Support Engineer
MySQL & MongoDB meetup - Sao Paulo
11/05/2017
© 2017 Percona2
Agenda
© 2017 Percona3
Agenda
▪ Sobre Mim
▪ ProxySQL
•Introdução
•Features
▪Load Balance
▪Firewall
▪Query Cache
▪Integrações
▪Outros
© 2017 Percona4
Sobre Mim
© 2017 Percona5
Marcelo Altmann
▪Engenheiro de Suporte @ percona
• MySQL DBA @ IEDR (CCTLD Irlanda)
▪Oracle ACE Associate
▪Certificaçoes
•Oracle Certified Professional, MySQL 5.6 Database Administrator
•Oracle Certified Professional, MySQL 5.6 Developer
•Oracle Certified Professional, MySQL 5 Database Administrator
•Oracle Certified Professional, MySQL 5 Developer
•Oracle Certified Associate, MySQL 5.0/5.1/5.5
▪blog.marceloaltmann.com
© 2017 Percona6
ProxySQL - Introdução
© 2017 Percona7
ProxySQL - Introdução
▪ Criado e mantido por René Cannaò
•MySQL Community - Contribuidor do ano (2017)
▪Open Source
•http://www.proxysql.com/
•https://github.com/sysown/proxysql
© 2017 Percona8
ProxySQL - Introdução
▪ Instalação
•Source Code / rpm / deb / percona repo (yum / apt-get)
▪MySQL admin interface
[root@localhost ~]# mysql -u admin -padmin -P 6032 -h 127.0.0.1 --prompt='Admin> '
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.5.30 (ProxySQL Admin Module)
. . .
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
Admin>
© 2017 Percona9
ProxySQL - Introdução
▪ Camadas
•Runtime - Dados que o proxySQL acessa
•Main/Memory - Camada onde executamos alterações e monitoramento
•Disk - Camada para persistir dados. SQLite3
•Config - Arquivo em disco que é lido caso o banco de dados SQLite3 nao exista.
© 2017 Percona10
ProxySQL - Introdução
▪ Tabelas
•mysql_servers - Contém a lista de servidores.
•mysql_query_rules - Contém a lista de regras para cache, reescrita e
redirecionamento de queries.
•mysql_users - Contém a lista de usuário para autenticação.
•global_variables - Contém a lista de variáveis de configuração.
© 2017 Percona11
ProxySQL - Features
© 2017 Percona12
ProxySQL - Features - Load Balance
▪ Usuários de autenticação
Admin> INSERT INTO mysql_users (username,password) VALUES ('application', 'app');
Query OK, 1 row affected (0.00 sec)
Admin> LOAD MYSQL USERS TO RUNTIME ;
Query OK, 0 rows affected (0.00 sec)
Admin> SAVE MYSQL USERS FROM RUNTIME; -- Hack para o plain-text password
Query OK, 0 rows affected (0.00 sec)
Admin> SAVE MYSQL USERS TO DISK ;
Query OK, 0 rows affected (0.01 sec)
© 2017 Percona13
ProxySQL - Features - Load Balance
▪ Redirecionamento do tráfego para lista de servidores
Admin> INSERT INTO mysql_servers (hostname) VALUES ('192.168.19.71'),('192.168.19.72'),('192.168.19.73');
Query OK, 3 rows affected (0.00 sec)
Admin> LOAD MYSQL SERVERS TO RUNTIME;
Query OK, 0 rows affected (0.01 sec)
Admin> SAVE MYSQL SERVERS TO DISK;
Query OK, 0 rows affected (0.02 sec)
© 2017 Percona14
ProxySQL - Features - Load Balance
▪ Redirecionamento do tráfego para lista de servidores
[root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT @@server_id"
+-------------+
| @@server_id |
+-------------+
| 2 |
+-------------+
[root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT @@server_id"
+-------------+
| @@server_id |
+-------------+
| 3 |
+-------------+
[root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT @@server_id"
+-------------+
| @@server_id |
+-------------+
| 1 |
+-------------+
© 2017 Percona15
ProxySQL - Features - Load Balance
▪ Dividir leituras e escritas
•Host Groups - Agrupamento de servidores
Admin> UPDATE mysql_servers SET hostgroup_id = 1 WHERE hostname <> '192.168.19.71';
Admin> SELECT hostgroup_id, hostname FROM mysql_servers;
+--------------+---------------+
| hostgroup_id | hostname |
+--------------+---------------+
| 0 | 192.168.19.71 |
| 1 | 192.168.19.72 |
| 1 | 192.168.19.73 |
+--------------+---------------+
Admin> LOAD MYSQL SERVERS TO RUNTIME;
Admin> SAVE MYSQL SERVERS TO DISK;
© 2017 Percona16
ProxySQL - Features - Load Balance
▪ Dividir leituras e escritas
Admin> SELECT username, default_hostgroup FROM mysql_users;
+-------------+-------------------+
| username | default_hostgroup |
+-------------+-------------------+
| application | 0 |
+-------------+-------------------+
1 row in set (0.00 sec)
© 2017 Percona17
ProxySQL - Features - Load Balance
▪ Dividir leituras e escritas
Admin> INSERT INTO mysql_query_rules (rule_id,active,match_digest,destination_hostgroup)
-> VALUES
-> (1,1,'^SELECT.*FOR UPDATE$',0),
-> (2,1,'^SELECT',1);
Query OK, 2 rows affected (0.00 sec)
Admin> LOAD MYSQL QUERY RULES TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
Admin> SAVE MYSQL QUERY RULES TO DISK;
Query OK, 0 rows affected (0.01 sec)
© 2017 Percona18
ProxySQL - Features - Load Balance
▪ Dividir leituras e escritas
[root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "INSERT INTO test.t1 VALUES
(@@server_id)"
[root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT @@server_id, server FROM
test.t1"
+-------------+--------+
| @@server_id | server |
+-------------+--------+
| 3 | 1 |
+-------------+--------+
[root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT @@server_id, server FROM
test.t1"
+-------------+--------+
| @@server_id | server |
+-------------+--------+
| 2 | 1 |
+-------------+--------+
© 2017 Percona19
ProxySQL - Features - Stats
▪ SHOW TABLES FROM stats;
•Stats_mysql_commands_counters - Contador baseado em comandos
•Stats_mysql_connection_pool - Conexoes por servidor
•Stats_mysql_global - Estatisticas globais
•Stats_mysql_processlist - SHOW PROCESSLIST
•Stats_mysql_query_digest - Contador agrupado por digest
•Stats_mysql_query_rules - Contador baseado nas query rules
© 2017 Percona20
ProxySQL - Features - Reescrita de query
▪ stats_mysql_query_digest
Admin> SELECT digest, digest_text, sum_time FROM stats_mysql_query_digest ORDER BY sum_time DESC LIMIT 1;
+--------------------+-----------------------------------------+----------+
| digest | digest_text | sum_time |
+--------------------+-----------------------------------------+----------+
| 0xD69E622A5052289E | SELECT * FROM world.city WHERE Name = ? | 7016461 |
+--------------------+-----------------------------------------+----------+
Admin> INSERT INTO mysql_query_rules (rule_id,active,match_pattern, replace_pattern) VALUES (3,1,
'^SELECT * FROM world.city WHERE Name = (.*)$',
'SELECT Population FROM world.city WHERE Name = 1');
Query OK, 1 row affected (0.00 sec)
Admin> LOAD MYSQL QUERY RULES TO RUNTIME;
Query OK, 0 rows affected (0.01 sec)
Admin> SAVE MYSQL QUERY RULES TO DISK;
Query OK, 0 rows affected (0.01 sec)
© 2017 Percona21
ProxySQL - Features - Reescrita de query
[root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT * FROM world.city WHERE Name =
'São Paulo'"
+------------+
| Population |
+------------+
| 9968485 |
+------------+
© 2017 Percona22
ProxySQL - Features - Firewall
▪Bloquear queries - SQL INJECTION!
•Original query: SELECT Name FROM world.city WHERE Name = ‘?’
•SQL Injection: ? = São Paulo' OR ID > 0; --
•SELECT Name FROM world.city WHERE Name = 'São Paulo' OR ID > 0; --'
Admin> SELECT username, digest, digest_text FROM stats_mysql_query_digest WHERE digest_text LIKE '% OR ID %'
ORDER BY first_seen DESC LIMIT 1;
+-------------+--------------------+------------------------------------------------------+
| username | digest | digest_text |
+-------------+--------------------+------------------------------------------------------+
| application | 0xD8AF41BF32707ABD | SELECT Name FROM world.city WHERE Name = ? OR ID > ? |
+-------------+--------------------+------------------------------------------------------+
1 row in set (0.00 sec)
© 2017 Percona23
ProxySQL - Features - Firewall
Admin> INSERT INTO mysql_query_rules (rule_id, active, digest, error_msg, apply) VALUES
(4,1,'0xD8AF41BF32707ABD','Suspeita de SQL Injection',1);
Query OK, 1 row affected (0.00 sec)
Admin> LOAD MYSQL QUERY RULES TO RUNTIME;SAVE MYSQL QUERY RULES TO DISK;
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.01 sec)
[root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT Name FROM
world.city WHERE Name = 'São Paulo' OR ID > 0; --' "
ERROR 1148 (42000) at line 1: Suspeita de SQL Injection
© 2017 Percona24
ProxySQL - Features - Mirror
▪Espelhar queries em outros servidores
•Testar configurações
•Standby Master - Manter buffer pool quente
•Testar workload em versões diferentes - Upgrades
•Troubleshooting
© 2017 Percona25
ProxySQL - Features - Mirror
▪Esquentar buffer pool
Admin> INSERT INTO mysql_servers (hostgroup_id, hostname) VALUES (2, '192.168.29.29');
Admin> LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK;
Admin> SELECT rule_id, match_digest, destination_hostgroup, mirror_hostgroup FROM
mysql_query_rules WHERE rule_id=2;
+---------+--------------+-----------------------+------------------+
| rule_id | match_digest | destination_hostgroup | mirror_hostgroup |
+---------+--------------+-----------------------+------------------+
| 2 | ^SELECT | 1 | NULL |
+---------+--------------+-----------------------+------------------+
Admin> UPDATE mysql_query_rules SET mirror_hostgroup=2 WHERE rule_id=2;
Admin> LOAD MYSQL QUERY RULES TO RUNTIME;
Admin> SAVE MYSQL QUERY RULES TO DISK;
© 2017 Percona26
ProxySQL - Features - Query Cache
▪Cache de queries baseado em TTL
[root@localhost ~]# sysbench --num-threads=16 --max-requests=0 --max-time=60 --test=/usr/share/doc/sysbench/tests/db/oltp.lua --mysql-
user=application --mysql-password=app --mysql-db=test --mysql-host=127.0.0.1 --mysql-port=6033 --oltp-table-size=10000 --oltp-read-only=on
--oltp-skip-trx=on --oltp-point-selects=100 --oltp-simple-ranges=1 --oltp-sum-ranges=1 --oltp-order-ranges=1 --oltp-distinct-ranges=1 run
| grep 'read/write requests'
read/write requests: 105664 (1744.81 per sec.)
Admin> SELECT count_star,sum_time,hostgroup,digest,digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;
+------------+-----------+-----------+--------------------+----------------------------------------------------------------------+
| count_star | sum_time | hostgroup | digest | digest_text |
+------------+-----------+-----------+--------------------+----------------------------------------------------------------------+
| 100200 | 459147213 | 1 | 0xBF001A0C13781C1D | SELECT c FROM sbtest1 WHERE id=? |
| 1002 | 6533622 | 1 | 0xF7D3CD60704822A0 | SELECT DISTINCT c FROM sbtest1 WHERE id BETWEEN ? AND ?+? ORDER BY c |
| 1002 | 6061540 | 1 | 0x877EEAAFADF3DDF2 | SELECT c FROM sbtest1 WHERE id BETWEEN ? AND ?+? ORDER BY c |
| 1002 | 5905677 | 1 | 0xAF7A51977DD56217 | SELECT c FROM sbtest1 WHERE id BETWEEN ? AND ?+? |
| 1002 | 5321376 | 1 | 0x3E268CF3E75DB831 | SELECT SUM(K) FROM sbtest1 WHERE id BETWEEN ? AND ?+? |
+------------+-----------+-----------+--------------------+----------------------------------------------------------------------+
© 2017 Percona27
ProxySQL - Features - Query Cache
Admin> INSERT INTO mysql_query_rules (rule_id,active,digest,cache_ttl,apply) VALUES (5,1, '0xBF001A0C13781C1D' ,2000,1);
Query OK, 1 row affected (0.00 sec)
Admin> LOAD MYSQL QUERY RULES TO RUNTIME;SAVE MYSQL QUERY RULES TO DISK;
[root@localhost ~]# sysbench --num-threads=16 --max-requests=0 --max-time=60 --test=/usr/share/doc/sysbench/tests/db/oltp.lua --mysql-
user=application --mysql-password=app --mysql-db=test --mysql-host=127.0.0.1 --mysql-port=6033 --oltp-table-size=10000 --oltp-read-only=on
--oltp-skip-trx=on --oltp-point-selects=100 --oltp-simple-ranges=1 --oltp-sum-ranges=1 --oltp-order-ranges=1 --oltp-distinct-ranges=1 run
| grep 'read/write requests'
read/write requests: 238680 (3956.42 per sec.)
Admin> SELECT count_star,sum_time,hostgroup,digest,digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC;
+------------+-----------+-----------+--------------------+----------------------------------------------------------------------+
| count_star | sum_time | hostgroup | digest | digest_text |
+------------+-----------+-----------+--------------------+----------------------------------------------------------------------+
| 140512 | 632180517 | 1 | 0xBF001A0C13781C1D | SELECT c FROM sbtest1 WHERE id=? |
| 3372 | 18351846 | 1 | 0xF7D3CD60704822A0 | SELECT DISTINCT c FROM sbtest1 WHERE id BETWEEN ? AND ?+? ORDER BY c |
| 3372 | 17739689 | 1 | 0x877EEAAFADF3DDF2 | SELECT c FROM sbtest1 WHERE id BETWEEN ? AND ?+? ORDER BY c |
| 3372 | 17709660 | 1 | 0xAF7A51977DD56217 | SELECT c FROM sbtest1 WHERE id BETWEEN ? AND ?+? |
| 3372 | 15646777 | 1 | 0x3E268CF3E75DB831 | SELECT SUM(K) FROM sbtest1 WHERE id BETWEEN ? AND ?+? |
| 196688 | 0 | -1 | 0xBF001A0C13781C1D | SELECT c FROM sbtest1 WHERE id=? |
+------------+-----------+-----------+--------------------+----------------------------------------------------------------------+
© 2017 Percona28
ProxySQL - Features - Query Cache
Admin> SHOW VARIABLES LIKE 'mysql-query_cache%';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| mysql-query_cache_size_MB | 256 |
+---------------------------+-------+
1 row in set (0.00 sec)
Admin> SET mysql-query_cache_size_MB=512;
Query OK, 1 row affected (0.00 sec)
Admin> LOAD MYSQL VARIABLES TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
Admin> SAVE MYSQL VARIABLES TO DISK;
Query OK, 72 rows affected (0.03 sec)
© 2017 Percona29
ProxySQL - Features - Query Cache
Admin> SELECT * FROM stats_mysql_global WHERE Variable_Name LIKE 'Query_Cache%';
+--------------------------+----------------+
| Variable_Name | Variable_Value |
+--------------------------+----------------+
| Query_Cache_Memory_bytes | 4469785 | -- Resultset armazenado no QC
| Query_Cache_count_GET | 542750 | -- Número de GET’s executados no QC
| Query_Cache_count_GET_OK | 441122 | -- Número de GET’s que retornaram OK (Query estava em cache e nao estava expirada)
| Query_Cache_count_SET | 101626 | -- Número de Resulset’s inseridos no QC
| Query_Cache_bytes_IN | 19613818 | -- Bytes escritos no QC
| Query_Cache_bytes_OUT | 85136546 | -- Bytes lidos do QC
| Query_Cache_Purged | 100257 | -- Número de queries Purged
| Query_Cache_Entries | 1369 | -- Queries atualmente no QC
+--------------------------+----------------+
© 2017 Percona30
ProxySQL - Features - Integrações
▪MHA (sem alterar DNS ou VIP)
•https://www.percona.com/blog/2016/09/13/proxysql-and-mha-integration/
▪Galera / Percona XtraDB Cluster
•https://www.percona.com/blog/2016/09/15/proxysql-percona-cluster-galera-
integration/
© 2017 Percona31
Estamos Contratando !!!
- Senior Support Engineer - Brazil - Americas
- Inglês fluente
- Manjar de MySQL
percona.com/careers
© 2017 Percona32
Perguntas?
© 2017 Percona33
DATABASE PERFORMANCE
MATTERS
Database Performance MattersDatabase Performance MattersDatabase Performance MattersDatabase Performance MattersDatabase Performance Matters
Obrigado!

Weitere ähnliche Inhalte

Was ist angesagt?

MySQL Performance Schema in 20 Minutes
 MySQL Performance Schema in 20 Minutes MySQL Performance Schema in 20 Minutes
MySQL Performance Schema in 20 Minutes
Sveta Smirnova
 
Download presentation
Download presentationDownload presentation
Download presentation
webhostingguy
 
Performance Tuning Best Practices
Performance Tuning Best PracticesPerformance Tuning Best Practices
Performance Tuning Best Practices
webhostingguy
 
Mysql 57-upcoming-changes
Mysql 57-upcoming-changesMysql 57-upcoming-changes
Mysql 57-upcoming-changes
Morgan Tocker
 

Was ist angesagt? (20)

DB Floripa - ProxySQL para MySQL
DB Floripa - ProxySQL para MySQLDB Floripa - ProxySQL para MySQL
DB Floripa - ProxySQL para MySQL
 
MySQL Replication Overview -- PHPTek 2016
MySQL Replication Overview -- PHPTek 2016MySQL Replication Overview -- PHPTek 2016
MySQL Replication Overview -- PHPTek 2016
 
Percona University - ProxySQL para MySQL
Percona University - ProxySQL para MySQLPercona University - ProxySQL para MySQL
Percona University - ProxySQL para MySQL
 
MySQL Backup and Security Best Practices
MySQL Backup and Security Best PracticesMySQL Backup and Security Best Practices
MySQL Backup and Security Best Practices
 
What is new in PostgreSQL 14?
What is new in PostgreSQL 14?What is new in PostgreSQL 14?
What is new in PostgreSQL 14?
 
MySQL Performance Schema in 20 Minutes
 MySQL Performance Schema in 20 Minutes MySQL Performance Schema in 20 Minutes
MySQL Performance Schema in 20 Minutes
 
Download presentation
Download presentationDownload presentation
Download presentation
 
MySQL Enterprise Backup (MEB)
MySQL Enterprise Backup (MEB)MySQL Enterprise Backup (MEB)
MySQL Enterprise Backup (MEB)
 
Webinar: MariaDB Provides the Solution to Ease Multi-Source Replication
Webinar: MariaDB Provides the Solution to Ease Multi-Source ReplicationWebinar: MariaDB Provides the Solution to Ease Multi-Source Replication
Webinar: MariaDB Provides the Solution to Ease Multi-Source Replication
 
MySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptxMySQL8.0_performance_schema.pptx
MySQL8.0_performance_schema.pptx
 
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
MySQL Performance Tuning. Part 1: MySQL Configuration (includes MySQL 5.7)
 
Perf Tuning Short
Perf Tuning ShortPerf Tuning Short
Perf Tuning Short
 
Intro ProxySQL
Intro ProxySQLIntro ProxySQL
Intro ProxySQL
 
Online MySQL Backups with Percona XtraBackup
Online MySQL Backups with Percona XtraBackupOnline MySQL Backups with Percona XtraBackup
Online MySQL Backups with Percona XtraBackup
 
PostgreSQL9.3 Switchover/Switchback
PostgreSQL9.3 Switchover/SwitchbackPostgreSQL9.3 Switchover/Switchback
PostgreSQL9.3 Switchover/Switchback
 
Performance Tuning Best Practices
Performance Tuning Best PracticesPerformance Tuning Best Practices
Performance Tuning Best Practices
 
PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs PostgreSQL WAL for DBAs
PostgreSQL WAL for DBAs
 
Percona xtra db cluster(pxc) non blocking operations, what you need to know t...
Percona xtra db cluster(pxc) non blocking operations, what you need to know t...Percona xtra db cluster(pxc) non blocking operations, what you need to know t...
Percona xtra db cluster(pxc) non blocking operations, what you need to know t...
 
InnoDB Performance Optimisation
InnoDB Performance OptimisationInnoDB Performance Optimisation
InnoDB Performance Optimisation
 
Mysql 57-upcoming-changes
Mysql 57-upcoming-changesMysql 57-upcoming-changes
Mysql 57-upcoming-changes
 

Ähnlich wie ProxySQL para mysql

MySQL Best Practices - OTN
MySQL Best Practices - OTNMySQL Best Practices - OTN
MySQL Best Practices - OTN
Ronald Bradford
 
Common schema my sql uc 2012
Common schema   my sql uc 2012Common schema   my sql uc 2012
Common schema my sql uc 2012
Roland Bouman
 
Common schema my sql uc 2012
Common schema   my sql uc 2012Common schema   my sql uc 2012
Common schema my sql uc 2012
Roland Bouman
 

Ähnlich wie ProxySQL para mysql (20)

Percona Live 2019 - MySQL Security
Percona Live 2019 - MySQL SecurityPercona Live 2019 - MySQL Security
Percona Live 2019 - MySQL Security
 
NoSQL on MySQL - MySQL Document Store by Vadim Tkachenko
NoSQL on MySQL - MySQL Document Store by Vadim TkachenkoNoSQL on MySQL - MySQL Document Store by Vadim Tkachenko
NoSQL on MySQL - MySQL Document Store by Vadim Tkachenko
 
Guob - MySQL e LGPD
Guob - MySQL e LGPDGuob - MySQL e LGPD
Guob - MySQL e LGPD
 
Curso de MySQL 5.7
Curso de MySQL 5.7Curso de MySQL 5.7
Curso de MySQL 5.7
 
ProxySQL for MySQL
ProxySQL for MySQLProxySQL for MySQL
ProxySQL for MySQL
 
Enhancing MySQL Security
Enhancing MySQL SecurityEnhancing MySQL Security
Enhancing MySQL Security
 
MysQL melhores práticas de seguranca
MysQL  melhores práticas de segurancaMysQL  melhores práticas de seguranca
MysQL melhores práticas de seguranca
 
Instalar MySQL CentOS
Instalar MySQL CentOSInstalar MySQL CentOS
Instalar MySQL CentOS
 
Proxy SQL 2.0 with PXC
Proxy SQL 2.0 with PXCProxy SQL 2.0 with PXC
Proxy SQL 2.0 with PXC
 
Enhancing MySQL Security
Enhancing MySQL SecurityEnhancing MySQL Security
Enhancing MySQL Security
 
제3회난공불락 오픈소스 인프라세미나 - MySQL
제3회난공불락 오픈소스 인프라세미나 - MySQL제3회난공불락 오픈소스 인프라세미나 - MySQL
제3회난공불락 오픈소스 인프라세미나 - MySQL
 
Query Optimization with MySQL 5.7 and MariaDB 10: Even newer tricks
Query Optimization with MySQL 5.7 and MariaDB 10: Even newer tricksQuery Optimization with MySQL 5.7 and MariaDB 10: Even newer tricks
Query Optimization with MySQL 5.7 and MariaDB 10: Even newer tricks
 
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert VanderkelenOSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
 
ProxySQL Cluster - Percona Live 2022
ProxySQL Cluster - Percona Live 2022ProxySQL Cluster - Percona Live 2022
ProxySQL Cluster - Percona Live 2022
 
MySQL sys schema deep dive
MySQL sys schema deep diveMySQL sys schema deep dive
MySQL sys schema deep dive
 
ProxySQL & PXC(Query routing and Failover Test)
ProxySQL & PXC(Query routing and Failover Test)ProxySQL & PXC(Query routing and Failover Test)
ProxySQL & PXC(Query routing and Failover Test)
 
MySQL Best Practices - OTN
MySQL Best Practices - OTNMySQL Best Practices - OTN
MySQL Best Practices - OTN
 
Using Vault to decouple MySQL Secrets
Using Vault to decouple MySQL SecretsUsing Vault to decouple MySQL Secrets
Using Vault to decouple MySQL Secrets
 
Common schema my sql uc 2012
Common schema   my sql uc 2012Common schema   my sql uc 2012
Common schema my sql uc 2012
 
Common schema my sql uc 2012
Common schema   my sql uc 2012Common schema   my sql uc 2012
Common schema my sql uc 2012
 

Mehr von Marcelo Altmann

Mehr von Marcelo Altmann (9)

Backup Online no MySQL com Percona Xtrabackup
Backup Online no MySQL com Percona XtrabackupBackup Online no MySQL com Percona Xtrabackup
Backup Online no MySQL com Percona Xtrabackup
 
Percona XtraBackup - New Features and Improvements
Percona XtraBackup - New Features and ImprovementsPercona XtraBackup - New Features and Improvements
Percona XtraBackup - New Features and Improvements
 
Troubleshooting MySQL from a MySQL Developer Perspective
Troubleshooting MySQL from a MySQL Developer PerspectiveTroubleshooting MySQL from a MySQL Developer Perspective
Troubleshooting MySQL from a MySQL Developer Perspective
 
Backup para MySQL
Backup para MySQLBackup para MySQL
Backup para MySQL
 
GDB e Análise de Bugs
GDB e Análise de BugsGDB e Análise de Bugs
GDB e Análise de Bugs
 
A Percona Support Engineer Walkthrough on pt-stalk
A Percona Support Engineer Walkthrough on pt-stalkA Percona Support Engineer Walkthrough on pt-stalk
A Percona Support Engineer Walkthrough on pt-stalk
 
Optimizando MySQL
Optimizando MySQLOptimizando MySQL
Optimizando MySQL
 
MySQL - Melhores práticas de replicação de dados
MySQL - Melhores práticas de replicação de dadosMySQL - Melhores práticas de replicação de dados
MySQL - Melhores práticas de replicação de dados
 
Percona Live London 2014 - MySQL Backup Strategy @ IEDR
Percona Live London 2014 - MySQL Backup Strategy @ IEDRPercona Live London 2014 - MySQL Backup Strategy @ IEDR
Percona Live London 2014 - MySQL Backup Strategy @ IEDR
 

Kürzlich hochgeladen

在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
ydyuyu
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Monica Sydney
 
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
ayvbos
 
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
ydyuyu
 
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi EscortsRussian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Monica Sydney
 
一比一原版贝德福特大学毕业证学位证书
一比一原版贝德福特大学毕业证学位证书一比一原版贝德福特大学毕业证学位证书
一比一原版贝德福特大学毕业证学位证书
F
 
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu DhabiAbu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Monica Sydney
 
一比一原版犹他大学毕业证如何办理
一比一原版犹他大学毕业证如何办理一比一原版犹他大学毕业证如何办理
一比一原版犹他大学毕业证如何办理
F
 
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
ydyuyu
 

Kürzlich hochgeladen (20)

20240508 QFM014 Elixir Reading List April 2024.pdf
20240508 QFM014 Elixir Reading List April 2024.pdf20240508 QFM014 Elixir Reading List April 2024.pdf
20240508 QFM014 Elixir Reading List April 2024.pdf
 
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency""Boost Your Digital Presence: Partner with a Leading SEO Agency"
"Boost Your Digital Presence: Partner with a Leading SEO Agency"
 
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
 
Local Call Girls in Gomati 9332606886 HOT & SEXY Models beautiful and charmi...
Local Call Girls in Gomati  9332606886 HOT & SEXY Models beautiful and charmi...Local Call Girls in Gomati  9332606886 HOT & SEXY Models beautiful and charmi...
Local Call Girls in Gomati 9332606886 HOT & SEXY Models beautiful and charmi...
 
Mira Road Housewife Call Girls 07506202331, Nalasopara Call Girls
Mira Road Housewife Call Girls 07506202331, Nalasopara Call GirlsMira Road Housewife Call Girls 07506202331, Nalasopara Call Girls
Mira Road Housewife Call Girls 07506202331, Nalasopara Call Girls
 
Vip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac Room
Vip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac RoomVip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac Room
Vip Firozabad Phone 8250092165 Escorts Service At 6k To 30k Along With Ac Room
 
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi EscortsIndian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
Indian Escort in Abu DHabi 0508644382 Abu Dhabi Escorts
 
Ballia Escorts Service Girl ^ 9332606886, WhatsApp Anytime Ballia
Ballia Escorts Service Girl ^ 9332606886, WhatsApp Anytime BalliaBallia Escorts Service Girl ^ 9332606886, WhatsApp Anytime Ballia
Ballia Escorts Service Girl ^ 9332606886, WhatsApp Anytime Ballia
 
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
一比一原版(Flinders毕业证书)弗林德斯大学毕业证原件一模一样
 
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
原版制作美国爱荷华大学毕业证(iowa毕业证书)学位证网上存档可查
 
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrStory Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
Story Board.pptxrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
 
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi EscortsRussian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
Russian Escort Abu Dhabi 0503464457 Abu DHabi Escorts
 
Call girls Service in Ajman 0505086370 Ajman call girls
Call girls Service in Ajman 0505086370 Ajman call girlsCall girls Service in Ajman 0505086370 Ajman call girls
Call girls Service in Ajman 0505086370 Ajman call girls
 
一比一原版贝德福特大学毕业证学位证书
一比一原版贝德福特大学毕业证学位证书一比一原版贝德福特大学毕业证学位证书
一比一原版贝德福特大学毕业证学位证书
 
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu DhabiAbu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
Abu Dhabi Escorts Service 0508644382 Escorts in Abu Dhabi
 
一比一原版犹他大学毕业证如何办理
一比一原版犹他大学毕业证如何办理一比一原版犹他大学毕业证如何办理
一比一原版犹他大学毕业证如何办理
 
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
20240510 QFM016 Irresponsible AI Reading List April 2024.pdf
 
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
2nd Solid Symposium: Solid Pods vs Personal Knowledge Graphs
 
Down bad crying at the gym t shirtsDown bad crying at the gym t shirts
Down bad crying at the gym t shirtsDown bad crying at the gym t shirtsDown bad crying at the gym t shirtsDown bad crying at the gym t shirts
Down bad crying at the gym t shirtsDown bad crying at the gym t shirts
 
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
哪里办理美国迈阿密大学毕业证(本硕)umiami在读证明存档可查
 

ProxySQL para mysql

  • 1. © 2017 Percona1 Marcelo Altmann ProxySQL para MySQL Mais que um simples proxy - Exemplos de uso Senior Support Engineer MySQL & MongoDB meetup - Sao Paulo 11/05/2017
  • 3. © 2017 Percona3 Agenda ▪ Sobre Mim ▪ ProxySQL •Introdução •Features ▪Load Balance ▪Firewall ▪Query Cache ▪Integrações ▪Outros
  • 5. © 2017 Percona5 Marcelo Altmann ▪Engenheiro de Suporte @ percona • MySQL DBA @ IEDR (CCTLD Irlanda) ▪Oracle ACE Associate ▪Certificaçoes •Oracle Certified Professional, MySQL 5.6 Database Administrator •Oracle Certified Professional, MySQL 5.6 Developer •Oracle Certified Professional, MySQL 5 Database Administrator •Oracle Certified Professional, MySQL 5 Developer •Oracle Certified Associate, MySQL 5.0/5.1/5.5 ▪blog.marceloaltmann.com
  • 6. © 2017 Percona6 ProxySQL - Introdução
  • 7. © 2017 Percona7 ProxySQL - Introdução ▪ Criado e mantido por René Cannaò •MySQL Community - Contribuidor do ano (2017) ▪Open Source •http://www.proxysql.com/ •https://github.com/sysown/proxysql
  • 8. © 2017 Percona8 ProxySQL - Introdução ▪ Instalação •Source Code / rpm / deb / percona repo (yum / apt-get) ▪MySQL admin interface [root@localhost ~]# mysql -u admin -padmin -P 6032 -h 127.0.0.1 --prompt='Admin> ' mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 1 Server version: 5.5.30 (ProxySQL Admin Module) . . . Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. Admin>
  • 9. © 2017 Percona9 ProxySQL - Introdução ▪ Camadas •Runtime - Dados que o proxySQL acessa •Main/Memory - Camada onde executamos alterações e monitoramento •Disk - Camada para persistir dados. SQLite3 •Config - Arquivo em disco que é lido caso o banco de dados SQLite3 nao exista.
  • 10. © 2017 Percona10 ProxySQL - Introdução ▪ Tabelas •mysql_servers - Contém a lista de servidores. •mysql_query_rules - Contém a lista de regras para cache, reescrita e redirecionamento de queries. •mysql_users - Contém a lista de usuário para autenticação. •global_variables - Contém a lista de variáveis de configuração.
  • 12. © 2017 Percona12 ProxySQL - Features - Load Balance ▪ Usuários de autenticação Admin> INSERT INTO mysql_users (username,password) VALUES ('application', 'app'); Query OK, 1 row affected (0.00 sec) Admin> LOAD MYSQL USERS TO RUNTIME ; Query OK, 0 rows affected (0.00 sec) Admin> SAVE MYSQL USERS FROM RUNTIME; -- Hack para o plain-text password Query OK, 0 rows affected (0.00 sec) Admin> SAVE MYSQL USERS TO DISK ; Query OK, 0 rows affected (0.01 sec)
  • 13. © 2017 Percona13 ProxySQL - Features - Load Balance ▪ Redirecionamento do tráfego para lista de servidores Admin> INSERT INTO mysql_servers (hostname) VALUES ('192.168.19.71'),('192.168.19.72'),('192.168.19.73'); Query OK, 3 rows affected (0.00 sec) Admin> LOAD MYSQL SERVERS TO RUNTIME; Query OK, 0 rows affected (0.01 sec) Admin> SAVE MYSQL SERVERS TO DISK; Query OK, 0 rows affected (0.02 sec)
  • 14. © 2017 Percona14 ProxySQL - Features - Load Balance ▪ Redirecionamento do tráfego para lista de servidores [root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT @@server_id" +-------------+ | @@server_id | +-------------+ | 2 | +-------------+ [root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT @@server_id" +-------------+ | @@server_id | +-------------+ | 3 | +-------------+ [root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT @@server_id" +-------------+ | @@server_id | +-------------+ | 1 | +-------------+
  • 15. © 2017 Percona15 ProxySQL - Features - Load Balance ▪ Dividir leituras e escritas •Host Groups - Agrupamento de servidores Admin> UPDATE mysql_servers SET hostgroup_id = 1 WHERE hostname <> '192.168.19.71'; Admin> SELECT hostgroup_id, hostname FROM mysql_servers; +--------------+---------------+ | hostgroup_id | hostname | +--------------+---------------+ | 0 | 192.168.19.71 | | 1 | 192.168.19.72 | | 1 | 192.168.19.73 | +--------------+---------------+ Admin> LOAD MYSQL SERVERS TO RUNTIME; Admin> SAVE MYSQL SERVERS TO DISK;
  • 16. © 2017 Percona16 ProxySQL - Features - Load Balance ▪ Dividir leituras e escritas Admin> SELECT username, default_hostgroup FROM mysql_users; +-------------+-------------------+ | username | default_hostgroup | +-------------+-------------------+ | application | 0 | +-------------+-------------------+ 1 row in set (0.00 sec)
  • 17. © 2017 Percona17 ProxySQL - Features - Load Balance ▪ Dividir leituras e escritas Admin> INSERT INTO mysql_query_rules (rule_id,active,match_digest,destination_hostgroup) -> VALUES -> (1,1,'^SELECT.*FOR UPDATE$',0), -> (2,1,'^SELECT',1); Query OK, 2 rows affected (0.00 sec) Admin> LOAD MYSQL QUERY RULES TO RUNTIME; Query OK, 0 rows affected (0.00 sec) Admin> SAVE MYSQL QUERY RULES TO DISK; Query OK, 0 rows affected (0.01 sec)
  • 18. © 2017 Percona18 ProxySQL - Features - Load Balance ▪ Dividir leituras e escritas [root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "INSERT INTO test.t1 VALUES (@@server_id)" [root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT @@server_id, server FROM test.t1" +-------------+--------+ | @@server_id | server | +-------------+--------+ | 3 | 1 | +-------------+--------+ [root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT @@server_id, server FROM test.t1" +-------------+--------+ | @@server_id | server | +-------------+--------+ | 2 | 1 | +-------------+--------+
  • 19. © 2017 Percona19 ProxySQL - Features - Stats ▪ SHOW TABLES FROM stats; •Stats_mysql_commands_counters - Contador baseado em comandos •Stats_mysql_connection_pool - Conexoes por servidor •Stats_mysql_global - Estatisticas globais •Stats_mysql_processlist - SHOW PROCESSLIST •Stats_mysql_query_digest - Contador agrupado por digest •Stats_mysql_query_rules - Contador baseado nas query rules
  • 20. © 2017 Percona20 ProxySQL - Features - Reescrita de query ▪ stats_mysql_query_digest Admin> SELECT digest, digest_text, sum_time FROM stats_mysql_query_digest ORDER BY sum_time DESC LIMIT 1; +--------------------+-----------------------------------------+----------+ | digest | digest_text | sum_time | +--------------------+-----------------------------------------+----------+ | 0xD69E622A5052289E | SELECT * FROM world.city WHERE Name = ? | 7016461 | +--------------------+-----------------------------------------+----------+ Admin> INSERT INTO mysql_query_rules (rule_id,active,match_pattern, replace_pattern) VALUES (3,1, '^SELECT * FROM world.city WHERE Name = (.*)$', 'SELECT Population FROM world.city WHERE Name = 1'); Query OK, 1 row affected (0.00 sec) Admin> LOAD MYSQL QUERY RULES TO RUNTIME; Query OK, 0 rows affected (0.01 sec) Admin> SAVE MYSQL QUERY RULES TO DISK; Query OK, 0 rows affected (0.01 sec)
  • 21. © 2017 Percona21 ProxySQL - Features - Reescrita de query [root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT * FROM world.city WHERE Name = 'São Paulo'" +------------+ | Population | +------------+ | 9968485 | +------------+
  • 22. © 2017 Percona22 ProxySQL - Features - Firewall ▪Bloquear queries - SQL INJECTION! •Original query: SELECT Name FROM world.city WHERE Name = ‘?’ •SQL Injection: ? = São Paulo' OR ID > 0; -- •SELECT Name FROM world.city WHERE Name = 'São Paulo' OR ID > 0; --' Admin> SELECT username, digest, digest_text FROM stats_mysql_query_digest WHERE digest_text LIKE '% OR ID %' ORDER BY first_seen DESC LIMIT 1; +-------------+--------------------+------------------------------------------------------+ | username | digest | digest_text | +-------------+--------------------+------------------------------------------------------+ | application | 0xD8AF41BF32707ABD | SELECT Name FROM world.city WHERE Name = ? OR ID > ? | +-------------+--------------------+------------------------------------------------------+ 1 row in set (0.00 sec)
  • 23. © 2017 Percona23 ProxySQL - Features - Firewall Admin> INSERT INTO mysql_query_rules (rule_id, active, digest, error_msg, apply) VALUES (4,1,'0xD8AF41BF32707ABD','Suspeita de SQL Injection',1); Query OK, 1 row affected (0.00 sec) Admin> LOAD MYSQL QUERY RULES TO RUNTIME;SAVE MYSQL QUERY RULES TO DISK; Query OK, 0 rows affected (0.01 sec) Query OK, 0 rows affected (0.01 sec) [root@localhost ~]# mysql -u application -papp -P 6033 -h 127.0.0.1 -e "SELECT Name FROM world.city WHERE Name = 'São Paulo' OR ID > 0; --' " ERROR 1148 (42000) at line 1: Suspeita de SQL Injection
  • 24. © 2017 Percona24 ProxySQL - Features - Mirror ▪Espelhar queries em outros servidores •Testar configurações •Standby Master - Manter buffer pool quente •Testar workload em versões diferentes - Upgrades •Troubleshooting
  • 25. © 2017 Percona25 ProxySQL - Features - Mirror ▪Esquentar buffer pool Admin> INSERT INTO mysql_servers (hostgroup_id, hostname) VALUES (2, '192.168.29.29'); Admin> LOAD MYSQL SERVERS TO RUNTIME; SAVE MYSQL SERVERS TO DISK; Admin> SELECT rule_id, match_digest, destination_hostgroup, mirror_hostgroup FROM mysql_query_rules WHERE rule_id=2; +---------+--------------+-----------------------+------------------+ | rule_id | match_digest | destination_hostgroup | mirror_hostgroup | +---------+--------------+-----------------------+------------------+ | 2 | ^SELECT | 1 | NULL | +---------+--------------+-----------------------+------------------+ Admin> UPDATE mysql_query_rules SET mirror_hostgroup=2 WHERE rule_id=2; Admin> LOAD MYSQL QUERY RULES TO RUNTIME; Admin> SAVE MYSQL QUERY RULES TO DISK;
  • 26. © 2017 Percona26 ProxySQL - Features - Query Cache ▪Cache de queries baseado em TTL [root@localhost ~]# sysbench --num-threads=16 --max-requests=0 --max-time=60 --test=/usr/share/doc/sysbench/tests/db/oltp.lua --mysql- user=application --mysql-password=app --mysql-db=test --mysql-host=127.0.0.1 --mysql-port=6033 --oltp-table-size=10000 --oltp-read-only=on --oltp-skip-trx=on --oltp-point-selects=100 --oltp-simple-ranges=1 --oltp-sum-ranges=1 --oltp-order-ranges=1 --oltp-distinct-ranges=1 run | grep 'read/write requests' read/write requests: 105664 (1744.81 per sec.) Admin> SELECT count_star,sum_time,hostgroup,digest,digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC; +------------+-----------+-----------+--------------------+----------------------------------------------------------------------+ | count_star | sum_time | hostgroup | digest | digest_text | +------------+-----------+-----------+--------------------+----------------------------------------------------------------------+ | 100200 | 459147213 | 1 | 0xBF001A0C13781C1D | SELECT c FROM sbtest1 WHERE id=? | | 1002 | 6533622 | 1 | 0xF7D3CD60704822A0 | SELECT DISTINCT c FROM sbtest1 WHERE id BETWEEN ? AND ?+? ORDER BY c | | 1002 | 6061540 | 1 | 0x877EEAAFADF3DDF2 | SELECT c FROM sbtest1 WHERE id BETWEEN ? AND ?+? ORDER BY c | | 1002 | 5905677 | 1 | 0xAF7A51977DD56217 | SELECT c FROM sbtest1 WHERE id BETWEEN ? AND ?+? | | 1002 | 5321376 | 1 | 0x3E268CF3E75DB831 | SELECT SUM(K) FROM sbtest1 WHERE id BETWEEN ? AND ?+? | +------------+-----------+-----------+--------------------+----------------------------------------------------------------------+
  • 27. © 2017 Percona27 ProxySQL - Features - Query Cache Admin> INSERT INTO mysql_query_rules (rule_id,active,digest,cache_ttl,apply) VALUES (5,1, '0xBF001A0C13781C1D' ,2000,1); Query OK, 1 row affected (0.00 sec) Admin> LOAD MYSQL QUERY RULES TO RUNTIME;SAVE MYSQL QUERY RULES TO DISK; [root@localhost ~]# sysbench --num-threads=16 --max-requests=0 --max-time=60 --test=/usr/share/doc/sysbench/tests/db/oltp.lua --mysql- user=application --mysql-password=app --mysql-db=test --mysql-host=127.0.0.1 --mysql-port=6033 --oltp-table-size=10000 --oltp-read-only=on --oltp-skip-trx=on --oltp-point-selects=100 --oltp-simple-ranges=1 --oltp-sum-ranges=1 --oltp-order-ranges=1 --oltp-distinct-ranges=1 run | grep 'read/write requests' read/write requests: 238680 (3956.42 per sec.) Admin> SELECT count_star,sum_time,hostgroup,digest,digest_text FROM stats_mysql_query_digest ORDER BY sum_time DESC; +------------+-----------+-----------+--------------------+----------------------------------------------------------------------+ | count_star | sum_time | hostgroup | digest | digest_text | +------------+-----------+-----------+--------------------+----------------------------------------------------------------------+ | 140512 | 632180517 | 1 | 0xBF001A0C13781C1D | SELECT c FROM sbtest1 WHERE id=? | | 3372 | 18351846 | 1 | 0xF7D3CD60704822A0 | SELECT DISTINCT c FROM sbtest1 WHERE id BETWEEN ? AND ?+? ORDER BY c | | 3372 | 17739689 | 1 | 0x877EEAAFADF3DDF2 | SELECT c FROM sbtest1 WHERE id BETWEEN ? AND ?+? ORDER BY c | | 3372 | 17709660 | 1 | 0xAF7A51977DD56217 | SELECT c FROM sbtest1 WHERE id BETWEEN ? AND ?+? | | 3372 | 15646777 | 1 | 0x3E268CF3E75DB831 | SELECT SUM(K) FROM sbtest1 WHERE id BETWEEN ? AND ?+? | | 196688 | 0 | -1 | 0xBF001A0C13781C1D | SELECT c FROM sbtest1 WHERE id=? | +------------+-----------+-----------+--------------------+----------------------------------------------------------------------+
  • 28. © 2017 Percona28 ProxySQL - Features - Query Cache Admin> SHOW VARIABLES LIKE 'mysql-query_cache%'; +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | mysql-query_cache_size_MB | 256 | +---------------------------+-------+ 1 row in set (0.00 sec) Admin> SET mysql-query_cache_size_MB=512; Query OK, 1 row affected (0.00 sec) Admin> LOAD MYSQL VARIABLES TO RUNTIME; Query OK, 0 rows affected (0.00 sec) Admin> SAVE MYSQL VARIABLES TO DISK; Query OK, 72 rows affected (0.03 sec)
  • 29. © 2017 Percona29 ProxySQL - Features - Query Cache Admin> SELECT * FROM stats_mysql_global WHERE Variable_Name LIKE 'Query_Cache%'; +--------------------------+----------------+ | Variable_Name | Variable_Value | +--------------------------+----------------+ | Query_Cache_Memory_bytes | 4469785 | -- Resultset armazenado no QC | Query_Cache_count_GET | 542750 | -- Número de GET’s executados no QC | Query_Cache_count_GET_OK | 441122 | -- Número de GET’s que retornaram OK (Query estava em cache e nao estava expirada) | Query_Cache_count_SET | 101626 | -- Número de Resulset’s inseridos no QC | Query_Cache_bytes_IN | 19613818 | -- Bytes escritos no QC | Query_Cache_bytes_OUT | 85136546 | -- Bytes lidos do QC | Query_Cache_Purged | 100257 | -- Número de queries Purged | Query_Cache_Entries | 1369 | -- Queries atualmente no QC +--------------------------+----------------+
  • 30. © 2017 Percona30 ProxySQL - Features - Integrações ▪MHA (sem alterar DNS ou VIP) •https://www.percona.com/blog/2016/09/13/proxysql-and-mha-integration/ ▪Galera / Percona XtraDB Cluster •https://www.percona.com/blog/2016/09/15/proxysql-percona-cluster-galera- integration/
  • 31. © 2017 Percona31 Estamos Contratando !!! - Senior Support Engineer - Brazil - Americas - Inglês fluente - Manjar de MySQL percona.com/careers
  • 33. © 2017 Percona33 DATABASE PERFORMANCE MATTERS Database Performance MattersDatabase Performance MattersDatabase Performance MattersDatabase Performance MattersDatabase Performance Matters Obrigado!