gearman mysql持久化

gearman 创建Mysql持久化队列的方式如下:

1. 登入mysql命令行,运行:

create database gearman;

2. 启动gearman,命令如下:

/usr/local/gearman/sbin/gearmand -p 4730 -L 0.0.0.0 --log-file=/tmp/gearmand-4730.log --pid-file=/tmp/gearmand-4730.pid -q MySQL --mysql-host=localhost --mysql-user=root --mysql-db=gearman --verbose DEBUG-d

具体的参数,根据自己的服务器状况去修改就行了。

3. 再次登入mysql命令行,执行:

use gearman;show tables;

就可以看到下面多了个“gearman_queue”的表。

这样,gearman就变成了持久化的方式。

=============================================================================

gearman用mysql持久化之后,其实会带来一些问题。

1. 每个任务都会写入数据库,这样会带来磁盘IO的损耗,并且gearman的性能瓶颈又多了一个可能,就是由数据库引起的性能问题。

2. mysql有个“wait_timeout”的参数,在mysql命令行中运行

show variables like "%timeout%";

可以看到wait_timeout的值,默认是28800。也就是说,如果一个mysql的连接,超过28800s没有任何响应,就会断开。

3. gearman持久化的方式,如果超过了mysql的wait_timeouts的时间没有任何响应,和数据库的连接就会被mysql断开,而且gearman目前是没有mysql重新连接的,结果就是,会导致如下错误,必须重启gearman才能重新正常工作。

gearman报错

ERROR 2014-04-01 02:10:02.897899 [ proc ] mysql_stmt_execute failed: -> libgearman-server/plugins/queue/mysql/queue.cc:357
ERROR 2014-04-01 02:10:02.897910 [ proc ] gearman_server_job_add gearman_server_run_command(QUEUE_ERROR) -> libgearman-server/server.cc:301

所以,gearman持久化方式带来的缺点显而易见,该方式下,要避免gearman对mysql连接超时断开,可以将mysql的wait_timeout参数改大。

或者,直接放弃用mysql的持久化方式。

http://www.ttlsa.com/gearman/gearman-mysql/

http://huoding.com/2012/10/30/196

http://www.linuxeye.com/database/mysql-replication-to-redis-by-gearman.html

时间: 2024-10-14 18:12:49

gearman mysql持久化的相关文章

【未完】Gearman分布式处理,mysql队列详解

参考文档: 1-Gearman分布式任务处理系统(七)问题研究与性能优化 http://blog.csdn.net/jiao_fuyou/article/details/16335857 2-Gearman的使用 http://www.cnblogs.com/cocowool/archive/2011/08/18/2145144.html 3-gearman mysql持久化 http://www.cnblogs.com/youxin/p/4138834.html 4-gearman+mysql

通过Gearman实现MySQL到Redis的数据同步

对于变化频率非常快的数据来说,如果还选择传统的静态缓存方式(Memocached.File System等)展示数据,可能在缓存的存取上会有很大的开销,并不能很好的满足需要,而Redis这样基于内存的NoSQL数据库,就非常适合担任实时数据的容器. 但是往往我们又有数据可靠性的需求,采用MySQL作为数据存储,不会因为内存问题而引起数据丢失,同时也可以利用关系数据库的特性实现很多功能. 所以就会很自然的想到是否可以采用MySQL作为数据存储引擎,Redis则作为Cache.而这种需求目前还没有看

sentinel控制台监控数据持久化【MySQL】

根据官方wiki文档,sentinel控制台的实时监控数据,默认仅存储 5 分钟以内的数据.如需持久化,需要定制实现相关接口. https://github.com/alibaba/Sentinel/wiki/在生产环境中使用-Sentinel-控制台 也给出了指导步骤: 1.自行扩展实现 MetricsRepository 接口: 2.注册成 Spring Bean 并在相应位置通过 @Qualifier 注解指定对应的 bean name 即可. ----------------------

使用gearman进行异步的邮件或短信发送

一.准备工作 1.为了防止,处理业务途中出现的宕机,请配置好gearman的持久化方式.2.使用gearmanManager来管理我们的worker脚本,方便测试. 上述两条请看我之前写的两篇文章 二.编写测试脚本 sendEmail.php代码如下: <?php //注意函数名与文件名相同 function sendEmail($job) { $workId = uniqid(); //workload()获取客户端发送来的序列化数据 $data = json_decode($job->wo

activimq消息队列持久化配置

activimq持久化常用的有三种方式:1.文件持久化 2.mysql持久化 3.oracle持久化 在activimq的配置文件中默认开启了文件持久化 同时我们需要修改一行代码: 这样在activimq重启之后就不会有消息丢失了 如果要使用mysql持久化的话需要修改配置文件 <persistenceAdapter> <jdbcPersistenceAdapter dataSource="#mysql-ds"/> </persistenceAdapter

ActiveMQ持久化及测试(转)

转:http://blog.csdn.net/xyw_blog/article/details/9128219 ActiveMQ持久化 消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息中心重新启动后仍然可以将消息发送出去,如果把这种持久化和ReliableMessaging结合起来应该是很好的保证了消息的可靠传送. 消息持久性的原理很简单,就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据

ActiveMQ持久化方式

消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息中心重新启动后仍然可以将消息发送出去,如果把这种持久化和ReliableMessaging结合起来应该是很好的保证了消息的可靠传送. 消息持久性的原理很简单,就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件.内存数据库或者远程数据库等,然后试图将消息发送给接收者,发送成功则将消息从存储中删除,失败则继续尝试.消息中心启动以后首先要检查制

Activemq消息持久化

官方文档: http://activemq.apache.org/persistence.html ActiveMq持久化相关配置:/usr/local/apache-activemq-5.11.1/conf/activemq.xml 官方默认的持久化为Kahadb: <persistenceAdapter> <kahaDB directory="${activemq.data}/kahadb" </persistenceAdapter> 可以稍作调优:

mysql 长连接

PHP的MySQL持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之.这到底是为啥么.近距离观察后发现,这家伙也不容易啊,要看Apache的脸色,还得听MySQL指挥. 对于作为Apache模块运行的PHP来说,要实现MySQL持久化连接,首先得取决于Apache这个web服务器是否支持Keep-Alive. Keep-Alive Keep-Alive是什么东西?它是http协议的一部分,让我们复习一下没有Keep-Alive的http请求,从客户在浏览器输入一个有 效url地址开始,浏