一、Redis实时同步mysql数据
Gearman是一套用来把程式需求委派给机器,提供通用的程序框架来将任务分发在机器运算。它同时具备并行工作的能力、负载均衡处理的能力,以及在不同程序语言之间沟通的能力。
主要服务:gearmand
如下图所示:
实验操作过程:
实验环境使用上一篇:搭建【(nginx+php)+mysql+redis】的服务平台的环境
首先server1启动gearman
获取安装UDF
UDF:
UDF (User-Defined Function)(用户定义函数)
此概念出现在MySQL、Interbase、Firebird、Fluent中,根据用户实际应用的需要而自行开发的函数。
基本用户定义函数是一类代码,对MYSQL服务器功能进行扩充,通过添加新函数,性质就象使用本地MYSQL函数abs()或concat().UDF是用C(或C++)写的。也许还可以用BASIC,C#或其它什么语言.
在server3上
客户端上传软件包 [root@client rpms]# scp lib_mysqludf_json-master.zip server3: root@server3's password: lib_mysqludf_json-master.zip 100% 23KB 4.9MB/s 00:00 [root@server3 ~]# yum install -y unzip [root@server3 ~]# unzip lib_mysqludf_json-master.zip 解压 Archive: lib_mysqludf_json-master.zip 37f851c808c4161beb4d5e535771dc0c59c82de6 creating: lib_mysqludf_json-master/ inflating: lib_mysqludf_json-master/README.md inflating: lib_mysqludf_json-master/lib_mysqludf_json.c inflating: lib_mysqludf_json-master/lib_mysqludf_json.html inflating: lib_mysqludf_json-master/lib_mysqludf_json.so inflating: lib_mysqludf_json-master/lib_mysqludf_json.sql [root@server3 ~]# ls anaconda-ks.cfg lib_mysqludf_json-master lib_mysqludf_json-master.zip redis-5.0.3 test.sql [root@server3 ~]# cd lib_mysqludf_json-master/ [root@server3 lib_mysqludf_json-master]# ls lib_mysqludf_json.c lib_mysqludf_json.html lib_mysqludf_json.so lib_mysqludf_json.sql README.md [root@server3 lib_mysqludf_json-master]# yum install -y mariadb-devel 安装数据库开发包 [root@server3 lib_mysqludf_json-master]# yum install -y gcc
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
[root@server3 lib_mysqludf_json-master]# gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c [root@server3 lib_mysqludf_json-master]# ls lib_mysqludf_json.c lib_mysqludf_json.html lib_mysqludf_json.so lib_mysqludf_json.sql README.md [root@server3 lib_mysqludf_json-master]# cp lib_mysqludf_json.s lib_mysqludf_json.so lib_mysqludf_json.sql 复制插件到mysql的插件目录中 [root@server3 lib_mysqludf_json-master]# cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
注册udf函数
安装gearman客户端
[root@server3 ~]# yum install -y libevent-devel-2.0.21-4.el7.x86_64.rpm libgearman-1.1.12-18.el7.x86_64.rpm libgearman-devel-1.1.12-18.el7.x86_64.rpm
- 1
- 2
- 3
- 4
[root@server3 ~]# cd gearman-mysql-udf-0.6/ [root@server3 gearman-mysql-udf-0.6]# ls aclocal.m4 AUTHORS ChangeLog config config.h.in configure configure.ac COPYING libgearman_mysql_udf m4 Makefile.am Makefile.in NEWS README [root@server3 gearman-mysql-udf-0.6]# ./configure --libdir=/usr/lib64/mysql/plugin --with-mysql 编译
- 1
- 2
- 3
- 4
再次注册udf函数
创建触发器
编写一个work.php
[root@client rpms]# scp worker.php server1: root@server1's password: worker.php
- 1
- 2
- 3
测试一下数据是否实时同步
再来一次
总结:mysql数据库数据发生改变——>会触发触发器(trigger)——>json_map格式化json格式易读取——>mysql-plugin插件——>gearman(server)——>server1上的worker(php-gearman、php-redis)——>同步到Redis上——>client 客户端—下次访问—>Redis——>client