Como eu mudo o diretório do banco de dados MySQL?

3

Estou usando o CentOS com o cPanel. No meu servidor, todos os bancos de dados MySQL são salvos em /var/lib/mysql . Agora /var está 100% cheio e o MySQL parou de funcionar. Como posso mover os bancos de dados para um novo diretório como /home/mysql , especialmente considerando que esse servidor é gerenciado com cPanel?

    
por user111175 26.02.2012 / 23:56

4 respostas

5

Não consigo confirmar isso no cpanel, já que não tenho acesso, mas este é um exemplo do console conectado pelo ssh e sudo ao root. Existem argumentos para usar uma entrada de bind em / etc / fstab em vez de um symlink, mas isso funciona para mim.

Meu procedimento normal é parar o mysql, mover o conteúdo do diretório, vincular o original e reiniciar o mysqld.

[tomh@workstation001 ~]$ sudo su -
[root@workstation001 ~]# 

[root@workstation001 ~]# service mysqld stop
Stopping mysqld (via systemctl):  
                                                           [  OK  ]

[root@workstation001 ~]# mv /var/lib/mysql/ /opt/

[root@workstation001 ~]# ln -s /opt/mysql /var/lib/


[root@workstation001 ~]# ls -la /var/lib/mysql
lrwxrwxrwx 1 root root 10 Feb 26 23:02 /var/lib/mysql -> /opt/mysql

[root@workstation001 ~]# service mysqld start
Starting mysqld (via systemctl):                           [  OK  ]


[root@workstation001 ~]# mysql -uroot 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.18-log MySQL Community Server (GPL)

mysql> show databases;
...
| Database              |
+-----------------------+
| information_schema    |
| mysql                 |
| performance_schema    |
| test   

Acabei de notar uma questão semelhante, da qual isto é próximo de uma duplicata de, que menciona algumas questões de fazer isso acima com o selinux ativado; link

Então, se você tiver o selinux, há algumas etapas adicionais.

    
por 27.02.2012 / 00:05
4

se você quiser alterar o diretório mysql data, você deve editar o arquivo de configuração mysql e alterar datadir value.

datadir = /home/user/data

Seu novo diretório de dados DEVE ser de propriedade de mysql e ter contexto de segurança adequado.

chown -R mysql.mysql /home/user/data
chcon -R -t mysqld_db_t /home/user/data

reiniciar o servidor mysql

/etc/init.d/mysqld restart
    
por 22.06.2012 / 12:40
2

Eu encontrei este guia passo a passo trabalhando para mim.

Você deve instalar:

yum install policycoreutils-python

Guia:

Veja o contexto do SELinux da localização padrão do banco de dados para o mysql:

~]# ls -lZ /var/lib/mysql
drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql

Isso mostra mysqld_db_t , que é o elemento de contexto padrão para o local dos arquivos do banco de dados. Esse contexto terá que ser aplicado manualmente ao novo local do banco de dados que será usado neste exemplo para que ele funcione corretamente.

Pare o daemon do mysqld:

~]# systemctl stop mariadb.service

Crie um novo diretório para o novo local do (s) banco (s) de dados. Neste exemplo, / mysql / é usado:

~]# mkdir -p /mysql

Copie os arquivos do banco de dados do local antigo para o novo local:

~]# cp -R /var/lib/mysql/* /mysql/

Altere a propriedade deste local para permitir o acesso pelo usuário e grupo do mysql. Isso define as permissões tradicionais do Unix que o SELinux ainda observará:

~]# chown -R mysql:mysql /mysql

Execute o seguinte comando para ver o contexto inicial do novo diretório:

~]# ls -lZ /mysql
drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0   mysql

O contexto usr_t deste diretório recém-criado não é atualmente adequado para o SELinux como um local para arquivos de banco de dados do MariaDB. Depois que o contexto for alterado, o MariaDB poderá funcionar adequadamente nesta área.

