编译安装
首先确定你安装的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可能就不会有这样的问题了。
相关推荐
本文将详细讲解如何利用MySQL触发器自动更新Memcache中的数据,以及具体的实现步骤。 首先,MySQL触发器是在满足特定条件时自动执行的数据库操作。在MySQL 5.1及以上版本中,引入了触发器功能,允许用户定义在插入...
MySQL5 5 Semi synchronous Replication(半同步复制) mysqlslap MySQL压力测试工具 mysql proxy安装配置 mysql 触发器 mysql与MongoDB语法对比 mysql分表的3种方法 MySQL数据库扩展小记 mysql架构方案 MySQL水平...
- 设置MySQL触发器,用于在数据发生变更时自动更新Redis缓存。 通过以上步骤,我们成功搭建了一个基于Redis的MySQL缓存服务器环境,实现了读写分离,提高了系统的性能和稳定性。这种方式特别适用于需要频繁读取...
9. **复制与高可用性**:MySQL支持主从复制,可以将一个服务器的数据实时同步到其他服务器,以实现负载均衡和高可用性。在主服务器故障时,可以快速切换到从服务器,避免服务中断。 总之,"MySql-Administration...
- **故障恢复**:针对数据库故障,MySQL提供了多种恢复策略,如使用事务日志、备份文件等方式来保障数据完整性。 #### 三、结语 总之,《MySQL 5.5 参考手册》是一份非常实用且详尽的手册,不仅适用于初学者入门...
接下来,我们将讨论如何使用UDFs(用户自定义函数)实现Memcached与MySQL之间的数据自动更新。 **UDFs在MySQL中的应用**: UDFs允许用户扩展MySQL的功能,创建自定义的函数来处理特定的数据类型或执行特定的操作。...
还将介绍PL/SQL和MySQL的存储过程、触发器和函数的编写,帮助开发者实现更复杂的业务逻辑。此外,对于数据库设计,将探讨范式理论、实体关系模型以及如何进行数据库规范化,以减少数据冗余和提高数据一致性。 在...
11. **复制与集群**:MySQL复制允许数据从一个服务器(主节点)实时同步到其他服务器(从节点),以提高可用性和扩展性。MySQL集群提供高可用性和负载均衡。 12. **安全性**:用户权限管理(GRANT, REVOKE)、加密...
19. **主从复制**:主从复制是MySQL的一种高可用和数据备份方案,主数据库的变更会被同步到从库,实现数据冗余和负载均衡。 这些面试题涵盖了MySQL基础知识的核心部分,对于准备面试或者想要深入理解MySQL的开发者...
- **MySQL + Mytrigger → 多个Redis实例**:这种方式通常用于数据同步场景,即通过触发器将MySQL中的变更数据同步到多个Redis实例中,以实现数据的快速读取和高可用性。 - **MySQL → MytriggerQ → 队列处理器 ...
面试题可能涵盖线程的生命周期、同步机制(synchronized关键字,volatile变量,Lock接口及其实现),线程池(ExecutorService,ThreadPoolExecutor和ScheduledThreadPoolExecutor的使用),死锁和活锁的概念,以及...
5. **数据同步**:该版本可能包含了数据同步功能,可以帮助用户比较和同步数据库之间的差异,确保数据库的一致性。 6. **备份与恢复**:Navicat提供了定时备份和恢复功能,可以设置计划任务自动备份数据库,以防...
线程的同步通过锁来实现,synchronized和ReentrantLock是两种常用的锁机制。 CAS(CompareAndSet)即比较并交换,是一种用于实现无锁同步的算法。CAS算法通过原子性操作来保证对共享资源的安全访问。 线程池是用于...
50. 多线程实现:继承Thread类、实现Runnable接口,同步方法有synchronized、Lock等。 51. 同步与异步:同步确保数据一致性,异步提高并发性,根据场景选择。 52. 启动线程用start(),run()直接执行线程体。 53. ...
MySQL是常用的数据库系统,面试中会涉及SQL语句的编写、索引优化、事务处理、存储过程、触发器等。对于性能优化,如JOIN操作、子查询优化、存储引擎的比较也是常见的面试问题。 五、SSM(Spring+SpringMVC+MyBatis...
重点掌握线程的同步机制,如synchronized关键字、volatile变量、Lock接口及其实现,以及并发容器如ConcurrentHashMap和CopyOnWriteArrayList。 【中间件】 中间件是连接不同应用系统的关键技术,常见的Java中间件...
- **数据库类型**:对比分析MySQL、SQL Server、Oracle等关系型数据库,以及Redis、MongoDB、Memcached等NoSQL数据库的优缺点和应用场景。 - **SQL语句**:熟练编写SQL语句,包括数据库和表的操作、查询、连接、子...
PHP可以通过事务处理确保数据的一致性,同时使用触发器或定时任务来执行库存盘点和自动预警。 4. 入库与出库:库存模块需要处理采购订单、销售订单等业务流程。PHP可以处理这些订单的创建、审核、确认,同时调整...