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/log
e limpe. Eu recomendaria algo como (excluir todos gz
os 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 /var
não é /home
. Então /home
não está sendo usado. Simples também.
Você claramente deveria ter se separado /var
em 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.cnf
e 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 -ak
resume o uso do disco de todos -a
os arquivos ( ) na /var
partição e imprime o tamanho em quilobytes ( -k
).
sort -nr
Concatena a lista de arquivos e os classifica em ordem invertida ( -r
) numérica ( -n
).
less
Paginará 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:
- Mova os dados mysql para a partição /home conforme descrito por @John WH Smith.
- Altere a variável datadir conforme descrito por @John WH Smith e execute o servidor mysql.
- Conecte-se ao servidor mysql como usuário root por um PMA, um mysql ou algum outro cliente.
- Limpe os logs binários com os comandos RESET MASTER ou PURGE BINARY LOGS TO (veja a documentação do mysql para detalhes).
- 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.
- Mova todos os arquivos binlog incluindo um índice binlog para o diretório /home/mysql/.
- 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.