欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

drupal MySQL server has gone away cron 失败 Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 39947189 bytes) in database.mysql.inc on line 119 有大用

shiping1 的头像

1)我自己遇到的实际情况 是sessions表有问题 ,删掉 重新导一个空的好表就可以了
如何知道sessions有问题呢?
开启devel模块的在最下面显示sql执行语句的功能
看看哪个表执行的时间太长了,超过几千秒
肯定它有问题
(我发现了是sessions表有个insert语句 2千多秒)此时删掉
这个表 重建一个空的好表就可以了,以前也遇到其它出现问题的情况,也是
同样的方法解决的

2)我自己遇到第二个情况 Warning: MySQL server has gone away query: INSERT INTO watchdog
同时发现红色警告 Warning: MySQL server has gone away query: INSERT INTO cache_l10n_update
说明可能是 l10n_update 这个模块有问题 或与mysql版本有冲突(因为mysql导到本地就是好的) ,禁用它就好了
(也就以换一个版本试试,不过平忠没有试过)
还有两种方法  (1) 安装 db_tweaks 模块 if your provider allow you to change mysql session variables   db_tweaks 作用
(2)
//在database.mysql.inc 136行左右

在这一行 trigger_error(check_plain(mysql_error($active_db) ."\nquery: ". $query), E_USER_WARNING);之前
加上下面的代码
//var_dump(E_USER_WARNING);var_dump(check_plain(mysql_error($active_db)));var_dump($query);exit;
  if(preg_match("/MySQL server has gone away/",check_plain(mysql_error($active_db))))
  {
      if ($debug) {
        print '<p>Not attempting to store in DB: '. $query .'<br />'.'</p>';
      }
      return TRUE;
  }

不过 以上的两种法我都没有试过,应该有用

1)在php.ini中设置  memory_limit = 512M  
(因为在 settting.php中 ini_set('memory_limit', '512M'); 好像是不起作用,又好像是起作用的)
1)禁用cacherouter模块 去掉setting.php里的设置

1)禁用update status 模块
1)禁用themer devel 模块
一般情况下 只需要改 my.ini(my.cnf)  max_allowed_packet = 64M
1)实在不行的话,禁用devel 模块

如果不行 照着下面做 应该是好的
1)把setting.php  中 mysql连接 改成 mysqli连接
2)在my.ini(my.cnf)的文件中作如下更改

3)If you are in shared hosting then go to public html folder
you can find php.ini, and then edit
the   mysql.connect_timeout =60
change it to 120 or more
In my case setting mysqli.reconnect = On in php.ini helped.
以上全改了 好像就行了(总有一种方法合适)(这个改了 好像又有点问题)

1)如果以上还不行的话
把下面代码放到 index.php文件里
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);

再用浏览器执行 看哪里出了错

普通分类: