meta data de esta página
  •  

¡Esta es una revisión vieja del documento!


Problemas con la BDD de Zabbix

Liberar espacio, fichero ibdata muy grande

A veces en instalaciones de zabbix que llevan un tiempo en funcionamiento y que se han ido actualizando nos econtramos que el fichero ibdata1 es de un tamaño enorme. Eso es debido a que en MySQL cuando usamos el motor de bases de datos InnoDB, todas las tablas e indices se almacenan bajo la tabla system de MySQL, que se corresponde con el fichero ibdata1, que se encuentra en la carpeta /var/lib/mysql

Para colmo de males cuando se elimina una tabla o toda una base de datos, el espacio que ocupaban en el fichero ibdata1 no se recupera.

La solución a dicho problema podemos hacer dos cosas: cambiar el motor de bases de datos a MyISAM o bien realizar un volcado completo de todas las bases de datos, reiniciar el servidor y recuperar el volcado y reconfigurar el servidor para que las tablas innodb se almacenen en ficheros independientes, evitando de este modo que vuelva a aparecer el problema.

Yo he optado por el segundo método, para ello he seguido estos pasos:

  • Lo primero es tener una copia de seguridad de la base de datos

Paramos el servidor de zabbix

1
systemctl stop zabbix-server
y hacemos la copia
1
mysqldump -u user -p'lapassword' --single-transaction --quick nombrebasededatosacopiar | gzip > backup-nombrebasededatos-fecha.sql.gz
o si tenemos más bases de datos
1
mysqldump -u usuario -ptmppassword --all-databases > backup-fecha.sql

tampoco está de más hacer una copia de los ficheros existentes dentro de /var/lib/mysql

- Paramos el servidor de BDD

1
service mariadb stop

  • Borramos el archivo ibdata1 y sus logs
    1
    2
    3
    rm -rf /var/lib/mysql/ibdata1
    rm -rf /var/lib/mysql/ib_logfile0
    rm -rf /var/lib/mysql/ib_logfile1
  • Editamos el fichero /etc/my.cnf y añadimos la siguiente línea bajo la sección [mysqld]

1
innodb_file_per_table=1

  • Iniciamos la BDD
    1
    service mariadb start
  • Borramos y volvemos a crear la base de datos
    1
    2
    mysql -u user -p'lapassword' -e "drop database zabbix;"
    mysql -u user -p'lapassword' -e "create database zabbix  character set utf8 collate utf8_bin;"
  • Salimos de MySQL con CTRL+D. y desde la línea de comando ejecutamos el siguiente comando para importar la copia que había creado:

1
2
gzip -d  backup-nombrebasededatos-fecha.sql.gz
mysql -u user -p'lapassword' nombrebasededatos <  backup-nombrebasededatos-fecha.sql

  • Iniciampos el servicio de zabbix
    1
    systemctl start zabbix-server

Referencias :

Reparar error mysql ‘table’ doesn’t exist in engine

si nos aparece este error y no podemos hacer un copia de seguridad de nuestra BDD, debemos de ir a la ubicación de nuestra base de datos /var/lib/mysql/zabbix y renombrar todos los ficheros con extensión frm que aparecen.

En último extremo y si no tenemos una copia de la BDD podemos intentar recuperar la misma desde lo ficheros frm con el siguiente proceso

Solucionar problemas de corrupción

Si tenemos problemas de que la base de datos de zabbix se queda incoherente, normalmente será porque la tabla history_uint es muy grande o está corrupta. Para solucionarlo podemos hacer lo siguiente:

1
2
3
4
5
6
7
mysqlq -p
mysql> use zabbix;
mysql> TRUNCATE TABLE history;
mysql> TRUNCATE TABLE history_str;
mysql> TRUNCATE TABLE history_uint;
mysql> TRUNCATE TABLE history_log;
mysql> TRUNCATE TABLE history_text;
Cerrar mysql y ejecutar
1
mysqlcheck -u root -p --auto-repair --check --all-databases

Borrar registros huérfanos

Referencias