mysqld não está mais iniciando devido ao disco preenchido

mysqld não está mais iniciando devido ao disco preenchido

Como limpar logs ou encontrar arquivos maiores e reduzir o espaço? também não entendo que 1.7T nem seja usado neste momento crítico.

Mysqld não está rodando porque 99% é usado.

# df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs           20G   19G  279M  99% /
/dev/root        20G   19G  279M  99% /
devtmpfs         32G  268K   32G   1% /dev
/dev/md3        1.8T  196M  1.7T   1% /home
tmpfs            32G     0   32G   0% /dev/shm
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named
/dev/root        20G   19G  279M  99% /var/named/chroot/var/named
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.conf
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.rfc1912.zones
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/rndc.key
/dev/root        20G   19G  279M  99% /var/named/chroot/usr/lib64/bind
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.iscdlv.key
/dev/root        20G   19G  279M  99% /var/named/chroot/etc/named.root.key

Responder1

Os dados do MySQL são armazenados em formato /var/lib. Não há mais espaço em /var. MySQL não inicia. Muito simples, na verdade. Dê uma olhada /var/loge limpe. Eu recomendaria algo como (excluir todos gzos arquivos /var/log):

$ find /var/log -iname "*.gz" -delete

Claro, você pode querer verificar primeiro o que está sendo excluído:

$ find /var/log -iname "*.gz"

1,7 TB é fornecido para /home. Contudo /varnão é /home. Então /homenão está sendo usado. Simples também.

Você claramente deveria ter se separado /varem uma partição muito maior ao configurar seu sistema. Agora, a melhor solução que encontrei é mover o datadir do MySQL para uma partição maior ( /home):

$ mv /var/lib/mysql /home
$ ln -s /home/mysql /var/lib/mysql

Se você não quiser usar um link, você deve reconfigurar o MySQL para usar o novo datadir armazenado no arquivo /home. Edite /etc/mysql/my.cnfe altere isso:

datadir = /var/lib/mysql

para isso:

datadir = /home/mysql

Agora que o MySQL tem espaço disponível, ele deverá iniciar sem problemas. Você realmente deveria reconsiderar seu esquema de partição se estiver hospedando um banco de dados tão importante.

Você também pode querer investigar o conteúdo dos seus logs, já que os aplicativos não deveriam escrever tanto neles se tudo estivesse indo bem. Algo pode estar lutando para funcionar corretamente em algum lugar.

Responder2

Este é um comando útil para encontrar os arquivos maiores:

du -ak /var | sort -nr | less

Uso:

du -akresume o uso do disco de todos -aos arquivos ( ) na /varpartição e imprime o tamanho em quilobytes ( -k).

sort -nrConcatena a lista de arquivos e os classifica em ordem invertida ( -r) numérica ( -n).

lessPaginará a saída para que você possa ver os maiores infratores no topo e avançar e retroceder na lista.

Responder3

Gostaria de observar que também pode ser um problema com os logs binários do MySQL, e não com os próprios arquivos de banco de dados. Binlogs são colocados no diretório /var/log/mysql por padrão em muitos casos e tendem a consumir algumas vezes mais espaço em disco do que arquivos de banco de dados. É porque os logs binários armazenam todas as consultas de modificação de dados SQL (UPDATEs, INSERTs, etc.) para acompanhar as alterações nos dados do banco de dados. Binlogs não devem ser removidos diretamente pelo comando shell rm, apenas pelo comando mysql em um mecanismo de banco de dados em execução. Para fazer isso, o servidor mysql deve estar ativo. Eu acho que mover o diretório /var/lib/mysql para a partição /home deve liberar espaço suficiente na partição / para permitir que o servidor mysql seja iniciado. Portanto, o procedimento deve ser o seguinte:

  1. Mova os dados mysql para a partição /home conforme descrito por @John WH Smith.
  2. Altere a variável datadir conforme descrito por @John WH Smith e execute o servidor mysql.
  3. Conecte-se ao servidor mysql como usuário root por um PMA, um mysql ou algum outro cliente.
  4. Limpe os logs binários com os comandos RESET MASTER ou PURGE BINARY LOGS TO (veja a documentação do mysql para detalhes).
  5. Pare o servidor mysql. Edite o arquivo de configuração do mysql. Lembre-se do valor da variável 'log_bin'. Ele contém um caminho e um nome de arquivos de log binários.
  6. Mova todos os arquivos binlog incluindo um índice binlog para o diretório /home/mysql/.
  7. Altere o valor da variável 'log_bin' para 'log_bin = /home/mysql/mysql-bin.log' e então inicie o banco de dados mysql.

informação relacionada