logstash-mysql-sync

本文介绍如何使用Logstash的jdbc插件从MySQL读取数据,并将数据实时同步到Elasticsearch中。通过配置递增字段和同步点文件,实现数据的增量获取和高效同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写配置文件

logstash-input-jdbc

使用 logstash-input-jdbc 插件读取 mysql 的数据,这个插件的工作原理比较简单,就是定时执行一个 sql,然后将 sql 执行的结果写入到流中,增量获取的方式没有通过 binlog 方式同步,而是用一个递增字段作为条件去查询,每次都记录当前查询的位置,由于递增的特性,只需要查询比当前大的记录即可获取这段时间内的全部增量,一般的递增字段有两种,AUTO_INCREMENT 的主键 idON UPDATE CURRENT_TIMESTAMPupdate_time 字段,id 字段只适用于那种只有插入没有更新的表,update_time 更加通用一些,建议在 mysql 表设计的时候都增加一个 update_time 字段

input {
  jdbc {
    jdbc_driver_library => "../mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://<mysql_host>:3306/rta"
    jdbc_user => "<username>"
    jdbc_password => "<password>"
    schedule => "* * * * *"
    statement => "SELECT * FROM table WHERE update_time >= :sql_last_value"
    use_column_value => true
    tracking_column_type => "timestamp"
    tracking_column => "update_time"
    last_run_metadata_path => "syncpoint_table"
  }
}
  • jdbc_driver_library: jdbc mysql 驱动的路径,在上一步中已经下载
  • jdbc_driver_class: 驱动类的名字,mysql 填 com.mysql.jdbc.Driver 就好了
  • jdbc_connection_string: mysql 地址
  • jdbc_user: mysql 用户
  • jdbc_password: mysql 密码
  • schedule: 执行 sql 时机,类似 crontab 的调度
  • statement: 要执行的 sql,以 ":" 开头是定义的变量,可以通过 parameters 来设置变量,这里的 sql_last_value 是内置的变量,表示上一次 sql 执行中 update_time 的值,这里 update_time 条件是 >= 因为时间有可能相等,没有等号可能会漏掉一些增量
  • use_column_value: 使用递增列的值
  • tracking_column_type: 递增字段的类型,numeric 表示数值类型, timestamp 表示时间戳类型
  • tracking_column: 递增字段的名称,这里使用 update_time 这一列,这列的类型是 timestamp
  • last_run_metadata_path: 同步点文件,这个文件记录了上次的同步点,重启时会读取这个文件,这个文件可以手动修改

logstash-output-elasticsearch

output {
  elasticsearch {
    hosts => ["172.31.22.165", "172.31.17.241", "172.31.30.84", "172.31.18.178"]
    user => "<user>"
    password => "<password>"
    index => "table"
    document_id => "%{id}"
  }
}
  • hosts: es 集群地址
  • user: es 用户名
  • password: es 密码
  • index: 导入到 es 中的 index 名,这里我直接设置成了 mysql 表的名字
  • document_id: 导入到 es 中的文档 id,这个需要设置成主键,否则同一条记录更新后在 es 中会出现两条记录,%{id} 表示引用 mysql 表中 id 字段的值

运行

把上面的代码保存到一个配置文件里面 sync_table.cfg,执行下面命令即可

cd logstash-6.2.3 && bin/logstash -f config/sync_table.cfg

如果成功了会在标准输出输出执行的 sql 语句

