mysql触发器(trigger)操作memcache


本站和网页 http://blog.51yip.com/mysql/999.html 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

mysql触发器(trigger)操作memcache
海底苍鹰(tank)博客
--一步,二步,三步,N步,二行脚印
赞助本站
关于我
留言板
开发手册
linux命令
首页
<< php 记住密码自动登录
服务器架构方案二,支持百万级很轻松(改进版) >>
mysql触发器(trigger)操作memcache
张映 发表于 2010-09-04
分类目录: cache, mysql
标签:libmemcached, memcache, memcached, memc_delete, memc_replace, memc_set, mysql
对memcache的操作一般都是放程序里面去操作的,新增,更新,删除什么的。如果能利用mysql来对memcache进行操作,那就更好,代码端就会简单一点。但是利用mysql来操作memcache,比较适合实现简单的方式。下面说一下安装的过程和遇到的问题,在看安装过程的之前,我觉得应当先看一下,我安装时候所遇到的问题,这样你可以避免掉,少走一点弯路。
一,安装所要的软件
mysql5.1以前版本:http://downloads.mysql.com/archives/
libevent下载:wget http://www.monkey.org/~provos/libevent-1.2.tar.gz
libmemcached下载:http://download.tangent.org/
memcached下载:http://pecl.php.net/package/memcached
memcached_functions_mysql下载:http://download.tangent.org/
下载东西的时候,也是有技巧的,下载的东西,不要太新,太新了不然这个不行,那个也不行,太老了也不行,太老了,这个装不了,那个也装不了,所以要找一个稳定版的。一般正規软件的话,会标识basic版,stable版之类的.
二,mysql的安装
mysql的安装方式有很多,你可以用系统的软件管理包来安装,不同的linux版本,软件管理工具是不一样的。
redhat,centos 有yum,ubuntu 有apt get ,arch有pacman等。用系统自带的管理工具安装比较简单。如果是自己下载怎么安装的呢,mysql的官方网站提供了三种mysql的安装源码,一种是.rpm的,一种是二进制的,一种是要自己编译的。
1,用rpm来按装
rpm -i MySQL-server-VERSION.i386.rpm
rpm -i MySQL-client-VERSION.i386.rpm
2,二进制包进行安装
二进制包安装有一个缺点,就是要安装到什么地方,都是死的。安装过程中有问题的,查看一下是不是装了glibc,以及版本是不是太低了。
groupadd mysql
useradd -g mysql mysql
tar zxvf /path/to/mysql-VERSION-OS.tar.gz -C /usr/local
cd /usr/local
mv mysql-VERSION-OS ./mysql
cd /usr/local/mysql
scripts/mysql_install_db --user=mysql
chown -R mysql:mysql /usr/local/mysql
bin/mysqld_safe --user=mysql &
3,源码自己编译
groupadd mysql
useradd -g mysql mysql
tar zxvf /path/to/mysql-VERSION-OS.tar.gz
cd /mysql-VERSION-OS
./configure --prefix=/usr/local/mysql  //路径可自定义
make && make install
cp support-files/my-medium.cnf /etc/my.cnf
cd /usr/local/mysql
bin/mysql_install_db --user=mysql
chown -R mysql:mysql /usr/local/mysql
bin/mysqld_safe --user=mysql &
安装遇难问题:安装mysql至少要5.1版本以上的,服务器端,还是客户端都要,装完memcached_functions_mysql后,调用libmemcached模块时会报错的。
[root@BlackGhost sql]# /usr/local/mysql/bin/mysql <install_functions.sql
ERROR 1126 (HY000) at line 1: Can't open shared library 'libmemcached_functions_mysql.so' (errno: 22 /usr/local/mysql/lib/mysql/plugin/libmemcached_functions_mysql.so: undefined symbol: memcached_string_append)
上面是用mysqld_safe来启动mysql的,也可以用mysql.server来启动,它在/usr/local/mysql/share/mysql下面,你也可以把mysql.server考到开机启动的目录下面,并且重命名为httpd
[root@BlackGhost mysql]# ./mysql.server stop
Shutting down MySQL.. SUCCESS!
[root@BlackGhost mysql]# ./mysql.server start
Starting MySQL. SUCCESS!
二,关于libevent和memcached的安装
请参考:linux memcached 安装
三,libmemcached的安装
tar zxvf libmemcached-0.37.tar.gz
cd libmemcached-0.37
./configure --prefix=/usr/local/libmemcached37 --with-memcached
make && make install
安装遇到的问题:当时我下载的是libmemcached-0.42.tar.gz,安装memcached_functions_mysql过程中遇到这样一个问题
servers.c:263:28: error: 'memcached_st' has no member named 'hosts'
servers.c:264:28: error: 'memcached_st' has no member named 'hosts'
后来我在网上查一下,libmemcached-0.37没有这个问题,搞得我很无语,难道不是向下兼容的吗?
四,安装memcached_functions_mysql
tar xzf memcached_functions_mysql-0.9.tar.gz
cd memcached_functions_mysql-0.9
./configure --prefix=/usr/local/memcache_mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config --with-libmemcached=/usr/local/libmemcached37
make && make install
cp /usr/local/memcache_mysql/lib/libmemcached_functions* /usr/local/mysql/lib/mysql/plugin
别忘了加上--with-libmemcached=/usr/local/libmemcached37不然会报以下错误
checking for mysql_config... /usr/bin/mysql_config
checking for libmemcached >= 0.17... configure: error: libmemcached not found
创建mysql的memcache操作函数
mysql <memcached_functions_mysql-0.9/sql/install_functions.sql
注意路径不要错了。install_functions.sql定义了一些memcache的操作函数:如下
[root@BlackGhost zhangy]# cat memcached_functions_mysql-0.9/sql/install_functions.sql |awk '{if($0 !~ /^$/ ){print $3;} }
memc_add
memc_add_by_key
memc_servers_set
memc_servers_version
memc_server_count
memc_set
memc_set_by_key
memc_cas
memc_cas_by_key
memc_get
memc_get_by_key
memc_delete
memc_delete_by_key
memc_append
memc_append_by_key
memc_prepend
memc_prepend_by_key
memc_increment
memc_decrement
memc_replace
memc_replace_by_key
memc_servers_behavior_set
memc_servers_behavior_get
memc_behavior_set
memc_behavior_get
memc_list_behaviors
memc_list_hash_types
memc_list_distribution_types
memc_udf_version
memc_libmemcached_version
memc_stats
memc_stat_get_keys
memc_stat_get_value
到这儿安装基本上结束,下面我们来测试一下
五,测试
启动memcached:
/usr/local/bin/memcached -d -m 20 -u zhangy -p 12000 -P ./memcached.pid
/usr/local/bin/memcached -d -m 20 -u zhangy -p 13000 -P ./mem.pid
//创建一个测试有
drop table if exists urls;
create table urls (
id int(3) not null,
url varchar(64) not null default '',
primary key (id)
);
//连接memcched,根启动memcahed的端口要一样
select memc_servers_set('127.0.0.1:12000,127.0.0.1:13000');
//设置一个开始序列
select memc_set('urls:sequence', 0);
//创建插入memcached触发器
DELIMITER |
DROP TRIGGER IF EXISTS url_mem_insert |
CREATE TRIGGER url_mem_insert
BEFORE INSERT ON urls
FOR EACH ROW BEGIN
SET NEW.id= memc_increment('urls:sequence');
SET @mm= memc_set(concat('urls:',NEW.id), NEW.url);
END |
//创建更新memcached触发器
DROP TRIGGER IF EXISTS url_mem_update |
CREATE TRIGGER url_mem_update
BEFORE UPDATE ON urls
FOR EACH ROW BEGIN
SET @mm= memc_replace(concat('urls:',OLD.id), NEW.url);
END |
//创建删除memcached触发器
DROP TRIGGER IF EXISTS url_mem_delete |
CREATE TRIGGER url_mem_delete
BEFORE DELETE ON urls
FOR EACH ROW BEGIN
SET @mm= memc_delete(concat('urls:',OLD.id));
END |
DELIMITER ;  //写触发器的时候,我们会用;mysql执行分割符也是;所以我们在写触发器或者是存储过程的时候都会改变一下,例如:DELIMITER |
//插入一些测试数据
insert into urls (url) values ('http://google.com');
insert into urls (url) values ('http://baidu.com/');
insert into urls (url) values ('http://www.51yip.com/');
insert into urls (url) values ('http://blog.51yip.com/');
insert into urls (url) values ('http://51yip.com');
insert into urls (url) values ('http://mysql.com');
select * from urls;
//将插入的6条数据显示出来,下面的显示和删除也是一样的不多说了。
select memc_get('urls:1');
select memc_get('urls:2');
select memc_get('urls:3');
select memc_get('urls:4');
select memc_get('urls:5');
select memc_get('urls:6');
update urls set url= 'http://mysql.com/sun' where url = 'http://51yip.com';
select url from urls where url = 'http://51yip.com/manual';
select memc_get('urls:6');
delete from urls where url = 'http://blog.51yip.com/';
select * from urls where url='http://blog.51yip.com/';
select memc_get('urls:4');
我以前写过一篇:关于memcache的key的管理,徘徊中里面提到对单表进行缓存,可以完全配合这篇文章所说的东西。如果有多表联合查询的话,在用触器就比较麻烦了,还不如放到程序里去执行
转载请注明作者:海底苍鹰地址:http://blog.51yip.com/mysql/999.html
<< php 记住密码自动登录
服务器架构方案二,支持百万级很轻松(改进版) >>
相关文章
基于libmemcached,php扩展memcached的安装 关于memcache的key的管理,徘徊中 linux memcache 安装 canal 同步mysql数据到clickhouse 忽略delete update clickhouse,tidb,mysql 读取速度对比 canal 同步mysql数据到clickhouse clickhouse MaterializeMySQL 同步 mysql 数据 mysql 同步数据到 elasticsearch zabbix 监控 dm 同步 zabbix MySQL: Service is down
15 条评论
天黑了 留言 (2010年9月4日 10:36 ):
配合lib_mysqludf_json用更加的强大
张映 留言 (2010年9月4日 10:36 ):
是的,哈哈
Han 留言 (2010年9月15日 08:07 ):
传说中的大牛?可以认识一下吗?加我QQ 77620429
张映 留言 (2010年9月15日 08:38 ):
我是代码农民工,公司上不了QQ
Zhenyang 留言 (2010年12月30日 10:22 ):
你好,请问下面的问题,最后是怎么解决的?
Can’t open shared library ‘libmemcached_functions_mysql.so’ (errno: 22 /usr/local/mysql/lib/mysql/plugin/libmemcached_functions_mysql.so: undefined symbol: memcached_string_append
张映 留言 (2011年4月12日 13:02 ):
/usr/local/mysql/lib/mysql/plugin有/usr/local/mysql/lib/mysql/plugin/libmemcached_functions_mysql.so有这个插件吗?如果有,在确认一下,你用的什么版本的libmemcached,如果太高了有问题,可能根电脑32,64位有关
jiangcl 留言 (2011年4月13日 03:40 ):
这个问题也困扰了我2天,32位64位系统都报上面的错误,后来从国外的网站上看到libmemcached-0.34可以,经测试,果然OK了。mysql网站也看到了这个bug的报告,希望以后的版本能解决这个问题。
你的blog很好,以后常来学习!等你更好的文章!
李明 留言 (2011年4月13日 05:02 ):
张映大哥,这问题确实存在,我在网上找了N 天了,很多人都没解决办法
错误如下,在线等
ERROR 1126 (HY000) at line 1: Can't open shared library 'libmemcached_functions_mysql.so' (errno: 0 /usr/local/mysql/lib/plugin/libmemcached_functions_mysql.so: undefined symbol: memcached_string_append)
排除你所说的,libmemcached_functions_mysql.so有这个文件,
测试环境:centos 5.5 32位, libmemcached-0.37
jiangcl 留言 (2011年4月14日 03:32 ):
libmemcached-0.37 换成libmemcached-0.34 就可以了。
张映 留言 (2011年4月19日 12:54 ):
我在archlinux下,用的就是0.37
jiangcl 留言 (2011年4月22日 06:56 ):
我的是Red Hat Enterprise Linux Server release 5.3 intel64位的。 欢迎大家一起探讨,解决问题。
taowuyang 留言 (2011年8月11日 06:51 ):
装mysql至少要5.1版本以上的,服务器端,还是客户端都要,装完memcached_functions_mysql后,调用libmemcached模块时会报错的。
[root@BlackGhost sql]# /usr/local/mysql/bin/mysql <install_functions.sql
ERROR 1126 (HY000) at line 1: Can't open shared library 'libmemcached_functions_mysql.so' (errno: 22 /usr/local/mysql/lib/mysql/plugin/libmemcached_functions_mysql.so: undefined symbol: memcached_string_append)
我的是5.1的版本 但还是会报错。
张映 留言 (2011年8月13日 02:47 ):
个人感觉mysql的这个插件,还不成熟,根位数,linux系统,mysql版本,libmemcached版本都有关系。
zhiqli 留言 (2011年9月22日 03:34 ):
我遇到一个问题,就是在批量插入数据的时候,总是时不时的和数据库失去连接,不知兄弟们是否遇到过这样的问题,纠结好久了
zhiqli 留言 (2011年9月22日 03:34 ):
我这个问题比较急,希望能和博主交流一下
留下评论
点击这里取消回复
抱歉,发表回复评论您必须登录。
分类目录
apache/nginx (36)
cache (21)
clickhouse (14)
drupal (7)
eclipse (8)
elasticsearch (18)
google (3)
hadoop/spark/scala (96)
html/css (12)
java/android (14)
linux (87)
mariadb (2)
mysql (74)
nodejs/vue/js/jquery (72)
nosql (39)
oracle (9)
pgsql (8)
php (107)
seo (16)
shell (11)
smarty (5)
tidb (21)
wordpress (13)
云计算 (22)
双眼看社会 (13)
技术其他 (41)
服务器相关 (136)
系统安全 (7)
最近文章
tidb 误删库,表,数据恢复
ticdc 同步有规律的数据库
canal 同步mysql数据到clickhouse 支持update delete truncate
canal 同步mysql数据到clickhouse 忽略delete update
tidb 扩容和缩容
clickhouse,tidb,mysql 读取速度对比
clickhouse right join 问题
canal 同步mysql数据到clickhouse
nginx clickhouse 反向代理
clickhouse MaterializeMySQL 同步 mysql 数据
最近评论和留言banner 在 awk是命令还是编程语言 上的评论lin 在 hadoop 查看 mr日志报错 上的评论ccc 在 cdh hive 2.1.1 升级到 2.3.4 上的评论简简单单 在 关于我 上的评论www 在 clickhouse,tidb,mysql 读取速度对比 上的评论zzq 在 mysql分表,分区的区别和联系 上的评论Bill 在 怎么在网上找到你要的信息 上的评论11 在 留言板 留言了Michael 在 canal 同步mysql数据到clickhouse 支持update delete truncate 上的评论我兜里有糖 在 linux postgresql 安装配置详解 上的评论
友情链接
Enjoy Diy
IT热血青年
Magento架构师
爱积累爱分享
简明现代魔法
登录
登录
2010 海底苍鹰(tank)博客 ٠ Powered by 51yip.com ٠ 沪ICP备16002029号-1

Copyright ©uecom 京ICP备18064371号-1 IPV6
2024-03-29 04:53:17
uenu.com
10.0.12.16