一、准備
1、mysql
我這里准備了個數據庫mysqlEs,表User
結構如下
添加幾條記錄
2、創建elasticsearch索引
curl -XPUT 'localhost:9200/user?pretty'
3、准備mysql-connector
下載地址為https://dev.mysql.com/downloads/connector/j/ 下載后解壓可以得到connector的jar包 。
我把它放在了"/usr/share/logstash/bin/config-mysql/mysql-connector-java-8.0.13.jar"這個目錄下。
二、 新建mysql與es交互的配置文件
cd到logstash目錄bin目錄下,新建文件夾config-mysql,打開並寫入mysql.conf文件內容
cd /usr/share/logstash/bin
sudo mkdir config-mysql
cd config-mysql
vim /usr/share/logstash/bin/config-mysql/mysql.conf
input { stdin{ } jdbc { # 連接的數據庫地址和哪一個數據庫,指定編碼格式,禁用SSL協議,設定自動重連 jdbc_connection_string => "jdbc:mysql://localhost:3306/mysqlEs?characterEncoding=UTF-8&useSSL=false&autoReconnect=true" # 用戶名密碼 jdbc_user => "root" jdbc_password => "root" # jar包的位置 jdbc_driver_library => "/usr/share/logstash/bin/config-mysql/mysql-connector-java-8.0.13.jar" # mysql的Driver jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_default_timezone => "Asia/Shanghai" jdbc_paging_enabled => "true" jdbc_page_size => "1000" #statement_filepath => "config-mysql/test02.sql"
#注意這個sql不能出現type,這是es的保留字段
statement => "select * from User"
schedule => "* * * * *" #索引的類型 type => "user" } } output { elasticsearch { hosts => "localhost:9200" # index名 index => "user" document_type => "usertype" # 需要關聯的數據庫中有有一個id字段,對應索引的id號 document_id => "%{id}" } stdout { codec => json_lines } }
注意,目前我們這個output是所有的input都會輸出到這個index的。往往這不是我們想要的。
output {
#只輸出類型為user的input
if [type] == "user" {
elasticsearch {
hosts => "localhost:9200" # index名 index => "user" document_type => "usertype" # 需要關聯的數據庫中有有一個id字段,對應索引的id號 document_id => "%{id}" } stdout { codec => json_lines }
}
}
三、測試同步數據
輸入
/usr/share/logstash/bin/logstash -f /usr/share/logstash/bin/config-mysql/mysql.conf
等待一小會
可以看到一分鍾執行一次增量同步。
ctrl+c退出
有個提示 warning
WARNING: Could not
find
logstash.yml
which
is typically located
in
$LS_HOME
/config
or
/etc/logstash
. You can specify the path using --path.settings. Continuing using the defaults
Could not
find
log4j2 configuration at path
//usr/share/logstash/config/log4j2
.properties. Using default config
which
logs errors to the console
解決辦法:
mkdir -p /usr/share/logstash/config/ ln -s /etc/logstash/* /usr/share/logstash/config chown -R logstash:logstash /usr/share/logstash/config/ bin/logstash -e 'input { stdin { } } output { stdout {} }'
查詢看看有沒有同步過來
curl -XGET 'localhost:9200/user/_search?pretty'
過程中會遇到一些bug,如權限不夠的話改變登錄用戶為root
還可以去/var/log/logstash看日志
mysql數據自動后台同步
有心的同學可能發現,Ctrl+C退出后就不再同步了。這是因為我們的conf文件沒有放置在logstash的默認目錄下,只需要copy下就可以了。
cp /usr/share/logstash/bin/config-mysql/mysql.conf /etc/logstash/conf.d/
service logstash.service restart
再測試下,發現正常同步了。