通常情况下,当mysql数据库存储空间满了,就会导致网站内部沟通的异常,只能读出不能写入。具体表现为:一些源码程序的网站后台打不开,比如dede织梦程序;或者导致一些文章的资源发布失败,比如wordpress程序一般管理后台可以打开,但就是发布不了文章。当我们遇到管理后台突然打不开了,或者突然发布文章失败,就要有意识地怀疑是不是数据库满了还是连接出现了什么问题。
成都创新互联公司专业IDC数据服务器托管提供商,专业提供成都服务器托管,服务器租用,大邑服务器托管,大邑服务器托管,成都多线服务器托管等服务器托管服务。
操作系统:CentOS 6.2
现象:MySQL无法启动
查找问题发现:存放mysql数据分区100%
[root@jinniu-test3 mysql]# df -h
文件系统 容量 已用 可用 已用%% 挂载点
/dev/sda2 49G 49G 20K 100% /
tmpfs 933M 0 933M 0% /dev/shm
/dev/sda1 194M 31M 153M 17% /boot
/dev/sda5 219G 701M 207G 1% /opt
检查/etc/my.cnf,数据文件默认存放于/var/lib/mysql下
确认此文件夹确实过大
解决方案:转移存放目录,修改my.cnf或者软连接回来
[root@-_- ~]# cp -Rp /var/lib/mysql /opt/ --带权限拷贝整个目录
修改/etc/my.cnf配置datadir=/opt/mysql指向新位置
重启mysql发现无法启动
[root@-_- ~]# service mysqld start
MySQL Daemon failed to start.
正在启动 mysqld: [失败]
检查/var/log/mysqld.log文件最后
[root@-_- ~]# tail -20 /var/log/mysqld.log
...
130301 11:52:05 [Warning] Can't create test file /opt/mysql/-_-.lower-test
130301 11:52:05 [Warning] Can't create test file /opt/mysql/-_-.lower-test
...
网络搜索问题得知是这台机器启用SElinux 安全策略引起的
使用命令可以解决
[root@-_- ~]# chcon -R -t mysqld_db_t /opt/mysql
实在不行,禁用SElinux
执行:setenforce 0
当MySQL检测到磁盘空间满了,它会:
每分钟:检查空间是否得到释放,以便写入新数据。当发现有剩余空间了,就会继续写入数据,一切照旧。
每十分钟:如果还是发现没剩余空间,则会在日志中写入一条记录,报告磁盘空间满(这时候只写入几个字节还是够的)。
个例外的情况是:
当执行 REPAIR TABLE 或者 OPTIMIZE TABLE 操作时,或者执行完 LOAD DATA INFILE 或 ALTER TABLE 之后批量更新索引时,这些操作会创建临时文件,当执行这些操作过程中mysqld发现磁盘空间满了,就会把这个涉及到的表标记为crashed,删掉临时文件(除了 ALTER TABLE 操作,MySQL会放弃正在执行的操作,删除临时文件,释放磁盘空间)。
备注:当执行这些命令过程中mysqld进程被意外被杀掉的话,其所生成临时文件不会自动删除,需要手工删掉才能释放磁盘空间。
可以通过查看mysql进程来实现。 进入mysql命令行客户端,选择数据库后,执行show processlist命令: 多刷新几次,可以看到最后执行的SQL语句,以此判断什么查询在占用资源。 望采纳!
使用
unbuffered
cursor
可以避免内存问题。
cursor
默认使用
buffered
模式。这种模式会把所有结果集返回并载入内存。如果结果集很大的话,内存会爆。
unbuffered
cursor
是每次只将下一行结果返回,内存占用很小。不过这种模式缺点很多,所以没有作为默认的模式。