Como Migrar O MySQL Para Um Servidor Separado

Aprenda como migrar o seu banco de dados MySQL para uma nova droplet na DigitalOcean e otimize seu banco de dados com essa dica incrível!

Se você acompanha nossa série de artigos sobre como configurar um servidor um LEMP ou mesmo o tutorial que ensinamos o passo a passo para se instalar o WordPress na DigitalOcean, deve ter notado que no final do tutorial seu banco de dados MySQL encontra-se na mesma droplet que o seu servidor web (Nginx ou Apache).

Geralmente isso é muito bom, pois praticamente não existe latência no acesso a dados, você só precisa gerenciar um servidor, os custos são reduzidos e o melhor de todos… menor dificuldade para se configurar. Mas conforme o sistema cresce (e o número de usuários cresce com ele), é indispensável realizar uma separação entre o servidor de banco de dados e o servidor web. Isso vai permitir que a equipe tune o sistema operacional da forma correta para cada situação, sem comprometer assim outra parte do sistema.

Por isso nesse artigo vamos ensinar como a migrar a sua base de dados atual para uma nova droplet, e assim separar o seu servidor web do seu servidor de banco de dados. Para começar vou assumir que você possui um servidor LAMP/LEMP já configurado e rodando sua aplicação. Em seguida também vou assumir que você possua uma droplet nova para hospedar seu banco de dados. Sabendo disso, a partir de agora vou me referir ao seu servidor atual como lamp-1 e o novo servidor para o MySQL como mysql-1.

Nosso objetivo então é resumido pela imagem abaixo:

Separando o servidor de banco de dados

Primeiro passo é configurar nossa nova droplet (mysql-1) para receber nosso banco de dados. Para isso acesse seu servidor via SSH e envie o seguinte comando para que ele se atualize para o que há de mais novo no mercado.

sudo apt-get update && sudo apt-get upgrade

Agora execute o comando abaixo para instalar o MySQL Server:

sudo apt-get install mysql-server

Digite uma senha para sua instalação MySQL. Esse senha pode ser a mesma que você utilizou no lamp-1. Após digitar essa senha execute o comando abaixo para criar as tabelas do MySQL:

sudo mysql_install_db

Agora execute o comando abaixo para adicionar uma segurança extra ao seu servidor MySQL e finalizar a instalação do mesmo:

sudo mysql_secure_installation

Durante a execução do comando acima você terá que responder algumas perguntas com Y para confirmar a alteração e outras com N para não confirmar. A única que recomendo você digitar N é para a alteração da senha do usuário root, em todo o restante você pode digitar Y.

Por padrão o seu servidor MySQL está configurado para escutar em localhost (127.0.0.1) por conexões, precisamos alterar isso para que ele escute em seu endereço de IP privado, isso vai permitir que o lamp-1 conecte-se ao mysql-1 remotamente. Para realizar essa configuração basta executar o comando abaixo:

sudo nano /etc/mysql/my.cnf

No arquivo que foi aberto é necessário procurar pela seguinte linha:

bind-address = 127.0.0.1

Agora substitua o valor 127.0.0.1 pelo endereço de IP privado (Private IP) de seu servidor mysql-1. Essa informação está disponível no painel de configuração da DigitalOcean, logo após clicar no nome de sua droplet.

Então a linha ficará da seguinte forma:

bind-address = mysql_1_private_IP

Após realizar as alterações acima citadas, pressione Ctrl+x para sair do editor de texto e, quando solicitado, pressione a tecla Y e em seguida o Enter para salvar as alterações. Logo após isso execute o comando abaixo para reiniciar o seu servidor e colocar todas as configurações para funcionar:

sudo service mysql restart

Migrar o MySQL

Agora vamos para uma nova etapa deste tutorial. Vamos realizar o backup do banco de dados atual migrá-lo para o novo servidor. É importante salientar que para migração ocorrer da melhor forma possível, necessitamos travar o banco de dados para atualizações e inserções, isso vai tornar sua aplicação read-only durante um período de tempo.

No servidor lamp-1 entre no terminal MySQL através do comando abaixo:

mysql -u root -p

Para travar o seu banco de dados e deixá-lo apenas no estado read-only (leitura), execute o comando abaixo:

FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = ON;
EXIT

Agora direto de seu terminal, execute o comando abaixo para realizar o backup de seu banco de dados. O backup será salvo em um arquivo chamado dump.sql

mysqldump --lock-all-tables -u root -p --all-databases > dump.sql

Agora você pode copiar o arquivo de backup dump.sql, que se encontra no servidor lamp-1, para a o servidor onde o MySQL será instalado (mysql-1), para isso basta executar o comando abaixo:

scp dump.sql user@mysql_1_private_IP:/tmp

Tudo pronto nesta etapa. Uma observação importante, seu banco de dados continua travado, como você não vai utilizá-lo mais, recomendo deixá-lo assim, porém se quiser voltar ao normal basta executar o comando abaixo:

SET GLOBAL read_only = OFF;
UNLOCK TABLES;

Configurando as permissões do MySQL

Vamos para terceira e última etapa de nossa migração. Agora vamos importar para o mysql-1 os dados que salvamos de nosso servidor principal. Primeiro passo e importar o banco de dados previamente salvo, para isso basta executar o comando abaixo estando logado no servidor mysql-1:

mysql -u root -p < /tmp/dump.sql

Neste ponto todos os seus dados estão salvos em seu novo servidor porém ainda é necessário criar um novo usuário com as mesmas permissões do usuário do seu antigo servidor. Para isso entre no terminal MySQL digitando o comando abaixo:

mysql -u root -p

Agora vamos criar um usuário para o banco de dados recém importado, para isso execute o comando abaixo:

CREATE USER 'wordpressuser'@'lamp_1_private_IP' IDENTIFIED BY 'password';

Lembre-se de alterar os campos em vermelho para os campos correspondentes a sua realidade. Altere o wordpressuser para o usuário que deseja criar em seu servidor, altere o lamp_1_private_IP para o IP privado da sua droplet lamp-1 e altere o campo password para corresponder a uma senha segura para acessar seu banco de dados.

Agora vamos dar as permissões ao usuário. Suponha que seu banco de dados se chame wordpress, execute o comando abaixo para dar as permissões corretas ao seu usuário recém criado:

GRANT ALL PRIVILEGES ON `wordpress`.* TO 'wordpressuser'@'lamp_1_private_IP';

Após executar o comando anterior você precisa executar os dois comando abaixo para garantir que tudo ocorrerá como desejado:

FLUSH PRIVILEGES;
EXIT

Tudo pronto, agora você só precisa atualizar a sua aplicação para que ela aponte para o novo servidor. O IP que você precisa apontar é o IP privado do seu servidor MySQL (mysql-1), para continuar com o exemplo do WordPress, vamos fazer a alteração em um sistema WordPress. Primeiro passo é editar o arquivo wp-config.php disponível na raiz da instalação de seu WordPress, abra esse arquivo com seu editor de texto favorito e procure a seguinte linha:

// MySQL hostname
define('DB_HOST', 'localhost');

Altere o texto localhost para o IP privado de seu servidor MySQL.

define('DB_HOST', 'mysql_1_private_IP');

Pronto, sua instalação deve estar funcionando corretamente.

Cadastre-se na DigitalOcean com Descontos!

Cadatre-se hoje mesmo na DigitalOcean e ganhe um cupom de $10 para iniciar os testes na plataforma

Renato Tavares

Analista de Sistemas

Sou formado em Análise de Sistemas e trabalho com Linux e programação há 10 anos, sou especialista em servidores WEB e apaixonado pela ferramenta que a DigitalOcean construiu.