mysqld ya no se inicia debido a que el disco está lleno

mysqld ya no se inicia debido a que el disco está lleno

¿Cómo limpiar registros o encontrar archivos más grandes y reducir el espacio? Tampoco entiendo que 1.7T ni siquiera se use en este momento crítico.

Mysqld no se está ejecutando porque se utiliza el 99%.

# 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

Respuesta1

Los datos de MySQL se almacenan en /var/lib. No hay más espacio en /var. MySQL no se inicia. En realidad, bastante simple. Échale un vistazo /var/logy límpialo. Recomendaría algo como (eliminar todos gzlos archivos en /var/log):

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

Por supuesto, es posible que desees comprobar primero qué se está eliminando:

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

Se entregan 1,7 TB a /home. Sin embargo /varno lo es /home. Entonces /homeno se está utilizando. Sencillo también.

Claramente deberías haberte separado /varen una partición mucho más grande cuando configuraste tu sistema. Ahora, la mejor solución que puedo encontrar es mover el directorio de datos de MySQL a una partición más grande ( /home):

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

Si no desea utilizar un enlace, debe reconfigurar MySQL para utilizar el nuevo directorio de datos almacenado en /home. Edita /etc/mysql/my.cnfy cambia esto:

datadir = /var/lib/mysql

a esto:

datadir = /home/mysql

Ahora que MySQL tiene espacio disponible, debería iniciarse sin problemas. Sin embargo, realmente deberías reconsiderar tu esquema de partición si alojas una base de datos tan importante.

También es posible que desees investigar el contenido de tus registros, ya que las aplicaciones no deberían escribir tanto en ellos si todo va bien. Es posible que algo esté teniendo dificultades para funcionar correctamente en alguna parte.

Respuesta2

Este es un comando útil para encontrar los archivos más grandes:

du -ak /var | sort -nr | less

Uso:

du -akResume el uso del disco de todos ( -a) archivos en la /varpartición e imprime el tamaño en kilobytes ( -k).

sort -nrConcatena la lista de archivos y los ordena en orden -rnumérico ( ) inverso ( -n).

lessPaginará el resultado para que pueda ver los infractores más importantes en la parte superior y avanzar y retroceder en la lista.

Respuesta3

Me gustaría señalar que también podría ser un problema con los registros binarios de MySQL en lugar de con los archivos de la base de datos en sí. Los binlogs se colocan en el directorio /var/log/mysql de forma predeterminada en muchos casos y tienden a consumir varias veces más espacio en disco que los archivos de bases de datos. Esto se debe a que los binlogs almacenan todas las consultas de modificación de datos SQL (ACTUALIZACIONES, INSERTACIONES, etc.) para realizar un seguimiento de los cambios en los datos de una base de datos. Los binlogs no deben eliminarse directamente mediante el comando shell rm, solo mediante el comando mysql en un motor de base de datos en ejecución. Para hacer esto, el servidor MySQL debe estar activo. Creo que mover el directorio /var/lib/mysql a la partición /home debería liberar suficiente espacio en la partición / para que el servidor mysql pueda iniciarse. Entonces el procedimiento debería ser el siguiente:

  1. Mueva los datos de MySQL a la partición /home como lo describe @John WH Smith.
  2. Cambie la variable datadir como lo describe @John WH Smith y ejecute el servidor mysql.
  3. Conéctese al servidor mysql como usuario root mediante un PMA, mysql o algún otro cliente.
  4. Purgue los registros binarios con los comandos RESET MASTER o PURGE BINARY LOGS TO (consulte la documentación de mysql para obtener más detalles).
  5. Detenga el servidor mysql. Edite el archivo de configuración mysql. Recuerde el valor de la variable 'log_bin'. Contiene una ruta y un nombre de archivos de registro binarios.
  6. Mueva todos los archivos binlog, incluido un índice binlog, al directorio /home/mysql/.
  7. Cambie el valor de la variable 'log_bin' a 'log_bin = /home/mysql/mysql-bin.log' y luego inicie la base de datos mysql.

información relacionada