转自:https://blog.csdn.net/qq_46089299/article/details/106258639


一、Redis实时同步mysql数据

Gearman是一套用来把程式需求委派给机器,提供通用的程序框架来将任务分发在机器运算。它同时具备并行工作的能力、负载均衡处理的能力,以及在不同程序语言之间沟通的能力。
主要服务:gearmand
如下图所示:

Redis实时同步mysql数据UDF-LMLPHP
实验操作过程:
实验环境使用上一篇:搭建【(nginx+php)+mysql+redis】的服务平台的环境

首先server1启动gearman
Redis实时同步mysql数据UDF-LMLPHP
获取安装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

Redis实时同步mysql数据UDF-LMLPHP
注册udf函数
Redis实时同步mysql数据UDF-LMLPHP
安装gearman客户端
Redis实时同步mysql数据UDF-LMLPHP

[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

Redis实时同步mysql数据UDF-LMLPHP
再次注册udf函数
Redis实时同步mysql数据UDF-LMLPHP
创建触发器
Redis实时同步mysql数据UDF-LMLPHP
Redis实时同步mysql数据UDF-LMLPHP
编写一个work.php

[root@client rpms]# scp worker.php server1: root@server1's password:
worker.php
  • 1
  • 2
  • 3

Redis实时同步mysql数据UDF-LMLPHP
Redis实时同步mysql数据UDF-LMLPHP
测试一下数据是否实时同步
Redis实时同步mysql数据UDF-LMLPHP
Redis实时同步mysql数据UDF-LMLPHP
再来一次
Redis实时同步mysql数据UDF-LMLPHP
Redis实时同步mysql数据UDF-LMLPHP
总结:mysql数据库数据发生改变——>会触发触发器(trigger)——>json_map格式化json格式易读取——>mysql-plugin插件——>gearman(server)——>server1上的worker(php-gearman、php-redis)——>同步到Redis上——>client 客户端—下次访问—>Redis——>client

12-24 02:04