要求通過logstash從oracle中獲取數據,然后相應的直接傳入mysql中去。
基本測試成功的配置文件如下:
input {
stdin {
}
jdbc {
jdbc_connection_string => "jdbc:oracle:thin:@//192.168.217.135:1521/orcl"
jdbc_user => "root"
jdbc_password => "123"
jdbc_driver_library => "/usr/share/logstash/config/ojdbc6.jar"
jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
jdbc_paging_enabled => "true"
jdbc_page_size => "50000"
jdbc_default_timezone => "Asia/Shanghai"
statement => "select date_time from PERSON"
record_last_run => "true"
use_column_value => "true"
tracking_column_type => "timestamp"
tracking_column => "create_datetime"
last_run_metadata_path => "/usr/share/logstash/config/last_datetime/PERSON"
clean_run => "false"
lowercase_column_names => "false"
}
}
output {
jdbc {
driver_jar_path => "/usr/share/logstash/config/mysql-connector-java-5.1.7-bin.jar"
driver_class => "com.mysql.jdbc.Driver"
connection_string => "jdbc:mysql://192.168.217.136:3306/orcl?autoReconnect=true&user=root&password=123"
statement => ["insert into PERSON(date_time) values(?)","%{date_time}"]
}
}
其中沒有用到過濾方法,需求僅僅用了logstash-input-jdbc和logstash-output-jdbc插件來完成數據庫數據導入的,安裝插件的命令
./bin/logstash-plugin install logstash-input-jdbc
logstash啟動后如果配置或者環境不正確,會有相應的報錯,主要注意 [ ] 里的是哪方面的報錯,里邊會得到相應的報錯信息
我排查了一些問題,沒有記錄日志,但是無非就是
配置文件出錯,比如說JDBC連接數據庫的url等等
sql沒有寫對,注意statement字段寫獲取的和插入的sql,mysql中要建立相同的字段
防火牆沒有關閉
驅動包過舊
等等
其中遇到的最晚解決的問題是,從oracle獲取的時間字段,傳入不了mysql,想到了filter方法進行時間過濾,但是沒有配置好,后來突然想到了給mysql改一下數據類型,改成varchar,oracle的date類型和mysql的是不一樣的,這個需要注意,改成字符串類型完美的解決了這個問題,因為需求僅僅是灌入mysql,如果是主從復制或者數據庫完全遷移就需要正確的思路了,這個思路雖然可行,但是加入數據庫要進行遷移連接,web服務連接到mysql,那么在界面的輸入可能會又變化,所以還是需要研究oracle如何匹配mysql的時間字段。
好的解決方案是相同數據庫主從備份或ELK,但是這種也是可行的,也可以做到數據實時傳輸,類似於主從備份,上述的方法需要在目標庫中建立相同的字段和數據類型,有時候數據類型的轉換也是個問題,
更簡單的方法是用navicat premium,缺點是僅僅數據遷移,無法實時更新數據