Abra o arquivo de configuração principal do MariaDB /etc/my.cnf com um editor de texto e modifique a opção datadir para que ele se refira ao novo local. Neste exemplo, o valor que deve ser inserido é /mysql :

[mysqld]
datadir=/mysql

Salve este arquivo e saia.

Iniciar mysqld . O serviço deve falhar ao iniciar e uma mensagem de negação será registrada no arquivo /var/log/messages :

~]# systemctl start mariadb.service
Job for mariadb.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.

No entanto, se o daemon de auditoria estiver em execução e com ele o setroubleshoot service, a negação será registrada no arquivo /var/log/audit/audit.log :

SELinux is preventing '/usr/libexec/mysqld' "write" access on /mysql. For complete SELinux messages. run 'sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71'

O motivo dessa negação é que mysql não está rotulado corretamente para os arquivos de dados do MariaDB. O SELinux está impedindo o MariaDB de ter acesso ao conteúdo rotulado como usr_t . Execute os seguintes passos para resolver este problema:

Execute o seguinte comando para adicionar um mapeamento de contexto para mysql . Observe que o semanageutility não está instalado por padrão. Se estiver faltando no seu sistema, instale o pacote policycoreutils-python .

~]# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"

Esse mapeamento é gravado no arquivo /etc/selinux/targeted/contexts/files/file_contexts.local :

~]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local

/mysql(/.*)?    system_u:object_r:mysqld_db_t:s0

Agora, use o utilitário restorecon para aplicar esse mapeamento de contexto ao sistema em execução:

~]# restorecon -R -v /mysql

Agora que o local mysql foi rotulado com o contexto correto para o MariaDB, o mysqld é iniciado:

~]# systemctl start mariadb.service

Confirme se o contexto foi alterado para mysql :

~]$ ls -lZ /mysql
drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql

A localização foi alterada e rotulada e mysqld foi iniciado com sucesso. Neste ponto, todos os serviços em execução devem ser testados para confirmar a operação normal.

    
por 05.10.2015 / 14:18
-1

Parando a instalação / instância padrão

service mysqld stop

Limpar configuração atual

rm /etc/my.cnf

Desinstalar a instalação / instância padrão

yum remove mysql mysql-server -y

Limpar datadir atual

test -d /var/lib/mysql/ && rm -rf /var/lib/mysql/

Limpar o 'Novo' Datadir

test -d /mysql/mysql/ && rm -rf /mysql/mysql/

Instale novamente

yum install mysql mysql-server -y

Verifique o status do serviço

service mysqld status

Inicie - apenas para criar uma estrutura inicial / padrão

service mysqld start

Verifique o status do serviço

service mysqld status

Interrompa a instalação atual do servidor MySQL

service mysqld stop

Verifique se você não tem mais instância / serviço em execução

ps axu | grep mysql

Mova o diretório de dados mysql para a partição '/ mysql' e crie o link simbólico

test -d /var/lib/mysql/ && mv /var/lib/mysql/ /mysql/ && ln -s /mysql/mysql /var/lib/

Verifique o link simbólico e o caminho real

ls -lrth /var/lib/ | grep mysql 

Definir permissão no novo Datadir

chown -R mysql:mysql /mysql/mysql

inicie-o

service mysqld start

Tente se conectar (tenha em mente que a instalação padrão do MySQL não define um 'pwd' para o usuário 'root' e então você deve se conectar com 'senha em branco'

mysql -u root -p --host 127.0.0.1

Uma vez conectado ao MySQL, crie um novo banco de dados apenas para testar se ele está funcionando e onde o MySQL criará uma estrutura de pastas / arquivos

create database DBTesteNew;
exit

Verifique se o novo banco de dados está no 'novo datadir'

ls /mysql/mysql

Verifique se o mysqld está configurado para iniciar no tempo de inicialização

chkconfig mysqld on

reiniciar

reboot
    
por 04.10.2014 / 04:08

Tags