我不能用索尔索引我的数据库。 我总是得到`索引失败。 回滚所有的变化

我不能索引我的mysql数据库与solr(4.0)。 我总是Indexing failed. Rolled back all changes. Indexing failed. Rolled back all changes. 我已经回顾以前的答案,我无法弄清楚是什么问题。 我在Docker(passenger phusion和ubuntu 14.04)容器中运行它。 有任何想法吗? 我已经花了几天的时间来弄清楚这一点。

DOCKER组合

 version: '2' services: search: env_file: .env build: . ports: - "8080:8080" volumes: - ~/.m2:/root/.m2 # - ~/.solr:/data/solr/ - ./docker:/home/app/docker db: env_file: .env image: mysql:5.6 ports: - "3307:3306" 

SOLR_HOME

 ls -l /data/solr/collection1/conf/ -rw-r--r-- 1 tomcat7 tomcat7 7601 Oct 17 15:35 data-config.xml -rw-r--r-- 1 tomcat7 tomcat7 0 Oct 17 15:35 dataimport.properties -rw-r--r-- 1 tomcat7 tomcat7 561 Oct 17 15:35 log4j.properties -rw-r--r-- 1 tomcat7 tomcat7 707 Oct 17 15:35 log4j.xml -rw-r--r-- 1 tomcat7 tomcat7 12302 Oct 17 15:35 schema.xml -rw-r--r-- 1 tomcat7 tomcat7 479 Oct 17 15:35 solrconfig-qf.xml -rw-r--r-- 1 tomcat7 tomcat7 41383 Oct 17 15:35 solrconfig.xml -rw-r--r-- 1 tomcat7 tomcat7 148 Oct 17 15:35 solrcore.properties -rw-r--r-- 1 tomcat7 tomcat7 138 Oct 17 15:35 solrcore.properties.template 

Solr Admin

Solr Admin

data-config.xml https://gist.github.com/anonymous/ce99aa9277f0295a2a52768fb7866e6a

 <dataConfig> <dataSource name="db" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/datacite" user="root" password="" readonly="true" batchSize="-1" /> <!-- for batchSize=-1 see DIH FAQ --> <dataSource name="field" type="FieldReaderDataSource" /> <document> <!-- SOLR-2104 --> <!-- using delta import as proposed in http://wiki.apache.org/solr/DataImportHandlerDeltaQueryViaFullImport --> 

Sorl核心属性

 mds.db.url=jdbc:mysql://localhost:3306/datacite?useUnicode=true&characterEncoding=UTF8 mds.db.user=datacite mds.db.password= mds.testprefix=10.5072 

solrconfig.xml中

 <!-- AutoCommit Perform a hard commit automatically under certain conditions. Instead of enabling autoCommit, consider using "commitWithin" when adding documents. http://wiki.apache.org/solr/UpdateXmlMessages maxDocs - Maximum number of documents to add since the last commit before automatically triggering a new commit. maxTime - Maximum amount of time in ms that is allowed to pass since a document was added before automaticly triggering a new commit. openSearcher - if false, the commit causes recent index changes to be flushed to stable storage, but does not cause a new searcher to be opened to make those changes visible. --> <autoCommit> <maxTime>15000</maxTime> <openSearcher>false</openSearcher> </autoCommit> <!-- softAutoCommit is like autoCommit except it causes a 'soft' commit which only ensures that changes are visible but does not ensure that data is synced to disk. This is faster and more near-realtime friendly than a hard commit. --> <!-- <autoSoftCommit> <maxTime>1000</maxTime> </autoSoftCommit> --> <!-- Update Related Event Listeners Various IndexWriter related events can trigger Listeners to take actions. postCommit - fired after every commit or optimize command postOptimize - fired after every optimize command --> <!-- The RunExecutableListener executes an external command from a hook such as postCommit or postOptimize. exe - the name of the executable to run dir - dir to use as the current working directory. (default=".") wait - the calling thread waits until the executable returns. (default="true") args - the arguments to pass to the program. (default is none) env - environment variables to set. (default is none) --> <!-- This example shows how RunExecutableListener could be used with the script based replication... http://wiki.apache.org/solr/CollectionDistribution --> <!-- <listener event="postCommit" class="solr.RunExecutableListener"> <str name="exe">solr/bin/snapshooter</str> <str name="dir">.</str> <bool name="wait">true</bool> <arr name="args"> <str>arg1</str> <str>arg2</str> </arr> <arr name="env"> <str>MYVAR=val1</str> </arr> </listener> --> <!-- Enables a transaction log, currently used for real-time get. "dir" - the target directory for transaction logs, defaults to the solr data directory. --> <updateLog> <str name="dir">/data/solr/collection1/data</str> </updateLog> 

  <dataDir>/data/solr/collection1/data</dataDir> <lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" /> <lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" /> <lib dir="../../../lib/" regex="mysql-connector-java-5.0.8-bin.jar" /> <requestHandler name="/admin/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> <lst name="invariants"> <str name="db.url">jdbc:mysql://localhost:3306/datacite?useUnicode=true&amp;amp;characterEncoding=UTF8</str> <str name="db.user">root</str> <str name="db.password"></str> <str name="testprefix">10.5072</str> </lst> </requestHandler> 

问题是我没有连接到MySQL数据库。 MySQL数据库主机是错误的 。 我明白了,感谢@MatsLindh。

docker撰写你的services的名称是他们的主机的名称。 所以,在我的情况下,MySQL数据库主机的名称是db (请参阅docker在上面的问题)。 我的错误是,我有一个环境variables中的MySQL数据库主机的名称$ DB_HOST = localhost。

我意识到,当我试图从solr容器连接到MySQL容器。 我必须做

 mysql --host=db --user=root --password= datacite 

因为

 mysql --host=localhost --user=root --password= datacite 

不工作。

就是这样了。 在docker撰写时,检查数据库主机的名字。

Interesting Posts