首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Liquibase MySQL:“?”附近的语法错误

问Liquibase MySQL:“?”附近的语法错误
EN

Stack Overflow用户
提问于 2012-06-05 01:49:11
回答 1查看 7.4K关注 0票数 1

我试图使用以下参数运行液化库(默认参数,只修改路径):

代码语言:javascript
复制
liquibase --driver=com.mysql.jdbc.Driver \
     --classpath=mysql-connector-java-5.1.20-bin.jar
     --changeLogFile=changelog.xml \
     --url="jdbc:mysql://localhost/example" \
     --username=root \
     migrate

changelog.xml是非常小的:

代码语言:javascript
复制
 <?xml version="1.0" encoding="UTF-8"?>   <databaseChangeLog  
 xmlns="http://www.liquibase.org/xml/ns/dbchangelog"  
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
          http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">  
 </databaseChangeLog>

我得到的错误是:

Liquibase失败:您的SQL语法出现错误;请检查与MySQL服务器版本对应的手册,以获得使用“?”附近的正确语法。在第1行严重的6/5/12凌晨2:42 :42:液化基:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得使用“?”的正确语法。在第1行( com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:),您的SQL语法出现了错误;请检查与MySQL服务器版本对应的手册,以获得使用“?”的正确语法。在liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:111) at liquibase.integration.commandline.Main.doMigration(Main.java:745)第1行 在由: liquibase.integration.commandline.Main.main(Main.java:134)引起的com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:中,您的SQL语法出现了错误;检查与MySQL服务器版本相对应的手册,以获得使用“?”附近的正确语法。一号线在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1049) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2677)在com.mysql.jdbc.ConnectionImpl.configureClientCharacterSet(ConnectionImpl.java:1943) at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3541) at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2443) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2213) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:797) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385) 在com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305) at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:101) ...2 more

不知道是什么引起的。我运行的是2.0.5液基。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2012-06-05 20:29:09

我怀疑MySQL服务器的版本与您正在使用的不匹配。5.1版已经很旧了,MySQL的最新版本是5.6

要调查这一点,您可以使用液化库生成一个SQL文件,并尝试使用像mysql这样的工具在数据库中运行这个文件。

代码语言:javascript
复制
liquibase --driver=com.mysql.jdbc.Driver \
     --classpath=mysql-connector-java-5.1.20-bin.jar
     --changeLogFile=changelog.xml \
     --url="jdbc:mysql://localhost/example" \
     --username=root \
     updateSQL

更新

我使用调试运行我的示例,如下所示:

代码语言:javascript
复制
java -jar liquibase.jar --logLevel=debug --logFile=update.log updateSQL

生成如下日志文件:

代码语言:javascript
复制
DEBUG 13/06/12 19:08:liquibase: Unable to load/access Apache Derby driver class to check version
DEBUG 13/06/12 19:08:liquibase: Connected to liquibase@localhost@jdbc:mysql://localhost:3306/liquibase
INFO 13/06/12 19:08:liquibase: Successfully acquired change log lock
DEBUG 13/06/12 19:08:liquibase: Executing QUERY database command: SELECT MD5SUM FROM `DATABASECHANGELOG` WHERE MD5SUM IS NOT NULL
INFO 13/06/12 19:08:liquibase: Reading from `DATABASECHANGELOG`
DEBUG 13/06/12 19:08:liquibase: Executing QUERY database command: SELECT FILENAME,AUTHOR,ID,MD5SUM,DATEEXECUTED,ORDEREXECUTED,TAG,EXECTYPE FROM `DATABASECHANGELOG` ORDER BY DATEEXECUTED ASC, ORDEREXECUTED ASC
..
..

复制了相同的Apache消息(在我看来,这是一个默认的数据库检查)。

重要的一点是MySQL连接消息是否出现在日志文件中?

如您所见,Liquibase然后对它的DATABASECHANGELOG表执行SQL语句,以确定DB模式的状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10890590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档