ID-AZ-002 - Separação Do MySQL Do Disco Do SO

ID: KB-XX-002

Responsável: Thiago Thalisson, TI

Status: Publicado

Última Atualização: 16/09/2025

Propósito

Descrever o procedimento técnico para mover o diretório de dados do MySQL para um disco externo em uma Máquina Virtual (VM) do Azure, permitindo que o disco (e os dados) seja facilmente transferido para outra VM.

Aplica-se a

  • GTT Nível 1: Time de desenvolvimento da Fictor.

Pré-requisitos

  1. Instalar o MySQL: Se ainda não estiver instalado na VM, execute:

    sudo apt update
    sudo apt install mysql-server -y
  2. Criar e Anexar Disco Externo: No Portal Azure, crie um novo disco gerenciado e anexe-o à sua máquina virtual. Normalmente, ele será identificado pelo sistema operacional como /dev/sdc.

  3. Acesso SSH: Garanta que você tenha acesso SSH à máquina virtual.


Instruções

1. Visão Geral do Processo

Este guia está dividido em três partes principais:

  1. Configuração Inicial: Preparar a primeira VM, instalar o MySQL, formatar um disco externo e mover os dados do MySQL para ele.

  2. Importação de Dados: Um passo opcional para popular o banco de dados.

  3. Transferência do Disco: Desanexar o disco da VM original e anexá-lo a uma nova VM, configurando o MySQL para rodar a partir dele.


2. Parte 1: Configuração da VM Inicial

2.2. Script para Montagem e Migração do MySQL

O script a seguir automatiza a formatação, montagem do disco, movimentação dos dados do MySQL e reconfiguração do serviço.

  1. Crie o arquivo de script:

    touch sql-move-and-update.sh
  2. Cole o conteúdo abaixo no arquivo. **Nota:** O script foi corrigido para atualizar o arquivo de configuração do MySQL corretamente, em vez de sobrescrevê-lo de forma incorreta.

    #!/bin/bash
    # Função para formatar, criar ponto de montagem e montar o disco externo
    make_and_mount_drive() {
      echo ">>> Formatando e montando o disco /dev/sdc em /mnt/external-disk..."
      sudo mkdir -p /mnt/external-disk
      sudo mkfs.ext4 /dev/sdc
      sudo mount /dev/sdc /mnt/external-disk
      echo ">>> Disco montado com sucesso."
    }
    
    # Função para parar o MySQL, mover os dados e reconfigurar
    change_mysql() {
      echo ">>> Movendo dados do MySQL..."
      sudo systemctl stop mysql
    
      sudo mv /var/lib/mysql /mnt/external-disk/mysql
      sudo chown -R mysql:mysql /mnt/external-disk/mysql
    
      MYSQL_CONF="/etc/mysql/mysql.conf.d/mysqld.cnf"
      NEW_DATADIR="/mnt/external-disk/mysql"
    
      echo ">>> Fazendo backup e atualizando o arquivo de configuração do MySQL..."
      # Faz um backup do arquivo de configuração original
      sudo cp "$MYSQL_CONF" "${MYSQL_CONF}.bak"
    
      # Atualiza a diretiva 'datadir' no arquivo de configuração
      sudo sed -i "s|^datadir.*|datadir = ${NEW_DATADIR}|" "$MYSQL_CONF"
    
      echo ">>> Reiniciando o serviço MySQL..."
      sudo systemctl start mysql
      sudo systemctl status mysql
    }
    
    # Função para configurar a montagem automática do disco no boot
    automount() {
      echo ">>> Configurando fstab para montagem automática..."
      uuid=$(sudo blkid -s UUID -o value /dev/sdc)
    
      if [ -z "$uuid" ]; then
        echo "ERRO: Falha ao obter o UUID para /dev/sdc."
        exit 1
      fi
    
      fstab_entry="UUID=$uuid /mnt/external-disk ext4 defaults 0 2"
    
      if grep -qF "$fstab_entry" /etc/fstab; then
        echo ">>> Entrada já existe no /etc/fstab."
      else
        echo "$fstab_entry" | sudo tee -a /etc/fstab
        echo ">>> Entrada adicionada ao /etc/fstab."
      fi
      sudo mount -a
      echo ">>> Montagem via 'mount -a' verificada."
    }
    
    # Execução das funções
    make_and_mount_drive
    change_mysql
    automount
    
    echo ">>> Processo concluído!"
  3. Torne o script executável e execute-o:

    chmod +x sql-move-and-update.sh
    sudo ./sql-move-and-update.sh

3. Parte 2: Importação de um Banco de Dados (Opcional)

Com o MySQL rodando a partir do disco externo, você pode importar um banco de dados.

  1. Acesse o prompt do MySQL:

    sudo mysql -u root -p
  2. Crie um banco de dados para receber os dados:

    CREATE DATABASE nome_do_banco;
    EXIT;
        3.  Importe o arquivo `.sql`:
       bash
    sudo mysql -u root -p nome_do_banco < /caminho/para/seu/arquivo.sql
        4.  Verifique se as tabelas foram importadas:
       bash
    sudo mysql -u root -p
    
        sql
    USE nome_do_banco;
    SHOW TABLES;
    EXIT;

4. Parte 3: Transferindo o Disco para uma Nova VM

4.1. Procedimento no Portal Azure

  1. Na VM de origem, vá em Discos e, na seção Discos de Dados, localize e clique no ícone para Desanexar o disco.

  2. Na VM de destino, vá em Discos e clique em Anexar discos existentes. Selecione o disco que você acabou de desanexar.

4.2. Configuração na Nova VM

Conecte-se via SSH à nova VM e execute os seguintes comandos para montar o disco e reconfigurar o MySQL.

  1. Instale o MySQL na nova VM, caso ainda não tenha:

    sudo apt update && sudo apt install mysql-server -y
  2. Pare o serviço do MySQL:

    sudo systemctl stop mysql
  3. Remova o diretório de dados local** (que está vazio):

    sudo rm -rf /var/lib/mysql
  4. Monte o disco externo:

    sudo mkdir -p /mnt/external-disk
    sudo mount /dev/sdc /mnt/external-disk
  5. Atualize o arquivo de configuração** do MySQL para apontar para os dados no disco:

    # Use o comando sed para alterar a linha 'datadir'
    sudo sed -i 's|^datadir.*|datadir = /mnt/external-disk/mysql|' /etc/mysql/mysql.conf.d/mysqld.cnf
  6. Reinicie o MySQL e verifique o status:

    sudo systemctl start mysql
    sudo systemctl status mysql
  7. Configure a montagem automática (fstab) na nova VM, repetindo o passo automount do script da Parte 1, se desejar.

5. Documentação Complementar

  • Atenção: Certifique-se de que a VM de origem está desligada ou que o serviço do MySQL está parado antes de desanexar o disco para evitar corrupção de dados.

  • Chave SSH: Lembre-se de definir as permissões corretas para sua chave privada: chmod 600 sua-chave.pem.

Histórico De Versão

Last updated