Elasticsearch-6.2.4与Logstash-6.2.4 MySQL转ES迁移报错求助
解决Logstash "Could not find or load main class Files\Apache" 错误
这个错误我之前碰到好多次了,几乎都是路径里的空格在搞事情——尤其是Java的安装路径或者Logstash自身路径包含空格时,Windows系统解析类路径会把空格当成分隔符,导致找不到正确的主类。下面是具体的解决步骤:
1. 先检查Java的安装路径
Logstash 6.2.4依赖Java 8,你先确认下你的Java是不是装在带空格的路径里(比如默认的C:\Program Files\Java\jdk1.8.x)。如果是,有两个选择:
- 简单粗暴型:把Java重装到没有空格的路径,比如
C:\Java\jdk1.8.x; - 不想折腾重装:直接修改Logstash的启动脚本,给带空格的路径加引号。
2. 修改Logstash的启动脚本(适合不想重装Java的情况)
找到你的Logstash安装目录下的bin\logstash.bat,用记事本或者Notepad++打开:
- 先找设置
JAVA_HOME的行,比如原来的是set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_291,改成set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_291"(给整个路径加双引号); - 再检查脚本里所有用到
%JAVA_HOME%的地方,确保拼接后的路径也被正确包裹(比如涉及%JAVA_HOME%\lib的部分,也要保证整体在引号里)。
3. 确认Logstash的路径没有空格
虽然你现在的命令里Logstash路径是C:\logstash-6.2.4没问题,但也要确保它的父目录都不带空格(别放在C:\Program Files\logstash-6.2.4这种路径里),避免踩同样的坑。
4. 验证修改是否生效
保存bat文件后,重新开一个命令提示符,切换到Logstash的bin目录,再执行:
logstash -f logstash.conf
如果还是不行,可以先在命令行里临时设置带引号的JAVA_HOME再试:
set "JAVA_HOME=C:\Program Files\Java\jdk1.8.0_291" logstash -f logstash.conf
额外提醒:MySQL导入的配置要注意
等这个错误解决后,还要确保你的logstash.conf配置没问题:
- 先把对应版本的mysql-connector-java驱动下载好,放到Logstash的
logstash-6.2.4\vendor\jdbc目录下; - 配置文件里的路径要用正斜杠或者双反斜杠(避免转义错误),举个示例配置:
input { jdbc { jdbc_driver_library => "C:/logstash-6.2.4/vendor/jdbc/mysql-connector-java-5.1.47.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/your_database_name" jdbc_user => "your_mysql_username" jdbc_password => "your_mysql_password" statement => "SELECT * FROM your_table_name" } } output { elasticsearch { hosts => ["localhost:9200"] index => "your_es_index_name" document_id => "%{id}" # 用表的主键作为ES文档ID,避免重复导入 } stdout { codec => json_lines } # 控制台输出结果,方便调试 }
内容的提问来源于stack exchange,提问作者Ravi Ranjan Kumar
相关产品推荐
相关产品推荐

