今早来公司发现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
2、或者像今天早上出现这样的情况直接做个软连接,将数据库存储路径连接到/data1目录下就可以解决
如以上可以:ln -s /data1/var  /var   ???
解释:
ln -s a b 中的 a 就是源文件,b是链接文件名,其作用是当进入b目录,实际上是链接进入了a目录
如上面的示例,当我们执行命令   cd /var/的时候  实际上是进入了 /data1/var/
值得注意的是执行命令的时候,应该是a目录已经建立,目录b没有建立。我最开始操作的是也把b目录给建立了,结果就不对了
也就是所执行ln -s /data1/var  /var 是不行的!