Como alterar um diretório de dados MySQL/MariaDB padrão no Linux
Depois de instalar os componentes de uma pilha LAMP em um servidor CentOS/RHEL 7, há algumas coisas que você pode querer fazer.
Alguns deles têm a ver com aumentar a segurança do Apache e MySQL/MariaDB, enquanto outros podem ser aplicáveis ou não de acordo com nossa configuração ou necessidades.
Por exemplo, com base no uso esperado do servidor de banco de dados, podemos querer alterar o diretório data padrão (/var/lib/mysql
) para um local diferente. Este é o caso quando se espera que tal diretório cresça devido ao alto uso.
Caso contrário, o sistema de arquivos onde /var
está armazenado poderá entrar em colapso em um ponto, causando falha em todo o sistema. Outro cenário em que a alteração do diretório padrão é quando temos um compartilhamento de rede dedicado que queremos usar para armazenar nossos dados reais.
Por esse motivo, neste artigo explicaremos como alterar o diretório de dados padrão do MySQL/MariaDB para um caminho diferente em um servidor CentOS/RHEL 7 e distribuições Ubuntu/Debian.
Embora usaremos o MariaDB, os conceitos explicados e as etapas executadas neste artigo se aplicam tanto ao MySQL quanto ao MariaDB salvo indicação em contrário.
Alterando o diretório de dados MySQL/MariaDB padrão
Nota: Vamos assumir que nosso novo diretório de dados é /mnt/mysql-data
. É importante notar que este diretório deve pertencer a mysql:mysql
.
mkdir /mnt/mysql-data
chown -R mysql:mysql /mnt/mysql-data
Para sua conveniência, dividimos o processo em 5 etapas fáceis de seguir:
Etapa 1: identificar o diretório de dados MySQL atual
Para começar, vale a pena identificar o diretório de dados atual usando o seguinte comando. Não presuma que ainda é /var/lib/mysql
, pois poderia ter sido alterado no passado.
mysql -u root -p -e "SELECT @@datadir;"
Depois de inserir a senha do MySQL, a saída deverá ser semelhante a.
Etapa 2: Copie o diretório de dados MySQL para um novo local
Para evitar corrupção de dados, interrompa o serviço se ele estiver em execução antes de continuar. Use os comandos conhecidos do systemd para fazer isso:
------------- On SystemD -------------
systemctl stop mariadb
systemctl is-active mariadb
------------- On SysVInit -------------
service mysqld stop
service mysqld status
OR
service mysql stop
service mysql status
Se o serviço foi desativado, a saída do último comando deverá ser a seguinte:
Em seguida, copie recursivamente o conteúdo de /var/lib/mysql
para /mnt/mysql-data
preservando as permissões e carimbos de data/hora originais:
cp -R -p /var/lib/mysql/* /mnt/mysql-data
Etapa 3: configurar um novo diretório de dados MySQL
Edite o arquivo de configuração (my.cnf
) para indicar o novo diretório de dados (/mnt/mysql-data
neste caso).
vi /etc/my.cnf
OR
vi /etc/mysql/my.cnf
Localize as seções [mysqld]
e [client]
e faça as seguintes alterações:
Under [mysqld]:
datadir=/mnt/mysql-data
socket=/mnt/mysql-data/mysql.sock
Under [client]:
port=3306
socket=/mnt/mysql-data/mysql.sock
Salve as alterações e prossiga para a próxima etapa.
Etapa 4: definir o contexto de segurança do SELinux para o diretório de dados
Esta etapa é aplicável apenas ao RHEL/CentOS e seus derivados.
Adicione o contexto de segurança do SELinux a /mnt/mysql-data
antes de reiniciar o MariaDB.
semanage fcontext -a -t mysqld_db_t "/mnt/mysql-data(/.*)?"
restorecon -R /mnt/mysql-data
Em seguida, reinicie o serviço MySQL.
------------- On SystemD -------------
systemctl stop mariadb
systemctl is-active mariadb
------------- On SysVInit -------------
service mysqld stop
service mysqld status
OR
service mysql stop
service mysql status
Agora, use o mesmo comando da Etapa 1 para verificar a localização do novo diretório de dados:
mysql -u root -p -e "SELECT @@datadir;"
Etapa 5: Crie um banco de dados MySQL para confirmar o diretório de dados
Faça login no MariaDB, crie um novo banco de dados e verifique /mnt/mysql-data
:
mysql -u root -p -e "CREATE DATABASE tecmint;"
Parabéns! Você alterou com sucesso o diretório de dados do MySQL ou MariaDB.
Resumo
Neste post, discutimos como alterar o diretório de dados em um servidor MySQL ou MariaDB rodando em distribuições CentOS/RHEL 7 e Ubuntu/Debian.
Você tem alguma dúvida ou comentário sobre este artigo? Sinta-se à vontade para nos informar usando o formulário abaixo – ficaremos sempre felizes em ouvir você!