Movendo / tmp para uma unidade montada diferente

1

Mapeei meu datadir MySQL para um disco diferente (e maior) com 900 GB

[root@web ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/xvda1       40G   24G   14G  64% /
    tmpfs           7.4G     0  7.4G   0% /dev/shm
    /dev/xvdb1      886G  658G  184G  79% /mnt/cbsvolume1

O / tmp está localizado no disco menor de 40 GB

[root@web ~]# df -h /tmp
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       40G   24G   14G  64% /

Parece que o MySQL está usando o diretório / tmp e, por isso, às vezes estou ficando sem espaço em disco ao tentar executar grandes operações do MySQL.

Como posso alterar o /tmppara também usar o disco maior?

Noam
fonte
Parece-me que você /tmpnem está localizado em um disco.
Der Hochstapler
@OliverSalzburg Tenho um forte pressentimento de que você está certo, mas não sabe o que quer dizer :) Você pode elaborar?
Noam
O tmpfs é montado na memória volátil. Isso significa que ele reside na sua RAM, não no seu disco rígido. É por isso que o conteúdo desaparece depois que você reinicia sua máquina. Dito isto, eu interpretei errado a saída que você postou em sua pergunta. Eu imaginei /tmpser tmpfs, o que não é o caso.
Der Hochstapler

Respostas:

1

Tanto quanto eu sei, o conteúdo de /tmpsão excluídos na reinicialização.

No entanto, no seu caso, você pode tentar alterar / adicionar TMPDIRvariável de ambiente em:

/etc/mysql/conf.d/local.cnf
Cornelius
fonte
Fez isso, df -h /tmpainda mostra a mesma coisa. Como posso verificar se 'funcionou'?
Noam
Legal. E essa configuração é temporária até a reinicialização? Posso adicionar esta linha a algum tipo de script de inicialização e torná-la permanente? (btw eu também acredito / tmp é apagado na reinicialização, mysql só usa-lo para tabelas temporárias e tal)
Noam
Na verdade, eu tentei isso, mas ainda o mysql usa o /tmpda montagem menor. Além disso, eu não tenho um diretório, /etc/mysql/pode estar em um lugar diferente?
Noam
Leia este stackoverflow.com/questions/2482234/… (você também pode usar o my.cnfarquivo)
Cornelius
1
Sim. Na verdade, vejo que o erro que recebo é: /usr/libexec/mysqld: Can't create/write to file '/mnt/cbsvolume1/newTmpDir/ibvxXVDh' (Errcode: 13)Então, acho que preciso adicionar premissas a esse diretório? Então eu também fiz chown mysql:mysql /mnt/cbsvolume1/newTmpDire parece estar funcionando. Obrigado!
Noam
1

Altere a variável de ambiente TMPDIR para um sistema de arquivos / diretório com mais espaço em disco.

Edite o arquivo de configuração local /etc/mysql/conf.d/local.cnf. Este arquivo contém suas alterações locais - e não será sobrescrito se você atualizar o mysql. Observe que os arquivos de configuração podem ser armazenados em um local diferente - use find para localizar o arquivo de configuração padrão my.cnf. Geralmente local.cnf seria mantido no mesmo diretório.

sudo find / -name my.cnf     # look for path of config files

Edite local.cnf, por exemplo sudo vi /etc/mysql/conf.d/local.cnf

Adicione estas linhas ao local.cnf:

[mysqld]
tmpdir = /your/newpath

Então reinicie o mysql.

Na documentação do MySQL :

B.5.4.4 Onde o MySQL armazena arquivos temporários

No Unix, o MySQL usa o valor da variável de ambiente TMPDIR como o nome do caminho do diretório no qual armazenar arquivos temporários. Se TMPDIR não estiver definido, o MySQL usará o padrão do sistema, que geralmente é / tmp, / var / tmp ou / usr / tmp.

suspeito
fonte
Você pode mostrar a melhor maneira de mudar e se devo parar o mysql antes?
Noam
Veja a resposta editada. Você não precisa parar o mysql antes de fazer as alterações.
precisa
Obrigado. Estou um pouco confuso quanto à diferença entre isso e a export TMPDIR=<path>sugestão. Além disso, eu não tenho um /etc/mysql/diretório, ele pode estar localizado em um local diferente?
Noam
Eu não recomendo usar a exportação - a menos que você planeje iniciar o mysql a partir do mesmo shell que emitiu o exportcomando. Use findcomo explicado na resposta editada.
precisa