elasticsearch與mysql數(shù)據(jù)同步(go-mysql-elasticsearch)

es的安裝http://www.reibang.com/p/f886b2c2fb8a

1 ik分詞的安裝

1.獲取ik分詞器安裝包:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.12.1
選擇zip安裝包
2.進入es的組建目錄并解壓壓縮包

cd /docker/es/plugins

mkdir ik

cd ik

unzip elasticsearch-analysis-ik-7.12.1.zip

3.完成后重啟es

docker restart es
注意事項:安裝es的ik分詞器可能導(dǎo)致es內(nèi)存溢出秀鞭,可以調(diào)整虛擬機內(nèi)存到2G

Es中的類型

一級分類 二級分類 具體類型
核心類型 字符串類型 string,text,keyword
整數(shù)類型 integer,long,short,byte
浮點類型 double,float,half_float,scaled_float
邏輯類型 boolean
日期類型 date
范圍類型 range
二進制類型 binary
復(fù)合類型 數(shù)組類型 array
對象類型 object
嵌套類型 nested
地理類型 地理坐標(biāo)類型 geo_point
地理地圖 geo_shape
特殊類型 IP類型 ip
范圍類型 completion
令牌計數(shù)類型 token_count
附件類型 attachment
抽取類型 percolator

創(chuàng)建一個索引(IK需要提前配置好),然后通過golang組件姓迅,go-mysql-elasticsearch進行數(shù)據(jù)同步到es

PUT /products/
{
  "mappings": {
    "properties": {
      "name":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "long_name":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "brand_id":{
        "type": "integer"
      },
      "category_id":{
        "type":"integer"
      },
      "shop_id":{
        "type":"integer"
      },
      "price":{
        "type":"scaled_float",
        "scaling_factor":100
      },
      "sold_count":{
        "type":"integer"
      },
      "review_count":{
        "type":"integer"
      },
      "status":{
        "type":"integer"
      },
      "create_time" : {
          "type" : "date"
      },
      "last_time" : {
          "type" : "date"
      }
    }
  }
}

查看索引數(shù)據(jù)

GET /_cat/indices?v
查看索引

可以看到當(dāng)前products索引下沒有數(shù)據(jù)

2 elasticsearch與mysql數(shù)據(jù)同步

2.1 go-mysql-elasticsearch簡介

go-mysql-elasticsearch是一款開源的高性能的Mysql數(shù)據(jù)同步ES的工具与境,其由go語言開發(fā)琳骡,編譯及使用非常簡單贩猎。go-mysql-elasticsearch的原理很簡單泌神,首先使用mysqldump獲取當(dāng)前MySQL的數(shù)據(jù)定血,然后在通過此時binlog的name和position獲取增量數(shù)據(jù)电爹,再根據(jù)binlog構(gòu)建restful api寫入數(shù)據(jù)到ES中恢筝。

注意:
1.mysql binlog必須是ROW模式哀卫。
2.要同步的mysql數(shù)據(jù)表必須包含主鍵,否則直接忽略滋恬,這是因為如果數(shù)據(jù)表沒有主鍵聊训,UPDATE和DELETE操作就會因為在ES中找不到對應(yīng)的document而無法進行同步。
3.不支持程序運行過程中修改表結(jié)構(gòu)恢氯。

2.2 安裝go-mysql-elasticsearch

1.拉取go-mysql-elasticsearch鏡像

docker pull gozer/go-mysql-elasticsearch

2.創(chuàng)建一個目錄用于存儲配置文件

mkdir /docker/go-mysql-es

cd /docker/go-mysql-es

touch go_mysql_river.toml

配置文件內(nèi)容如下

my_addr = "xx.xx.xx.xx:3306"    --mysql地址與端口
my_user = "root"               --mysql用戶
my_pass = "root"               --mysql密碼
my_charset = "utf8"            --字符集
enable-relay = true            --中繼日志

es_addr = "xx.xx.xx.xx:9200"    --es的地址與端口
es_user = ""                   --es用戶名
es_pass = ""                   --es密碼

data_dir = "/docker/data"      --數(shù)據(jù)存儲目錄

stat_addr = "127.0.0.1:12800"
stat_path = "/metrics"

server_id = 1001               --注意別和mysql的server-id沖突

flavor = "mysql"               

mysqldump = ""                 --備份文件

#skip_master_data = false

bulk_size = 128                --批量數(shù)據(jù)

flush_bulk_time = "200ms"

skip_no_pk_table = false

[[source]]
schema = "lmrs"                --同步的數(shù)據(jù)庫
tables = ["lmrs_products"]     --同步的表(可指定多個["lmrs_products","table2"]带斑,當(dāng)前指定一個)

[[rule]]                       --過濾字段
schema = "lmrs_2008_shops"     --同步的數(shù)據(jù)庫
table = "lmrs_products"        --同步的表
index = "products"             --同步的es索引
type = "_doc"                  --同步的es類型
# Only sync following columns
filter = ["id", "name","long_name","brand_id","shop_id","price","sold_count","review_count","status","create_time","last_time","three_category_id"]  --哪些字段同步
[rule.filed]
mysql = "three_category_id"  --mysql的three_category_id替換es的category_id
elastic = "category_id"

3.構(gòu)建go-mysql-elasticsearch容器

docker run -p 12345:12345 -d --name go-mysql-es -v /docker/go-mysql-es/go_mysql_river.toml:/config/river.toml:ro --privileged=true gozer/go-mysql-elasticsearch

正常啟動后查看es索引的數(shù)據(jù)

GET /_cat/indices?v
數(shù)據(jù)同步結(jié)果

手動在數(shù)據(jù)庫中新增一條記錄,繼續(xù)查看索引數(shù)據(jù)


新增一條數(shù)據(jù)

再刪除兩條數(shù)據(jù)勋拟,繼續(xù)查看索引數(shù)據(jù)


刪除兩條數(shù)據(jù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載勋磕,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末敢靡,一起剝皮案震驚了整個濱河市挂滓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啸胧,老刑警劉巖赶站,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纺念,居然都是意外死亡贝椿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門陷谱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烙博,“玉大人,你說我怎么就攤上這事烟逊≡埽” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵宪躯,是天一觀的道長乔宿。 經(jīng)常有香客問我,道長访雪,這世上最難降的妖魔是什么详瑞? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任囤官,我火速辦了婚禮,結(jié)果婚禮上蛤虐,老公的妹妹穿的比我還像新娘。我一直安慰自己肝陪,他們只是感情好驳庭,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著氯窍,像睡著了一般饲常。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狼讨,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天贝淤,我揣著相機與錄音,去河邊找鬼政供。 笑死播聪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的布隔。 我是一名探鬼主播离陶,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衅檀!你這毒婦竟也來了招刨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤哀军,失蹤者是張志新(化名)和其女友劉穎沉眶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杉适,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡谎倔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了淘衙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片传藏。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖彤守,靈堂內(nèi)的尸體忽然破棺而出毯侦,到底是詐尸還是另有隱情,我是刑警寧澤具垫,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布侈离,位于F島的核電站,受9級特大地震影響筝蚕,放射性物質(zhì)發(fā)生泄漏卦碾。R本人自食惡果不足惜铺坞,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洲胖。 院中可真熱鬧济榨,春花似錦、人聲如沸绿映。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叉弦。三九已至丐一,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淹冰,已是汗流浹背库车。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留樱拴,地道東北人柠衍。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像晶乔,于是被迫代替她去往敵國和親拧略。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容