设为首页 收藏本站
查看: 1309|回复: 0

[经验分享] 将MySQL数据映射到Memcached中[转载]

[复制链接]

尚未签到

发表于 2015-9-1 11:24:26 | 显示全部楼层 |阅读模式
  
  本文讨论了Mysql和memcached的联合应用,未来的趋势已经逐渐的明了,两者的联合可以使Mysql更加强壮。
  
  差不多在一年前,写过一篇文章介绍将MySQL数据映射到Memcached,当时MySQL和Memcached Functions for MySQL都还不够成熟,时过一年,Memcached Functions for MySQL升级到了0.8版本,而MySQL也发布了GA版本,加上很多朋友反应前一篇文章中的实现他们因种种原因没能成功,于是便有了这篇文章,就当是上一篇文章的升级版本吧。
  测试环境在Linux下进行,版本系统为CentOS5.
以下为相关软件,包括其版本和下载地址:
  mysql-5.1.30 下载
memcached-1.2.6 下载
libevent-1.4.7-stable 下载
memcached_functions_mysql-0.8 下载
libmemcached-0.26 下载
  
编译安装MySQL,安装因个人细好而定,省略许多与测试无关的编译细节及参数。





[iyunv@localhost ~]#tar xzf mysql-5.1.30.tar_001.gz
[iyunv@localhost ~]#cd mysql-5.1.30
[iyunv@localhost ~]#./configure --prefix=/usr/local/mysql51
[iyunv@localhost ~]#make
[iyunv@localhost ~]#make install
[iyunv@localhost ~]#./scripts/mysql_install_db --user=mysql --skip-name-resolve
[iyunv@localhost ~]#/usr/local/mysql51/bin/mysqld_safe
  省略列出安装memcached和libevent的相关命令,具体可按照实际情况安装,测试时我将libevent默认安装,memcached安装于/usr/local/memcached目录下。
启动memcached.





/usr/local/memcached/bin/memcached -d -m 50 -u root -p 11211
  编译安装libmemcache.





[iyunv@localhost ~]#tar xzf libmemcached-0.26.tar.gz
[iyunv@localhost ~]#cd libmemcached-0.26
[iyunv@localhost ~]#./configure --with-memcached=/usr/local/memcached/bin/memcached
[iyunv@localhost ~]# make && make install
  编译安装Memcache UDFs for MySQL.





[iyunv@localhost ~]# tar xzf memcached_functions_mysql-0.8.tar.gz
[iyunv@localhost ~]# cd memcached_functions_mysql-0.8
[iyunv@localhost ~]# ./configure --with-mysql-config=/usr/local/mysql51/bin/mysql_config
[iyunv@localhost ~]# make && make install
  编译完成后将编译好的库文件复制到mysql的插件目录下,以便于加载使用。





cp /usr/local/lib/libmemcached_functions_mysql* /usr/local/mysql51/lib/mysql/plugin/
  进入memcached_functions_mysql的源码目录,在目录下有相关添加UDF的SQL文件用于初始化。





[iyunv@localhost ~]# mysql <sql/install_functions.sql
  注:如果对这些UDFs不熟悉或者不懂,可进行源码目录参看README,里边有相应的说明。
  至此,相关软件的编译和安装完成,进行测试,我们要达到的目的是当MySQL有新记录插入时,同时插入到Memcached中,当记录更新时同步更新Memcached中的记录,删除时同时也删除Memcached相关的记录,为此创建三个触发器来实现,如果对MySQL的触发程序不熟悉可以参考MySQL手册第21章,下面SQL中的memcached为需要操作的表名,SQL如下:





#插入数据时插入Memcached
create trigger mysqlmmci after insert on memcached for each row set @tmp = memc_set(NEW.key, NEW.value);
#更新记录时更新Memcached
create trigger mysqlmmcu after update on memcached for each row set @tmp = memc_set(NEW.key, NEW.value);
#删除记录时删除Memcached相应的记录
create trigger mysqlmmcd before delete on memcached for each row set @tmp = memc_delete(OLD.key);
  以下为测试记录,在对MySQL操作的同时操作Memcached来查看情况,当然你也可以在启动Memcached的时候带-vv参数来查看相关信息.
  MySQL操作相关的记录:





[iyunv@localhost ~]#mysql -S /tmp/mysql51.sock
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.1.30 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use test;
Database changed
mysql> create table `memcached` (`key` varchar(10), `value` varchar(100));                                    
Query OK, 0 rows affected (0.00 sec)
mysql> create trigger mysqlmmci after insert on memcached for each row set @tmp = memc_set(NEW.key, NEW.value);
Query OK, 0 rows affected (0.00 sec)
mysql> create trigger mysqlmmcu after update on memcached for each row set @tmp = memc_set(NEW.key, NEW.value);
Query OK, 0 rows affected (0.00 sec)
mysql> create trigger mysqlmmcd before delete on memcached for each row set @tmp = memc_delete(OLD.key);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into memcached values("keyi", "valuei"),("keyu","valueu"),("keyd", "valued");                                         
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> update memcached set `value`="update" where `key`="keyu";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> delete from memcached where `key`="keyd";
Query OK, 1 row affected (0.00 sec)
mysql> quit
Bye
  Memcache查看时的记录:





[iyunv@localhost ~]#telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get keyi
VALUE keyi 0 6
valuei
END
get keyu
VALUE keyu 0 6
valueu
END
get keyd
VALUE keyd 0 6
valued
END
get keyu
VALUE keyu 0 6
update
END
get keyd
END
quit
Connection closed by foreign host.
  至此,我们基本实现的将MySQL的数据同步到Memcached中,性能暂时还没有测试,当然上面只是简单的实现的数据映射的功能,如果在实现的生产环境中,则需要考虑名字空间,高可靠性的问题,这些都是可以通过数据库名-表名-关键字的方面能达到KEY唯一的目的,而高可靠性则是一个比较大的问题。
  原文地址:http://www.libing.name/2009/02/06/mysql-map-data-to-memcached.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-108312-1-1.html 上篇帖子: 阿里云主机centos系统下安装memcached 下篇帖子: memcached server LRU 深入分析[转载]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表