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

[经验分享] mysql 同步redis

[复制链接]

尚未签到

发表于 2018-10-3 07:37:27 | 显示全部楼层 |阅读模式
官方插件  https://github.com/dawnbreaks/mysql2redis  
安装插件 以及依赖
  
// 安装apr + apr-util
  
$ wget http://mirror.bit.edu.cn/apache//apr/apr-1.5.1.tar.gz
  
$ tar zxvf apr-1.5.1.tar.gz
  
$ ./configure --prefix=/usr/local/apr
  
$ make
  
$ make install
  

  
$ wget http://mirror.bit.edu.cn/apache//apr/apr-util-1.5.4.tar.gz
  
$ cd apr-util-1.5.4
  
$ ./configure --with-apr=/usr/local/apr
  
$ make
  
$ make install
  

  
// 安装hiredis, redis的C语言client
  
$ git clone https://github.com/redis/hiredis
  
$ cd hiredis
  
$ make
  
$ make install
  

  
$ git clone https://github.com/dawnbreaks/mysql2redis.git
  
$ cd mysql2redis
  
$ make
  
$ cp lib_mysqludf_redis_v2.so /usr/lib64/mysql/plugin/
  

  

  
首先要动态库的正确性 要不然注册函数就会报错
  
-bash-4.1# ldd /usr/local/mysql/lib/plugin/lib_mysqludf_redis_v2.so
  
        linux-vdso.so.1 =>  (0x00007fff98f5a000)
  
        libhiredis.so.0.13 => /usr/local/lib/libhiredis.so.0.13 (0x00007f255127e000)
  
        libapr-1.so.0 => /usr/lib64/libapr-1.so.0 (0x00007f2551051000)
  
        libaprutil-1.so.0 => /usr/lib64/libaprutil-1.so.0 (0x00007f2550e2d000)
  
        libc.so.6 => /lib64/libc.so.6 (0x00007f2550a99000)
  
        libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f2550895000)
  
        libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f255065d000)
  
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2550440000)
  
        libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f2550218000)
  
        libdb-4.7.so => /lib64/libdb-4.7.so (0x00007f254fea3000)
  
        /lib64/ld-linux-x86-64.so.2 (0x00000038c2800000)
  
        libfreebl3.so => /lib64/libfreebl3.so (0x00007f254fc2c000)
  
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f254fa28000)
  

  
        保证里面没有错误的
  
然后注册 mysq2redis UDF的函数
  

  
CREATE FUNCTION redis_servers_set_v2 RETURNS int SONAME "lib_mysqludf_redis_v2.so";
  
CREATE FUNCTION redis_command_v2 RETURNS int SONAME "lib_mysqludf_redis_v2.so";
  
CREATE FUNCTION free_resources RETURNS int SONAME "lib_mysqludf_redis_v2.so";
  

  

  
、安装lib_mysqludf_json
  
下载:https://github.com/mysqludf/lib_mysqludf_json/archive/master.zip
  
压后上传到服务器
  
cd lib_mysqludf_json-master
  
rm lib_mysqludf_json.so
  
gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
  
cp lib_mysqludf_json.so /usr/local/mysql/lib/plugin/
  

  
注册函数
  
drop function lib_mysqludf_json_info;
  
drop function json_array;
  
drop function json_members;
  
drop function json_object;
  
drop function json_values;
  

  
create function lib_mysqludf_json_info returns string soname 'lib_mysqludf_json.so';
  
create function json_array returns string soname 'lib_mysqludf_json.so';
  
create function json_members returns string soname 'lib_mysqludf_json.so';
  
create function json_object returns string soname 'lib_mysqludf_json.so';
  
create function json_values returns string soname 'lib_mysqludf_json.so';
  

  

  

  
下面开始在数据库里面建表做测试
  
    我们先在tset里面新建一张表
  
    CREATE TABLE `user_info` (
  
  `id` int(100) NOT NULL,
  
  `NAME` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  
  `age` varchar(11) COLLATE utf8_unicode_ci DEFAULT NULL,
  
  `email` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  
  `addr` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  
  PRIMARY KEY (`id`)
  
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
  

  
然后新建 一个insert 跟upudate的触发器
  
CREATE TRIGGER `trigger_INSERT` AFTER INSERT ON `user_info` FOR EACH ROW BEGIN
  
SET @ret=(select redis_servers_set_v2("6.6.6.6",6379));
  
SET @ret1=(select redis_command_v2("hmset", concat("user_info:", id), 'name', name, 'age', age, 'email', email, 'addr', addr) from user_info where id = new.id);
  

  
end;
  

  
CREATE TRIGGER `trigger_update` AFTER UPDATE ON `user_info` FOR EACH ROW BEGIN
  
SET @ret=(select redis_servers_set_v2("6.6.6.6",6379));
  
SET @ret1=(select redis_command_v2("hmset", concat("user_info:", id), 'name', name, 'age', age, 'email', email, 'addr', addr) from user_info where id = old.id);
  

  
end;
  

  
至于触发器里面的内容不懂的可以去百度了这里不做解释
  
看测试结果
  
先情况redis 里面的数据
  
6.6.6.6:6379> flushall
  
OK
  
6.6.6.6:6379> keys *
  
(empty list or set)
  
在数据库里面插入数据
  
mysql> TRUNCATE table user_info;  # 清空表数据
  
Query OK, 0 rows affected (0.04 sec)
  

  
mysql> INSERT INTO `user_info` VALUES (1, '111', 26, 'lrm@163.com', '1111 ');
  

  

  
进行查询  mysql
  
mysql> select * from user_info;
  
+----+------+------+-------------+-------+
  
| id | NAME | age  | email       | addr  |
  
+----+------+------+-------------+-------+
  
|  1 | 111  | 26   | lrm@163.com | 1111  |
  
+----+------+------+-------------+-------+
  
1 row in set (0.00 sec)
  

  
mysql>
  
进行查询 redis
  
6.6.6.6:6379> keys *
  
(empty list or set)
  
6.6.6.6:6379> keys *
  
1) "user_info:1"
  
6.6.6.6:6379> hgetall user_info:1
  
1) "name"
  
2) "111"
  
3) "age"
  
4) "26"
  
5) "email"
  
6) "lrm@163.com"
  
7) "addr"
  
8) "1111 "
  
6.6.6.6:6379>
  

  
到这里我们就配置完成了



运维网声明 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-607816-1-1.html 上篇帖子: mysql-sandbox 下篇帖子: MySQL 参数文件及参数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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