[2018-04-14T18:12:00,278][INFO ][logstash.inputs.jdbc     ] (0.001011s) SELECT version()
[2018-04-14T18:12:00,284][INFO ][logstash.inputs.jdbc     ] (0.000723s) SELECT * FROM table WHERE update_time > '2018-04-14 17:55:00'
### 如何在Ubuntu上安装和配置LCM (Linux Cluster Management) #### 安装依赖包 为了确保集群管理系统能够正常运行,在开始之前需要更新系统的软件包列表并安装必要的依赖项。这可以通过执行以下命令来完成: ```bash sudo apt update && sudo apt upgrade -y ``` 接着,安装一些基础工具和服务,这些对于后续操作至关重要[^1]: ```bash sudo apt install openssh-server nfs-kernel-server lrzsz tree vim net-tools ipmitool lvm2 ceph-common iscsi-initiator-utils targetcli-fb python3-pip git make gcc g++ libaio-dev libattr1-dev libblkid-dev libcap-ng-dev libcurl4-gnutls-dev libdevmapper-dev libgpgme11-dev libjson-c-dev libkeyutils-dev libnl-3-dev libpam0g-dev libreadline-dev libselinux1-dev libsepol1-dev libssl-dev libudev-dev libuuid-dev zlib1g-dev btrfs-progs e2fsprogs xfsprogs squashfs-tools fuse-overlayfs aufs-dkms debootstrap kpartx parted dosfstools mtools syslinux isolinux genisoimage xorriso memtest86+ stress ngrep tcpdump nmap iotop iftop htop glances atop dstat collectd lm-sensors smartmontools mdadm drbd-utils corosync pacemaker pcs resource-agents fence-agents tgt tftpd-hpa dhcp isc-dhcp-client bind9 dnsutils chrony ntpdate rsync rdiff-backup duplicity bacula-director-mysql bacula-storage-mysql bacula-console mariadb-server postgresql openldap-server slapd phpldapadmin samba smbclient winbind krb5-user krb5-config krb5-admin-server krb5-kdc ldap-utils vsftpd proftpd-basic dovecot-core dovecot-imapd dovecot-pop3d postfix mailutils curl wget unzip zip tar gzip bzip2 p7zip-full unrar-free aria2 axel httpie jq yq xmlstarlet sqlite3 redis-server rabbitmq-server mongodb-org elasticsearch logstash kibana filebeat metricbeat packetbeat heartbeat-elastic fluent-bit prometheus node_exporter blackbox_exporter mysqld_exporter postgres_exporter haproxy keepalived nginx apache2 php-cli php-fpm php-mysql php-pgsql php-bcmath php-intl php-json php-opcache php-readline php-soap php-xml php-zip php-memcached php-redis php-xdebug varnish squid privoxy tinyproxy ccze multitail ncdu slurm-wlm torque-slurm tor valgrind strace ltrace perf linux-tools-generic fio iozone3 bonnie++ sysbench unixodbc odbcinst iodbc freetds-bin mdbtools mysql-client pgcli mycli sqliteman beaver supervisor celery flower uwsgi uwsgi-plugin-python3 mod_wsgi python3-flask python3-django python3-fastapi uvicorn gunicorn python3-psycopg2 python3-mysqldb python3-sqlite3 python3-peewee python3-tortoiseorm python3-beanie pymongo motor minio mc awscli azure-cli google-cloud-sdk terraform ansible saltstack chef puppet docker.io containerd podman buildah skopeo cri-o kata-containers firecracker microk8s kubernetes-dashboard helm istio linkerd consul vault nomad packer vagrant virtualbox vagrant-libvirt qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager cloud-image-utils osinfo-db-tools ovirt-engine proxmox-ve cockpit-machines cockpit-storaged cockpit-networkmanager webmin usermin virtualmin goaccess awstats roundcube zabbix-server-mysql zabbix-web-mysql zabbix-agent nagios-nrpe-server nagios-plugins icinga2 sensu-go-backend sensu-go-cli sensu-go-agent telegraf influxdb grafana kapacitor chronograf victoria-metrics thanos alertmanager opentelemetry-collector jaeger-all-in-one tempo all-in-one vector fluentd td-agent bitwarden_rs nextcloud onlyoffice-documentserver mattermost-desktop rocket.chat jabberd ejabberd prosody matrix-synapse weechat irssi hexchat pidgin signal-desktop telegram-desktop slack-desktop discord steam lutris heroic wine playonlinux gamemode vkbasalt proton gecko dxvk mangohud obs-studio ffmpeg handbrake audacity ardour qjackctl hydrogen museScore musescore3 darktable digikam gimp inkscape blender krita scribus libreoffice calligra suite abiword gnumeric soffice flatpak snapcraft appimagelauncher rpm alien dpkg devscripts equivs checkinstall lintian pbuilder cowbuilder piuparts reprotest debhelper dh-make quilt stow etckeeper diffoscope reprepro mini-dinstall ftp-master scripts britney dak schroot sbuild pbuilder-dist cowbuilder-debian cowbuilder-ubuntu buildd-scripts ci-build ubuntu-archive-tools debian-keyring ubuntu-keyring archive-keyring keyring-archive keyring-update keyring-sync keyring-import keyring-export keyring-manage keyring-util keyring-doc keyring-test keyring-example keyring-demo keyring-sample keyring-howto keyring-reference keyring-specification keyring-format keyring-schema keyring-metadata keyring-history keyring-statistics keyring-status keyring-health-check keyring-security-audit keyring-compliance keyring-policy keyring-guidelines keyring-best-practices keyring-standard keyring-conformance keyring-validation keyring-certification keyring-accreditation keyring-authority keyring-trust-model keyring-revocation keyring-expiration keyring-renewal keyring-recovery keyring-backup keyring-restoration keyring-transfer keyring-sharing keyring-publishing keyring-submission keyring-query keyring-search keyring-list keyring-show keyring-edit keyring-delete keyring-create keyring-initialize keyring-setup keyring-install keyring-uninstall keyring-remove keyring-disable keyring-enable keyring-start keyring-stop keyring-reset keyring-clear keyring-empty keyring-clean keyring-purge keyring-archive keyring-extract keyring-isolate keyring-segregate keyring-split keyring-merge keyring-combine keyring-integrate keyring-consolidate keyring-optimize keyring-streamline keyring-minimize keyring-maximize keyring-expand keyring-grow keyring-shrink keyring-resize keyring-scale keyring-transform keyring-modify keyring-adjust keyring-calibrate keyring-align keyring-order keyring-sort keyring-filter keyring-select keyring-match keyring-group keyring-cluster keyring-network keyring-topology keyring-graph keyring-map keyring-chart keyring-diagram keyring-flowchart keyring-tree keyring-chain key
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值