mysql數據導入es


 

 

1,py-mysql-elasticsearch-sync《github 工具》

        簡介:
                python版本的mysql導入es的插件
 
                通過配置config.yaml文件,該插件可以將mysql的數據導入到es中。
                使用:
                        es-sync  config.xml
                程序流程:
                        思路為:1分析mysqldump導出數據     - >  2分析binlog
 
                        首先;會執行mysqldump指令,將mysql中的數據和數據表定義提取出來。然后使用xml解析出需要使用的部分。對比自定義的mapping規則,選擇id和字段。最終批量上傳給es服務器。
                        其次;程序會讀取mysql的binlog,並從binlog第一行開始讀取,直到binlog最后一行,同時將程序執行的binlog位置記錄到binlog.info中,用於下次從此開始導入數據。
                        最后;若已經存在binlog.info。該插件不會執行第一步的操作,而是直接從binlog.info記錄的位置開始導入數據。
 
                以下操作說明:
                        如下操作是將數據庫清空后,打開了數據庫binlog,然后往數據庫插入數據。數據插入完畢后,開始向es導數據。
                        因此遇到了409版本錯誤。  (因為mysqldump導出的數據就是binlog中對應的數據操作記錄)                   
        
        安裝:
            pip install  py-mysql-elasticsearch-sync
            注意可能會出現依賴包版本沖突  ---   pip  install --ignore-installed xxxx

 

    添加開啟binlog的mysql配置

        在mysql配置為恩建中添加以下配置
        [mysqld_safe]
        log-bin=mysql-bin
        binlog_format=mixed
        max_binlog_size=500M
        binlog-do-db=testdata_big
        binlog-ignore-db=mysql
        server-id=1
 
    查看mysql的binlog記錄位置
        mysql> show variables like '%log_bin%';
        +---------------------------------+-------------------------------------------------------+
        | Variable_name                   | Value                                                 |
        +---------------------------------+-------------------------------------------------------+
        | log_bin                         | ON                                                    |
        | log_bin_basename                | /opt/lovelsl/MessageSoft/Mysql/data/mysql-bin       |
        | log_bin_index                   | /opt/lovelsl/MessageSoft/Mysql/data/mysql-bin.index |
        | log_bin_trust_function_creators | OFF                                                   |
        | log_bin_use_v1_row_events       | OFF                                                   |
        | sql_log_bin                     | ON                                                    |
        +---------------------------------+-------------------------------------------------------+
        6 rows in set (0.00 sec)
 
    mysql的binlog處理
        重置所有的binlog
        reset  master
        刪除某個binlog文件之前的所有binlog文件
         purge binary logs to 'bin-log.000021';
        查看日志
         show binary logs;
 
    在導入數據到es之前,先完成es索引的創建,以及es索引中mapping的定義
            導入文件,自動生成索引,一般被禁用。
    創建索引:
        一般為了安全性,禁止提交數據時自動創建索引。
        curl -XPUT  -H "Content-Type: application/json" "localhost:9200/testdata"
 
    創建索引的mapping:
        curl -XPUT -H "Content-Type: application/json"  "127.0.0.1:9200/testdata/_mapping/nodes" -d '
        {
            "properties": {
                "id": {
                    "type": "integer"
                },
                "node_flag": {
                    "type": "integer"
                },
                "owner_uid": {
                    "type": "keyword"
                },
                "parent_uid": {
                    "type": "keyword"
                },
                "node_name": {
                    "type": "keyword"
                },
                "group_name": {
                    "type": "keyword"
                },
                "interface": {
                    "type": "keyword"
                },
                "custum_name": {
                    "type": "keyword"
                },
                "osname": {
                    "type": "keyword"
                },
                "osversion": {
                    "type": "keyword"
                },
                "update_time": {
                    "type": "keyword"
                },
                "last_active_time": {
                    "type": "keyword"
                },
                "last_login_time": {
                    "type": "keyword"
                },
                "mac": {
                    "type": "keyword"
                },
                "last_local_ip": {
                    "type": "keyword"
                },
                "last_local_ip6": {
                    "type": "keyword"
                },
                "create_time": {
                    "type": "keyword"
                },
                "create_ip": {
                    "type": "keyword"
                },
                "long_ip": {
                    "type": "integer"
                }
            }
        }'      
 
修改es 的mapping:一般而言,mapping一旦創建,只能增加字段,而不能修改已經存在的mapping字段,但是允許增加一個字段。但一般多采用重建索引的方式。
這里由於long_ip的type為integer不能存儲ip地址對應的大整數,將修改為long
 
刪除索引:
        [root@jiangmin /]# curl -XDELETE "localhost:9200/testdata"
        注意,不要帶上type
重建索引:
         curl -XPUT  -H "Content-Type: application/json" "localhost:9200/testdata"
重建索引的mapping
        同上,不做重復操作了
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM