De Para
De: /var/lib/mysql
Para: /mysql_datadir/databases
1. Owner e grupo
O owner e o grupo do diretório de destino devem ser obrigatóriamente mysql:mysql
2. SE Linux
Esse foi um ponto que eu me atrapalhei muito, o SE Linux é uma feature do Linux que permite fazer o controle de acesso baseado em politicas, portanto se o SELinux estiver habilitado fará com que o MySQL não consiga escrever no Datadir fora do /var/lib/mysql, temos duas saidas, desabilitar o SELinux ou configurar a permissões necessárias para escrita do MySQL no novo diretorio.
2.1 Verificando se o SELinux esta habilitado:
[root@ol7-mysql57-slave1 mysql_datadir]# getenforce
Enforcing
[root@ol7-mysql57-slave1 mysql_datadir]#
Portanto o SE Linux esta habilitado.
2.2 Desabilitando o SE Linux:
Editar o arquivo /etc/selinux/config configurando a variavel, SELINUX para disabled e reinciar o servidor:
[root@ol7-mysql57-slave1 mysql_datadir]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
2.3 Configurando o SE Linux:
O seguinte artigo resolveu todos os meus problemas e escrive esta pagina baseado nele, blogs.oracle.com/jsmyth/selinux-and-mysql.
Até onde eu entendi o SELinux funciona através de grupos ou objetos, esses um usuário ou grupo de usuários possuem permissões em objetos, assim além da permissão no diretório ou arquivo precisamos configurar a lista de acesso no SE linux.
O comando semanage é o utilitário para escrever as politicas no arquivo de contexto sem a necessidade edita-lo manualmente, para no caso utlizaremos o comando:
semanage fcontext -a -t mysqld_db_t "/mysql_datadir/databases(/.*)?"
Na sequencia devemos forçar a reileitura dos arquivos e diretório (objetos) conforme a politica aplicada no arquivo de contexto, após esse comando é necessário realizar o boot do servidor:
restorecon -Rv /mysql_datadir/databases
Podemos configurar os arquivos sem necessidade de boot com o comando chcon conforme abaixo:
chcon -Rt mysqld_db_t /mysql_datadir/databases
chcon -Ru system_u /mysql_datadir/databases
Outros objetos do SELinux:
Objeto | Funcionalidade |
mysqld_port_t | Porta TCP |
mysqld_db_t | Arquivos de dados |
mysqld_etc_t | Arquivo de inicialização |
mysqld_log_t | Arquivos de Log |
Portanto com o SELinux habilitado para alterar qualquer caracteristica padrãod o MySQL devemos configurar estes objetos dentro do SELinux conforme desejado.
3. Movendo o Datadir
3.1 Parar o mysql
service mysqld stop
3.2 Copiar os arquivos de origem para o destino:
rsync -vhrog /var/lib/mysql/* /mysql_datadir/databases
3.3 Editar o arquivo /etc/my.cnf
De: datadir=/var/lib/mysql
Para: datadir=/mysql_datadir/databases
3.4 Iniciar o MySQL
service mysqld start
3.5 Para validar:
mysql -u root -p
show variables like "%DATA%";
mysql> show variables like "%DATADIR%";
+---------------+---------------------------+
| Variable_name | Value |
+---------------+---------------------------+
| datadir | /mysql_datadir/databases/ |
+---------------+---------------------------+
1 row in set (0.01 sec)
mysql>
Nenhum comentário:
Postar um comentário