编译安装
首先确定你安装的mysql是5.1以上的版本,同时需要安装 mysql-devel
安装memcached
首先得安装libevent,这个就不介绍了。
首先下载memcached-1.4.5-2.el5.remi.x86_64.rpm和memcached-devel-1.4.5-2.el5.remi.x86_64.rpm(这个安装libmemcached要用到)
安装执行
rpm -Uvh memcached-1.4.5-2.el5.remi.x86_64.rpm
memcached-devel-1.4.5-2.el5.remi.x86_64.rpm
如果自己编译记得设置好安装目录,让接下来的依赖它的库的安装都能够找得到。
编译安装libmemcached
这个就比较纠结了,因为要选择好版本,而且可能还要去XX。下载地址:https://launchpad.net/libmemcached/+download
选择版本0.34,不然会报“ servers.c:263:28: error: ‘memcached_st’ has no member named ‘hosts’ ”或者“ ERROR 1126 (HY000) at line 38: 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) ”的错误,后一个错误是在mysql执行sql的时候报的。
解压编译,过程如下
./configure –prefix=/usr/local
make && make install
因为安装路径是在/usr/local下,所以需要修改/etc/ld.so.conf,将/usr/local/lib加入,并且执行/sbin/ldconfig
而且需要设置pkg-confg(如果没有需要安装),不然会在编译memcached_functions_mysql的时候,会报“No package ‘libmemcached’ found”的错误
执行
whereis pkgconfig
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$
PKG_CONFIG_PATH
编译安装 memcached_functions_mysql
这个同样要选择好合适的版本,我这里选择了1.0版本,刚刚开始我用了1.1版本,编译就会了一些问题。这个版本在官方有下的,其他版本可能有问题哦。
编译过程如下
./configure –prefix=/usr/local
–with-mysql=/usr/bin/mysql_config
make && make install
接下来将/usr/local/lib/libmemcached_functions_mysql*的系列文件拷贝到/usr/lib64/mysql/plugin下,直接cp过去,可能会丢掉软连接关系,需要再到 /usr/lib64/mysql/plugin 目录下建立好软连接关系。
最后进入 memcached_functions_mysql的源码目录,先进入mysql终端“mysql -u root -p”
然后执行“source sql/install_functions.sql ;”
成功后查询表mysql.func,可以看到很多 memc为前缀的函数。
启动配置 memcached启动
启动命令和参数如下
memcached -d -m 256 -p 11211
-p 指定端口号(默认11211)
-U UDP监听端口 (默认: 11211, 0 时关闭)
-s 用于监听的UNIX套接字路径(禁用网络支持)
-a UNIX套接字访问掩码,八进制数字(默认:0700)
-m 指定最大使用内存大小(默认64MB)
-t 线程数(默认4)
-l 绑定地址
(默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问)
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-u 绑定使用指定用于运行进程
(只有root用户可以使用这个参数)
-P 将PID写入文件,这样可以使得后边进行快速进程终止, 需要与 -d
一起使用
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-k锁定所有内存页。注意你可以锁定的内存上限。
mysql配置
mysql去自动同步memcached,主要是采用触发器来实现的。
首先在每次mysql启动后要进行配置(以下都是在mysql终端里执行)。
select memc_servers_set(’127.0.0.1:11211′);
select
memc_servers_behavior_set(‘MEMCACHED_BEHAVIOR_NO_BLOCK’,’1′);
select
memc_servers_behavior_set(‘MEMCACHED_BEHAVIOR_TCP_NODELAY’,’1′);
设置MEMCACHED_BEHAVIOR_NO_BLOCK为打开状态,这样在memcached出现问题时(不能连接时)数据继续插入到mysql中,报错提示,如果不设置此值,如果memcached失败,mysql需要等到timeout才可以插入到表中。
开始创建一个例子
use test;
create table xxd (id int, value varchar(100));
create trigger xxdmmci after insert on xxd for each row set @tmp
= memc_set(NEW.id, NEW.value);
create trigger xxdmmcu after update on xxd for each row set @tmp
= memc_set(NEW.id, NEW.value);
create trigger xxdmmcd before delete on xxd for each row set
@tmp = memc_delete(OLD.id);
至此,全部配置ok了。
然后可以用telnet连接上memcached去看下,执行“get xx”看是否生效。
这就完了吗,可能没有哦。
当你按照这样去操作时,你可能会发现,其实根本没有写入到memcached中。
怎么办呢,网上也没有响应的解决方法,笔者通过写简单的socket通讯测试,发现在mysql UDF中写socket会连接时会报“Permission denied”。所以你根本连接不上任何的服务器,当然memcached也在内。
问题找到了,就好办了,一劳永逸的解决办法
修改/etc/sysconfig/selinux,加入SELINUX=disabled,然后执行“setenforce 0”
当然,出现这样的问题的原因是,你的库是一个用户生成的,而你的mysqld的执行用户是另外一个。如果用root来启动mysql可能就不会有这样的问题了。
相关推荐
canal 的 mysql 与 redis/memcached/mongodb 的 nosql 数据实时同步方案
使用c#读取memcached中的数据,再转移到指定的redis中。解决比如token的保持,让客户端登录不效。
java+mysql+memcached 安装包,以及客户端实现!!!
memcache与mysql结合必备 memcached_functions_mysql-1.1.tar.gz
mysql 5.1支持触发器以及自定义函数接口(UDF)的特性,如果配合libmemcache以及Memcached Functions for MySQL,就能够实现memcache的自动更新。简单记录一下安装测试步骤。 安装步骤 安装memcached,这个步骤很简单,...
MySQL5 5 Semi synchronous Replication(半同步复制) mysqlslap MySQL压力测试工具 mysql proxy安装配置 mysql 触发器 mysql与MongoDB语法对比 mysql分表的3种方法 MySQL数据库扩展小记 mysql架构方案 MySQL水平...
中文名: Apache, MySQL, memcached和Perl开发Web应用程序 原名: Developing Web Applications with Apache, MySQL, memcached, and Perl 作者: Patrick Galbraith资源格式: PDF 版本: 文字版 出版社: Wrox书号: ...
nginx+apache+mysql+php+memcached+squid搭建门户网站
C#使用memCached实现缓存 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。...
Windows8上安装虚拟机VirtualBox,然后新建虚拟电脑,搭建CentOS6.5 + mysql + nginx + php + memcached平台环境,部署网站。文档中记录了部分FAQ。
接上篇:mysql使用mysql-udf-http效率测试笔记 ,这次不使用rest架构,而是使用:libmemcached和memcached_functions_mysql
memcached监视工具,有图有像,动态查看各种数据
5.数据写入/修改到nosql (redis的主从/hash分片) 6.保证对应关系的简单性:一个mysql表对应一个 redis实例(redis单线程,多实例保证分流不阻塞),关联关系数据交给接口业务 数据:mysql->binlog->MQ->redis(不...
但是其实Memcached服务端本身是单实例的,只是在客户端实现过程中可以根据存储的主键做分区存储,而这个区就是Memcached服务端的一个或者多个实例,如果将客户端也囊括到Memcached中,那么可以部分概念上说是集中式...
对于 Memcached 来说,本身是集中式的缓存系统,要搞多节点分布,只能通过客户端实现。Memcached 的分布算法一般有两种选择:
php mysql redis nginx memcached
基于canal 的 mysql 与 redis/memcached/mongodb 的 nosql 数据实时同步方案 案例,canal client
本书面向想要使用MySQL, memcached, Apache和Perl编写程序,并对提升开发进程和效率感兴趣的程序员.
本书面向想要使用MySQL, memcached, Apache和Perl编写程序,并对提升开发进程和效率感兴趣的程序员.