mysqld não está mais iniciando devido ao disco cheio [duplicado]

0

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

O mysqld não está em execução 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
    
por YumYumYum 09.10.2014 / 14:39

3 respostas

4

Os dados do MySQL são armazenados em /var/lib . Não há mais espaço em /var . O MySQL não inicia. Muito simples, na verdade. Dê uma olhada em /var/log e limpe-a. Eu recomendaria algo como (excluir todos os arquivos gz em /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 é dado a /home . No entanto, /var não é /home . Portanto, /home não está sendo usado. Simples também.

Você claramente deve ter separado /var em uma partição muito maior quando configurou seu sistema. Agora, a melhor solução que posso encontrar é 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 em /home . Edite /etc/mysql/my.cnf e altere isso:

datadir = /var/lib/mysql

para isso:

datadir = /home/mysql

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

Você também pode querer investigar o conteúdo de seus registros, já que os aplicativos não devem escrever muito para eles se tudo estiver indo bem. Algo pode estar lutando para funcionar adequadamente em algum lugar.

    
por 09.10.2014 / 14:49
3

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

du -ak /var | sort -nr | less

Uso:

du -ak resume o uso do disco de todos os arquivos ( -a ) na partição /var e imprime o tamanho em kilobytes ( -k ).

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

less Paginará a saída para que você possa ver os maiores infratores na parte superior e voltar e avançar pela lista.

    
por 09.10.2014 / 14:47
1

Eu gostaria de notar que ele também poderia ser um problema com os logs binários do mysql, e não com os próprios arquivos de banco de dados. Os binlogs são colocados no diretório / var / log / mysql por padrão em muitos casos e eles tendem a consumir pouco mais espaço em disco do que os arquivos de banco de dados. É porque os binlogs armazenam todas as consultas de modificação de dados SQL (UPDATEs, INSERTs, etc.) para acompanhar as alterações de 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 tem que 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 tornar o servidor mysql capaz de iniciar. Então, o procedimento deve ser o seguinte:

  1. Mova os dados do 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 o 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 (consulte a documentação do mysql para obter 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, em seguida, inicie o banco de dados mysql.
por 09.10.2014 / 15:47