MySQL Management · 6 min read · Jan 29, 2026
Gerenciando Vários Servidores MySQL a Partir de Uma Instalação do phpMyAdmin (Usando Criptografia SSL)
Gerenciando Vários Servidores MySQL a Partir de Uma Instalação do phpMyAdmin (Usando Criptografia SSL)
Versão 1.0
Autor: Falko Timme
Siga-me no Twitter
Este tutorial explica como você pode gerenciar vários servidores MySQL a partir de uma instalação do phpMyAdmin. Por razões de segurança, a comunicação entre o phpMyAdmin e qualquer servidor MySQL remoto está usando criptografia SSL (isso não é necessário para um servidor MySQL local, uma vez que a comunicação entre o phpMyAdmin e o MySQL não sai do servidor). O phpMyAdmin é uma ferramenta de software livre escrita em PHP, destinada a lidar com a administração do MySQL pela World Wide Web. O phpMyAdmin suporta uma ampla gama de operações com o MySQL.
Não dou nenhuma garantia de que isso funcionará para você!
1 Nota Preliminar
Neste tutorial, mostrarei como gerenciar dois servidores MySQL - um local (local.example.com com o endereço IP 192.168.0.100 - este é o servidor onde o phpMyAdmin está instalado) e um servidor remoto (remote.example.com com o endereço IP 192.168.0.101) - a partir de uma instância do phpMyAdmin. Estou assumindo que o phpMyAdmin já está instalado (seja manualmente ou através do gerenciador de pacotes da sua distribuição) e funcionando (ou seja, você já deve ser capaz de gerenciar o servidor MySQL local através do phpMyAdmin) - não abordarei a instalação do phpMyAdmin aqui.
Este tutorial é baseado no Debian Wheezy/Ubuntu 12.04. Para outras distribuições, você pode ter que ajustar alguns caminhos, mas o princípio é o mesmo.
2 Habilitando o Suporte a SSL no Servidor MySQL Remoto
remote.example.com:
Faça login no MySQL…
mysql -u root -p… e execute o seguinte comando no shell do MySQL:
show variables like '%ssl%';Se a saída for a seguinte (ambos have_openssl e have_ssl mostram DESABILITADO)…
mysql> show variables like ’%ssl%’;
+—————+———-+
| Variable_name | Value |
+—————+———-+
| have_openssl | DESABILITADO |
| have_ssl | DESABILITADO |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
+—————+———-+
7 rows in set (0.00 sec)
mysql>
… isso significa que o MySQL foi compilado com suporte a SSL, mas atualmente não está habilitado. Para habilitá-lo, saia do shell do MySQL primeiro…
quit;… e abra /etc/mysql/my.cnf:
vi /etc/mysql/my.cnfRole para baixo até a seção * Recursos de Segurança (dentro da seção [mysqld]) e adicione uma linha com a palavra ssl a ela:
| | [...] # * Recursos de Segurança # # Leia o manual também, se você quiser chroot! # chroot = /var/lib/mysql/ # # Para gerar certificados SSL, recomendo a GUI OpenSSL "tinyca". ssl # ssl-ca=/etc/mysql/cacert.pem # ssl-cert=/etc/mysql/server-cert.pem # ssl-key=/etc/mysql/server-key.pem [...] | |
Reinicie o MySQL…
/etc/init.d/mysql restart… e verifique novamente se o SSL agora está habilitado:
mysql -u root -pshow variables like '%ssl%';A saída deve ser a seguinte, o que significa que o SSL agora está habilitado:
mysql> show variables like ’%ssl%’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| have_openssl | SIM |
| have_ssl | SIM |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
+—————+——-+
7 rows in set (0.00 sec)
mysql>
Digite…
quit;… para sair do shell do MySQL.
Certifique-se de que o OpenSSL está instalado:
apt-get install opensslAgora verifique sua versão do OpenSSL:
root@remote:~# openssl version
OpenSSL 1.0.1c 10 May 2012
root@remote:~#
Se você - como eu - tem a versão do OpenSSL 1.0.1c, os certificados gerados pelo OpenSSL causarão erros como
Sep 18 17:02:15 remote mysqld: SSL error: Unable to get private key from ‘/etc/mysql/newcerts/server-key.pem’
Sep 18 17:02:15 remote mysqld: 120918 17:02:15 [Warning] Failed to setup SSL
Sep 18 17:02:15 remote mysqld: 120918 17:02:15 [Warning] SSL error: Unable to get private key
(no /var/log/syslog em remote.example.com) e
root@local:/etc/mysql/newcerts# mysql –ssl-ca=/etc/mysql/newcerts/ca-cert.pem –ssl-cert=/etc/mysql/newcerts/client-cert.pem –ssl-key=/etc/mysql/newcerts/client-key.pem -h remote.example.com -u root -p
Digite a senha:
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
root@local:/etc/mysql/newcerts#
(no local.example.com quando você tenta estabelecer uma conexão criptografada com remote.example.com), pelo menos com o MySQL 5.5; veja:
Para resolver esse problema, simplesmente construímos nosso próprio OpenSSL (isso não é necessário se a sua versão do OpenSSL for anterior a 1.0.1):
cd /tmp
wget http://www.openssl.org/source/openssl-0.9.8x.tar.gz
tar xvfz openssl-0.9.8x.tar.gz
cd openssl-0.9.8x
./config –prefix=/usr/local/openssl-0.9.8
make
make install
Depois disso, você encontrará seu novo binário do OpenSSL em /usr/local/openssl-0.9.8/bin/openssl.
Agora criamos os certificados CA, servidor e cliente que precisamos para as conexões SSL. Eu crio esses certificados no diretório /etc/mysql/newcerts, que eu tenho que criar primeiro:
mkdir /etc/mysql/newcerts && cd /etc/mysql/newcertsCrie o certificado CA (estou usando /usr/local/openssl-0.9.8/bin/openssl aqui; se a versão do OpenSSL do seu sistema for anterior a 1.0.1, você pode simplesmente usar openssl):
/usr/local/openssl-0.9.8/bin/openssl genrsa 2048 > ca-key.pem/usr/local/openssl-0.9.8/bin/openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pemCrie o certificado do servidor:
/usr/local/openssl-0.9.8/bin/openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem/usr/local/openssl-0.9.8/bin/openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pemCrie o certificado do cliente:
/usr/local/openssl-0.9.8/bin/openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem/usr/local/openssl-0.9.8/bin/openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pemA saída de…
ls -l… deve agora parecer a seguinte:
root@remote:/etc/mysql/newcerts# ls -l
total 32
-rw-r–r– 1 root root 1346 Sep 18 17:52 ca-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:52 ca-key.pem
-rw-r–r– 1 root root 1099 Sep 18 17:53 client-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:53 client-key.pem
-rw-r–r– 1 root root 956 Sep 18 17:53 client-req.pem
-rw-r–r– 1 root root 1099 Sep 18 17:53 server-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:53 server-key.pem
-rw-r–r– 1 root root 956 Sep 18 17:53 server-req.pem
root@remote:/etc/mysql/newcerts#
Agora devemos transferir ca-cert.pem, client-cert.pem e client-key.pem para o servidor MySQL local (em local.example.com); antes de fazermos isso, criamos o diretório /etc/mysql/newcerts em local.example.com:
local.example.com:
mkdir /etc/mysql/newcertsDe volta a
remote.example.com
, podemos transferir os três arquivos para
local.example.com
da seguinte forma:
remote.example.com:
scp /etc/mysql/newcerts/ca-cert.pem [email protected]:/etc/mysql/newcerts scp /etc/mysql/newcerts/client-cert.pem [email protected]:/etc/mysql/newcerts scp /etc/mysql/newcerts/client-key.pem [email protected]:/etc/mysql/newcertsEm seguida, abra /etc/mysql/my.cnf…
vi /etc/mysql/my.cnf… e modifique a seção * Recursos de Segurança; descomente as linhas ssl-ca, ssl-cert e ssl-key e preencha os valores corretos:
| | [...] # * Recursos de Segurança # # Leia o manual também, se você quiser chroot! # chroot = /var/lib/mysql/ # # Para gerar certificados SSL, recomendo a GUI OpenSSL "tinyca". ssl ssl-ca=/etc/mysql/newcerts/ca-cert.pem ssl-cert=/etc/mysql/newcerts/server-cert.pem ssl-key=/etc/mysql/newcerts/server-key.pem [...] | |
Reinicie o MySQL:
/etc/init.d/mysql restartAgora faça login no MySQL novamente…
mysql -u root -p… e verifique se o SSL está habilitado e se os certificados corretos foram carregados:
show variables like '%ssl%';mysql> show variables like ’%ssl%’;
+—————+————————————-+
| Variable_name | Value |
+—————+————————————-+
| have_openssl | SIM |
| have_ssl | SIM |
| ssl_ca | /etc/mysql/newcerts/ca-cert.pem |
| ssl_capath | |
| ssl_cert | /etc/mysql/newcerts/server-cert.pem |
| ssl_cipher | |
| ssl_key | /etc/mysql/newcerts/server-key.pem |
+—————+————————————-+
7 rows in set (0.00 sec)
mysql>
Não saia do shell do MySQL. Agora vamos criar um usuário root do MySQL que pode se conectar de local.example.com a remote.example.com e é obrigado a usar SSL:
CREATE USER ‘root’@’192.168.0.100’ IDENTIFIED BY ‘mysqlrootpassword’;
GRANT ALL PRIVILEGES ON . TO ‘root’@’192.168.0.100’ IDENTIFIED BY ‘mysqlrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT USAGE ON *.* TO 'root'@'192.168.0.100' REQUIRE SSL;CREATE USER ‘root’@’local.example.com’ IDENTIFIED BY ‘mysqlrootpassword’;
GRANT ALL PRIVILEGES ON . TO ‘root’@’local.example.com’ IDENTIFIED BY ‘mysqlrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT USAGE ON *.* TO 'root'@'local.example.com' REQUIRE SSL;FLUSH PRIVILEGES;Agora você pode sair do shell do MySQL:
quit;É isso - agora temos um usuário root do MySQL que pode se conectar de local.example.com a remote.example.com, mas é obrigado a usar criptografia SSL.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.