PDOException: SQLSTATE[HY000]: General error: 3 Error writing file '/tmp/MYHKgYpv' (Errcode: 28)

PDOException: SQLSTATE[HY000]: General error: 3 Error writing file '/tmp/MYHKgYpv' (Errcode: 28)

我已经安装了 Visitor 模块 Drupal 7。我已经使用 www.domain.com/visitors 查看了报告。所有报告都运作良好。但是当我查看用户 activity 报告时,它显示以下错误。

PDOException: SQLSTATE[HY000]: General error: 3 Error writing file '/tmp/MYHKgYpv' (Errcode: 28): SELECT u.name AS name, u.uid AS uid, COUNT(DISTINCT v.visitors_id) AS hits, COUNT(DISTINCT n.nid) AS nodes, COUNT(DISTINCT c.cid) AS comments FROM {users} u LEFT OUTER JOIN {visitors} v ON u.uid=v.visitors_uid LEFT OUTER JOIN {node} n ON u.uid=n.uid LEFT OUTER JOIN {comment} c ON u.uid=c.uid WHERE (visitors_date_time BETWEEN :db_condition_placeholder_0 AND :db_condition_placeholder_1) GROUP BY u.name, u.uid, v.visitors_uid, n.uid, c.uid ORDER BY hits DESC LIMIT 10 OFFSET 0; Array ( [:db_condition_placeholder_0] => 1451606400 [:db_condition_placeholder_1] => 1452556799 ) in PagerDefault->execute() (line 79 of /home/legalmon/public_html/includes/pager.inc).

我该如何解决这个问题?

您应该在触发“USER REPORT 查询”时不断检查您的 /tmp 文件夹大小。

如果 /tmp 目录被 100% 使用,您将遇到此错误。

解决方案是将一些 GB 的文件挂载到 /tmp 目录或设置 MySQL tmp 的新位置。

要设置新位置:

Create a directory anywhere you have enough space(can be the "/" root directory)

# mkdir /home/mysqltmp

Give write permissions

# chmod 1777 /home/mysqltmp

Open MY.CNF File

# /etc/my.cnf 

Add below line under the [mysqld] section and save the file

# tmpdir=/home/mysqltmp

Restart MySQL

# /etc/init.d/mysql restart

Check new location

# mysqladmin var | grep tmpdir

This should show following return.

| slave_load_tmpdir                       | /home/mysqltmp
| tmpdir                                  | /home/mysqltmp

完成!!

尝试刷新页面。

首先,检查 df -h 存储设备是否快满了,如果是这样,那么您需要释放一些 space。

删除旧数据库可能是解决方案,但如果您在清除后没有看到免费 space 发生变化,那么您需要执行以下操作:

一些 MySQL 配置存在一个常见问题,其中所有数据库都存储在一个名为 ibdata1 的文件中。发生的情况是,当您删除旧数据库时,此文件 不会 自动收缩。

检查 /var/lib/mysql/ 中文件的大小,如果您发现 ibdata1 大小在删除一些旧数据库后没有改变,那么您需要做一些清理工作。

步骤:

  1. 备份您的数据库
  2. 删除您的数据库
  3. 删除 ibdata1 使用 rm /var/lib/mysql/ibdata1
  4. 使用 rm /var/lib/mysql/ib_logfile*
  5. 删除 ib_logfile(s)
  6. service mysql restart
  7. 重新启动 MySQL
  8. 导入备份的数据库。

现在,/tmp 应该有足够的 space 来增长和执行您的查询!

祝你好运!

备注:

有关清除的更多详细信息,请在此处访问 John P 的回答: