今早来公司发现zabbix监控没有数据,然后登陆server端,发现如下:
[root@1-199-HP~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/cciss/c0d0p1 9.5G 461M 8.6G 6% /
/dev/cciss/c0d0p7 91G 188M 86G 1% /data0
/dev/cciss/c0d1p1 133G 227M 126G 1% /data1
/dev/cciss/c0d2p1 133G 188M 126G 1% /data2
/dev/cciss/c0d3p1 133G 188M 126G 1% /data3
/dev/cciss/c0d0p6 7.6G 7.2G 0 100% /var
/dev/cciss/c0d0p5 7.6G 177M 7.1G 3% /tmp
/dev/cciss/c0d0p2 9.5G 4.3G 4.8G 48% /usr
tmpfs 2.0G 0 2.0G 0% /dev/shm
[root@153-199-HP08020033 ~]# find /var -size +104857600c -exec ls -lh {} \;
-rw-rw---- 1 mysql mysql Mar 27 09:54 /var/lib/mysql/ibdata1
判断:/var目录被写满
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
判断:数据库默认储存在/var/lob/mysql下,而/var 整个目录只有7.6G大小,很容易就被写满,
通过上网查 “/var/lib/mysql/ibdata1”了解到 ibdata1是mysql使用InnoDB引擎的时候需要使用的文件。
这个文件有的时候会变得很大,并且在你删除数据的时候,文件也不减小。
解决方案:
下面是处理超大ibddata1文件的步骤:
1. 对每张表使用单独的innoDB文件, 修改/etc/my.cnf文件
[mysqld]
innodb_file_per_table
目的很明确,我们可以单独删除每个文件
2. 导出所有的数据,重建数据库,然后恢复数据:
# /usr/bin/mysqldump -R -q --all-databases > /tmp/all.sql
# service mysqld stop
# rm -fr /var/lib/mysql/*
# /usr/bin/mysql_install_db
# service mysqld restart
# mysql < /tmp/all.sql
按照网上参考资料,由于经验不足,我在没有完全搞清楚的情况下进行了以上操作,结果下午数据一致在导入,而没有发现之前导出做备份的数据并不完全,有很多表没有导出,原本有3个多G的数据,只导出1.4G,最后导致数据库无法恢复,造成一个礼拜的数据就这样没了。。而且只能重新添加监控项。。
现在分析出现以上原因,目前已知我可以这样处理:
1、以后安装数据库,记得修改/etc/my.cnf配置文件如下:
[mysqld]
innodb_file_per_table=1
datadir=/data1/mysql #修改数据库存储路径
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid