ProxySQL é um proxy de alto desempenho, alta disponibilidade e reconhecimento de protocolo para MySQL e forks (como Percona Server e MariaDB). Ao mesmo tempo, obtém a liberdade ilimitada que vem com uma licença GPL.
Seu desenvolvimento é impulsionado pela falta de proxies de código aberto que proporcionem alto desempenho.
Os pacotes lançados podem ser encontrados aqui: https://github.com/sysown/proxysql/releases
Basta baixar um pacote e usar o gerenciador de pacotes do sistema para instalá-lo:
wget https://github.com/sysown/proxysql/releases/download/v2.4.2/proxysql_2.4.2-ubuntu20_amd64.deb
dpkg -i proxysql_2.4.2-ubuntu20_amd64.deb
Alternativamente, você também pode usar os repositórios disponíveis:
Adicionando repositório:
apt-get update && apt-get install -y --no-install-recommends lsb-release wget apt-transport-https ca-certificates
wget -nv -O /etc/apt/trusted.gpg.d/proxysql-2.4.x-keyring.gpg ' https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/repo_pub_key.gpg '
echo " deb https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/ $( lsb_release -sc ) / ./ " | tee /etc/apt/sources.list.d/proxysql.list
Instalando:
apt-get update
apt-get install proxysql OR apt-get install proxysql=version
Adicionando repositório:
cat > /etc/yum.repos.d/proxysql.repo << EOF
[proxysql]
name=ProxySQL YUM repository
baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/centos/ $ releasever
gpgcheck=1
gpgkey=https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/repo_pub_key
EOF
Instalando:
yum install proxysql OR yum install proxysql-version
Adicionando repositório:
cat > /etc/yum.repos.d/proxysql.repo << EOF
[proxysql]
name=ProxySQL YUM repository
baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/centos/8
gpgcheck=1
gpgkey=https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/repo_pub_key
EOF
Instalando:
yum install proxysql OR yum install proxysql-version
Adicionando repositório:
cat > /etc/yum.repos.d/proxysql.repo << EOF
[proxysql]
name=ProxySQL YUM repository
baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/almalinux/ $ releasever
gpgcheck=1
gpgkey=https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/repo_pub_key
EOF
Instalando:
yum install proxysql OR yum install proxysql-version
Adicionando repositório:
cat > /etc/zypp/repos.d/proxysql.repo << EOF
[proxysql]
name=ProxySQL Zypper repository
enabled=1
autorefresh=0
baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/opensuse/ $ releasever_major
gpgcheck=1
EOF
ou
zypper addrepo -g -n ' ProxySQL Zypper repository ' ' https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/opensuse/$releasever_major ' proxysql
Instalando:
yum install proxysql OR yum install proxysql-version
Instalando (via pacote):
pkg install proxysql
Instalando (via portas):
cd /usr/ports/databases/proxysql/ && make install clean
Depois que o software estiver instalado, você poderá usar o comando service
para controlar o processo:
service proxysql start
service proxysql stop
Ou alternativamente através da interface Admin:
$ mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '
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 4
Server version: 5.5.30 (ProxySQL Admin Module)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
Admin> proxysql stop
service proxysql restart
Ou alternativamente através da interface Admin:
$ mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '
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 4
Server version: 5.5.30 (ProxySQL Admin Module)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
Admin> proxysql restart
# If you are using the init script run:
/etc/init.d/proxysql initial
# or
service proxysql initial
# If you are using the systemd unit file run:
systemctl start proxysql-initial
# or
service proxysql-initial start
Basta instalar o novo pacote e reiniciar o ProxySQL:
wget https://github.com/sysown/proxysql/releases/download/v2.1.0/proxysql_2.1.0-ubuntu16_amd64.deb
dpkg -i proxysql_2.1.0-ubuntu16_amd64.deb
service proxysql restart
$ proxysql --version
ProxySQL version 2.1.0-544-g17a4b4a7, codename Truls
Uma versão de depuração possui _DEBUG
em sua string de versão. É mais lento que a versão sem depuração, mas mais fácil de depurar em caso de falhas.
$ proxysql --version
Main init phase0 completed in 0.000146 secs.
ProxySQL version 2.1.0-544-g17a4b4a7_DEBUG, codename Truls
admin interface
Em primeiro lugar, lembre-se que a melhor forma de configurar o ProxySQL é através de sua interface administrativa. Isso se presta à configuração on-line (sem a necessidade de reiniciar o proxy) por meio de consultas SQL ao banco de dados administrativo. É uma forma eficaz de configurá-lo manualmente e de forma automatizada.
Como forma secundária de configurá-lo, temos o arquivo de configuração.
Para fazer login na interface administrativa (com as credenciais padrão), use um cliente mysql e conecte-se usando as seguintes credenciais admin
localmente na porta (6032):
$ mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt= ' Admin> '
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 4
Server version: 5.5.30 (ProxySQL Admin Module)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ' help; ' or ' h ' for help. Type ' c ' to clear the current input statement.
Admin >
nota: Se a versão do seu cliente MySQL for a versão 8.04 ou superior, adicione --default-auth=mysql_native_password
ao comando acima para conectar-se à interface administrativa.
Uma vez conectado à interface administrativa, você terá à sua disposição uma lista de bancos de dados e tabelas que podem ser consultados usando a linguagem SQL:
Admin > SHOW DATABASES;
+ -- ---+---------+-------------------------------+
| seq | name | file |
+ -- ---+---------+-------------------------------+
| 0 | main | |
| 2 | disk | / var / lib / proxysql / proxysql . db |
| 3 | stats | |
| 4 | monitor | |
+ -- ---+---------+-------------------------------+
4 rows in set ( 0 . 00 sec)
Isso permitirá que você controle a lista de servidores back-end, como o tráfego é roteado para eles e outras configurações importantes (como cache, controle de acesso, etc.). Depois de fazer modificações na estrutura de dados na memória, você deverá carregar a nova configuração no tempo de execução ou persistir as novas configurações no disco (para que elas ainda estejam lá após a reinicialização do proxy). Um tutorial detalhado sobre como configurar o ProxySQL por meio da interface Admin está disponível aqui.
Mesmo que o arquivo de configuração deva ser considerado apenas como uma forma secundária de configurar o proxy, não devemos descartar seu valor como uma forma válida de inicializar uma nova instalação do ProxySQL.
Vamos examinar rapidamente as seções principais do arquivo de configuração (esta visão geral serve como uma visão geral de alto nível da configuração do ProxySQL).
Seções de nível superior:
admin_variables
: contém variáveis globais que controlam a funcionalidade da interface administrativa.
mysql_variables
: contém variáveis globais que controlam a funcionalidade para lidar com o tráfego de entrada do MySQL.
mysql_servers
: contém linhas para a tabela mysql_servers
da interface administrativa. Basicamente, estes definem os servidores backend para os quais o tráfego de entrada do MySQL é roteado. As linhas são codificadas de acordo com o formato de arquivo .cfg
. Aqui está um exemplo:
mysql_servers =
(
{
address= " 127.0.0.1 "
port=3306
hostgroup=0
max_connections=200
}
)
mysql_users
: contém linhas para a tabela mysql_users
da interface administrativa. Basicamente, estes definem os usuários que podem se conectar ao proxy e os usuários com os quais o proxy pode se conectar aos servidores backend. As linhas são codificadas de acordo com o formato de arquivo .cfg
. Aqui está um exemplo:
mysql_users:
(
{
username = " root "
password = " root "
default_hostgroup = 0
max_connections=1000
default_schema= " information_schema "
active = 1
}
)
mysql_query_rules
: contém linhas para a tabela mysql_query_rules
da interface administrativa. Basicamente, estes definem as regras usadas para classificar e rotear o tráfego de entrada do MySQL, de acordo com vários critérios (padrões correspondidos, usuário usado para executar a consulta, etc.). As linhas são codificadas conforme o formato de arquivo .cfg
, aqui está um exemplo (Nota: o exemplo é uma regra de roteamento de consulta muito genérica e é recomendado criar regras específicas para consultas em vez de usar uma regra genérica como esta):
mysql_query_rules:
(
{
rule_id=1
active=1
match_pattern= " ^SELECT .* FOR UPDATE$ "
destination_hostgroup=0
apply=1
},
{
rule_id=2
active=1
match_pattern= " ^SELECT "
destination_hostgroup=1
apply=1
}
)
item de configuração de nível superior: datadir
, como uma string, para apontar para o diretório de dados.