社区
基础编程
帖子详情
pcntl多进程 mysql has gone away
szzfl
2012-03-01 08:51:56
如题,用pcntl产生多进程,数据库连接生成器是单例,父子进程间很容易出现mysql has gone away的现象,不知道有没有经验的人碰过这样的问题。
...全文
114
8
打赏
收藏
pcntl多进程 mysql has gone away
如题,用pcntl产生多进程,数据库连接生成器是单例,父子进程间很容易出现mysql has gone away的现象,不知道有没有经验的人碰过这样的问题。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
coder
2012-03-02
打赏
举报
回复
[Quote=引用 6 楼 dream1206 的回复:]
http://blog.csdn.net/brightsnow/article/details/3997705
[/Quote]
主要是数据库的配置问题。
szzfl
2012-03-01
打赏
举报
回复
不管如何,谢谢你,我明天去公司也自己再研究一下。
改一下昵称
2012-03-01
打赏
举报
回复
http://blog.csdn.net/brightsnow/article/details/3997705
改一下昵称
2012-03-01
打赏
举报
回复
抱歉其实我也没有实际应用过pcntl做项目。。只能建议你google一下各种可能,等待高手
szzfl
2012-03-01
打赏
举报
回复
不好意思,忘了在子进程后面加个exit,不然父子进程会以深度交叉的方式循环运行,结果肯定死机,都是我的示范代码没写好的错。当然我要问的不是这个问题,还是那个mysql has gone away的问题。
while(true){
$db = system::getdatabase(); //获取数据库连接 单例
$records = $db->find();
foreach($records as $record){
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
} else {
//这里子进程处理可能会用到数据库连接 比方
$db = system::getdatabase();
$db->delete();
exit(0);
}
}
sleep(1);
}
改一下昵称
2012-03-01
打赏
举报
回复
我是觉得是连接数过多的原因,因为子执行完
$db = system::getdatabase();
$db->delete(); // 这个差不多是断开连接的操作吧?
还会返回while循环再走父走过的路,因此程序陷入了死循环。
我修改了部分代码试着运行了一下,结果悲摧的直接死机了
szzfl
2012-03-01
打赏
举报
回复
大致如:
while(true){
$db = system::getdatabase(); //获取数据库连接 单例
$records = $db->find();
foreach($records as $record){
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
} else {
//这里子进程处理可能会用到数据库连接 比方
$db = system::getdatabase();
$db->delete();
}
}
sleep(1);
}
会造成父或者子进程出现:mysql has gone away,如此中断。子的还好,父的话就会循环程序中断,跳出,因为我的数据库错误是向外抛错误的。
改一下昵称
2012-03-01
打赏
举报
回复
pcntl_fork()后再分别连接数据库还是?
php
pc
ntl
_fork
mysql
server has
gone
away
php
pc
ntl
_fork
mysql
server has
gone
away
php
多进程
pc
ntl
_fork导致
Mysql
have
gone
away
问题解决
每个子进程都需要一个自己的数据库连接 代码如下。
php 脚本连接出现General error: 2006
MySQL
server has
gone
away
错误原因排查
exception:HY000:SQLSTATE[HY000]: General error: 2006
MySQL
server has
gone
away
首先说明 我的是后台php以守护进程的形式运行的 第一反应 以为是
mysql
挂了 看来下
mysql
也是ok的,带着不解百度了下,...
php
多进程
下
mysql
连接
gone
away
php 在命令行模式下启动
多进程
如果父进程有sql查询,可能会导致子进程里面的sql查询 报错 General error: 2006
MySQL
server has
gone
away
主要是主进程创建了sql连接,查询完毕后退出了,子进程会复用父进程的...
MySQL
server has
gone
away
本文目的 ...此脚本采用了PHP的
多进程
(
pc
ntl
_fork),...可是在工作子进程中,访问myql时一直报错,通过
mysql
_error返回的信息却是冷冷的一句话“
MySQL
server has
gone
away
”。简单说一句自己挂掉了就完事,太不负责
基础编程
21,886
社区成员
140,364
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章