logstash-input-jdbc and logstash-ouput-jdbc


要求通過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,缺點是僅僅數據遷移,無法實時更新數據

 


免責聲明!

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



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