Crontab定時同步MySQL資料到ES中

2021-10-01 02:47:25 字數 1545 閱讀 4455

本來計畫是用logstash來自動同步mysql資料的,奈何配置一直出問題。就只能自己寫**來實現了。

公司業務發展,需要在現有的專案基礎上做es搜尋。那就需要同步現有的資料到es中(現有的資料儲存在mysql上)。

這裡以同步「文章」表的資料舉例。

1    定時任務:專案放在雲伺服器上,contos7.3的系統。可以使用cronteb定時任務來檢測是否有新增資料,進行自動更新操作。

2    es操作:

2.1    新建索引(index)和 對映,對映的結構就是自己想儲存的資料結構。

2.2    用聚合查詢找到當前儲存在es上的最後一篇文章id,再從資料庫查出最後一篇文章id,判斷兩個id是否一樣,資料庫的id大就證明有新資料了。

2.3    有新資料,就用兩個id作為條件,搜尋出新增的文章,批量儲存到es中。

1    單例模式建立es物件

use elasticsearch\clientbuilder;

use think\db;

class quantest

$this->client = clientbuilder::create()->build();

}..............剩餘**自動補

2    新建索引和對映

//建立es索引

public function createartindex()

3    判斷是否有新增的資料

3.1    //判斷是否需要更新文章資料

public function updateartdata()

}3.2    //用聚合查詢搜尋到儲存的最大文章id

public functiongeteslastartid()

3.3    //新增文章資料

public functionaddartdata($begin=0, $end=100)

// var_dump($params);die();

$responses = $this->client->bulk($params);

}4    定時器執行更新操作

***********************************==11月29日補充***********************************===

上文中用id判斷是否有新增資料,只能判斷「新增」的情況,那怎麼實現老的資料更新,也能自動同步到es呢。

這裡可以使用檢查資料更新時間的方法。

mysql表裡必須有乙個類似update_time欄位,用於儲存每次更新操作的時間。在es索引中,也要相應存入這個字段。然後根據兩邊的最大的更新時間來判斷資料是不是一致。不一致,就從資料庫裡搜出來更新的資料,然後更新到es中。

**這裡就不貼上去了。

crontab定時任務

今天工作項有個任務是讓ubuntu定時執行某個指令碼,對postgresql資料庫進行定時備份。linux 系統都有個cron定時任務的機制。今天做些筆記,以便日後翻查。注意 cron機制是有個使用者系統的概念的,即分系統cron和使用者cron,每個使用者所執行的cron任務可能不同。1.以roo...

crontab定時任務

基本格式 command 分 時 日 月 周 命令 第1列表示分鐘1 59 每分鐘用 或者 1表示 第2列表示小時1 23 0表示0點 第3列表示日期1 31 第4列表示月份1 12 第5列標識號星期0 6 0表示星期天 第6列要執行的命令 我的需求是定時備份mongodb 編寫任務執行的指令碼ba...

Crontab定時任務

我們可以使用crontab執行一些週期任務 crontab u user file crontab u user 將file做為crontab的任務列表檔案並載入crontab 編輯crontab檔案內容 顯示crontab檔案內容 刪除載入後的crontab檔案內容 每分鐘向使用者目錄下的log....