Liquibase MySQL:靠近';的语法错误';

Liquibase MySQL:靠近';的语法错误';,mysql,liquibase,Mysql,Liquibase,我正在尝试使用以下参数运行liquibase(默认参数,仅修改路径): changelog.xml非常小: <?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:schemaL

我正在尝试使用以下参数运行liquibase(默认参数,仅修改路径):

changelog.xml非常小:

 <?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处使用接近“??”的语法 a、 m:liquibase:您的SQL语法有错误;检查手册 对应于MySQL服务器版本的正确语法 在1号线的“??”附近使用 liquibase.exception.DatabaseException: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:您有一个错误 在SQL语法中;检查与您的MySQL对应的手册 在“”附近使用正确语法的服务器版本 第1行在 liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:111) 在liquibase.integration.commandline.Main.doMigration(Main.java:745)
在liquibase.integration.commandline.Main.Main(Main.java:134)中 by:com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:您有一个 SQL语法错误;检查与您的产品相对应的手册 MySQL服务器版本,以便在附近使用正确的语法 在1号线的 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1049)位于 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)位于 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)位于 com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)位于 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)位于 com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2677)位于 com.mysql.jdbc.ConnectionImpl.configureClientCharacterSet(ConnectionImpl.java:1943) 在 com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3541) 在 com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2443) 位于com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2213) 位于com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:797) com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385)
在 com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305) 在 liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:101) …还有两个

我不知道是什么引起的。我正在运行liquibase 2.0.5


谢谢。

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

为了研究这一点,您可以使用liquibase生成一个SQL文件,并尝试使用类似的工具对数据库运行该文件

更新 我使用debug运行示例,如下所示:

java -jar liquibase.jar --logLevel=debug --logFile=update.log updateSQL
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
..
..
生成一个日志文件,如下所示:

java -jar liquibase.jar --logLevel=debug --logFile=update.log updateSQL
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
..
..
复制了相同的ApacheDerby消息(在我看来,这就像默认的数据库检查)

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


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

我遇到了一个非常类似的问题,而“????????”使我怀疑存在字符集问题。追加:

?useJvmCharsetConverters=true ?useJvmCharsetConverters=真 在liquibase.properties中指向url字符串,如中所建议的,已为我修复了它

我建议您尝试更换:

--url="jdbc:mysql://localhost/example" --url=“jdbc:mysql://localhost/example" 作者:

--url=“jdbc:mysql://localhost/example?useJvmCharsetConverters=true" 在liquibase命令行中


希望这有帮助。

但是5.1.20是J连接器的最新版本。服务器正在运行MySQL 5.5.20,根据文档,5.1.X连接器支持它。@Gediminas生成的SQL是什么样子的?我试图重现你的错误,但失败了。我真的很抱歉反应这么慢。这是相同的错误(请查看与MySQL服务器版本对应的手册,以了解第1行“??”附近要使用的正确语法)。我还尝试将日志级别设置为debug,并增加了一行:
debug 6/13/12 1:08 a.m.:liquibase:无法加载/访问Apache Derby驱动程序类以检查版本
但不显示任何查询。@Gediminas Apache Derby?但是您的JDBCURL正在尝试连接到MySQL?非常奇怪。不,MySQL消息没有出现。只有第一个,德比。虽然如果我将用户名更改为无效的、不存在的,或者对数据库名称执行相同的操作,它会打印MySQL错误,即无法找到指定的数据库或拒绝用户访问<代码>java--version输出为:
java版本“1.5.0”
gij(GNU libgcj)版本4.4.6 20110731(Red Hat 4.4.6-3)
服务器正在运行64位CentOS 6.2,内核版本为2.6.32-042stab055.12出现问题的服务器不再运行,因此我无法判断它是否会修复它,不过还是要谢谢你!也许将来会帮助别人:) --url="jdbc:mysql://localhost/example?useJvmCharsetConverters=true"