MySQL與Redis數據庫結合(二)——基於lnmp配置gearman實現Redis和MySQL數據同步(lnmp+redis+mysql+gearman)

一、基於lnmp配置gearman實現Redis和MySQL數據同步

我們本篇博客解決的就是:如何將mysql端修改的數據及時更新到rdis端,實現數據同步。

1、在server3上,解壓lib_mysqludf_json-master.zip

[root@server3 ~]# yum install unzip -y
[root@server3 ~]# ls
[root@server3 ~]# unzip lib_mysqludf_json-master.zip  

在這裏插入圖片描述

在這裏插入圖片描述

2、安裝gccmariadb-devel,mariadb-devel和gcc不能同時安裝,同時安裝只會安裝其中一個。

[root@server3 ~]# cd lib_mysqludf_json-master
[root@server3 lib_mysqludf_json-master]# yum install gcc -y
[root@server3 lib_mysqludf_json-master]# yum install mariadb-devel -y

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
3、gcc進行編譯

[root@server3 lib_mysqludf_json-master]# gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c

在這裏插入圖片描述4、將lib_mysqludf_json-master/lib_mysqludf_json.so模塊拷貝到/usr/lib64/mysql/plugin/插件目錄下

cp lib_mysqludf_json-master/lib_mysqludf_json.so /usr/lib64/mysql/plugin/

在這裏插入圖片描述
5、登陸數據庫,查看插件目錄

[root@server3 lib_mysqludf_json-master]# mysql -uroot -predhat
MariaDB [(none)]> show global variables like 'plugin_dir';

在這裏插入圖片描述
6、註冊udf函數,並查看。

MariaDB [(none)]> create FUNCTION json_object returns string soname 'lib_mysqludf_json.so';
MariaDB [(none)]> select * from mysql.func;

在這裏插入圖片描述
7、安裝libgearman安裝包,並安裝管理gearman的分佈式隊列插件,進行編譯和安裝

[root@server3 ~]# yum install libgearman-* libevent-devel-2.0.21-4.el7.x86_64.rpm  -y
[root@server3 ~]# tar zxf gearman-mysql-udf-0.6.tar.gz 
[root@server3 ~]# cd gearman-mysql-udf-0.6
[root@server3 gearman-mysql-udf-0.6]# ls
[root@server3 gearman-mysql-udf-0.6]# ./configure -libdir=/usr/lib64/mysql/plugin/ --with-mysql
[root@server3 gearman-mysql-udf-0.6]# make && make install

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
8、再次註冊兩個udf函數

MariaDB [(none)]> CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
MariaDB [(none)]> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';
MariaDB [(none)]> select * from mysql.func;

在這裏插入圖片描述
9、指定gearman的服務信息

MariaDB [(none)]> select gman_servers_set('172.25.2.1:4730');

在這裏插入圖片描述

10、編寫mysql觸發器腳本test.sql,並導入test數據庫

[root@server3 ~]# vim test.sql 
use test;
##註釋掉創建表的兩行
#CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#INSERT INTO `test` VALUES (1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6'),(7,'test7'),(8,'test8'),(9,'test9');

DELIMITER $$
CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGIN
    SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`)); 
  END$$
DELIMITER ;

[root@server3 ~]# mysql -predhat < test.sql 
[root@server3 ~]# mysql -uroot -predhat 

在這裏插入圖片描述在這裏插入圖片描述

11、查看觸發器

MariaDB [(none)]> SHOW TRIGGERS FROM test;

在這裏插入圖片描述

12、在server1上(gman的worker端),開啓gearmand服務並查看其端口號4730是否開啓

[root@server1 ~]# systemctl start gearmand
[root@server1 ~]# netstat -tnlp

在這裏插入圖片描述

13、編寫worker.php腳本,並放到/usr/local目錄下

[root@server1 ~]# vim worker.php

<?php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('syncToRedis', 'syncToRedis');
 
$redis = new Redis();
$redis->connect('172.25.2.2', 6379);
 
while($worker->work());
function syncToRedis($job)
{
        global $redis;
        $workString = $job->workload();
        $work = json_decode($workString);
        if(!isset($work->id)){
                return false;
        }
        $redis->set($work->id, $work->name);
}
?>

[root@server1 ~]# cp worker.php /usr/lcoal/

在這裏插入圖片描述
在這裏插入圖片描述

14、在後臺運行worker

[root@server1 ~]# nohup php /usr/local/worker.php &> /dev/null &

在這裏插入圖片描述

15、測試,在server3更新數據並查看(注意:其中id=1的因爲是之前更改的,所以不生效)

MariaDB [(none)]> use test;
MariaDB [test]> update test set name='ranran' where id=2;
MariaDB [test]> select * from test;
MariaDB [test]> update test set name='qiuqiu' where id=3;

在這裏插入圖片描述
在這裏插入圖片描述

在server2嘗試獲取,發生改變

[root@server2 redis-5.0.3]# redis-cli
127.0.0.1:6379> get 2
127.0.0.1:6379> get 3

在這裏插入圖片描述

在這裏插入圖片描述

在瀏覽器中查看,看到發生改變

在這裏插入圖片描述
此時,就實現了Redis和MySQL數據同步了。

發佈了127 篇原創文章 · 獲贊 26 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章