1

次のパラメーター(デフォルトのパラメーター、変更されたパスのみ)を使用してliquibaseを実行しようとしています:

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はごくわずかです。

 <?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行目SEVERE6/5/122:42 am: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:
at liquibase.integration.commandline.Main.main(Main.java:134)原因:com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:SQL構文にエラーがあります。'????????????????'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。1行目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)atcom.mysql.jdbc.ConnectionImpl。
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)at liquibase.integration.commandline.CommandLineUtils.createDatabaseObject(CommandLineUtils.java:101)...2詳細

何が原因かわからない。liquibase2.0.5を実行しています。

ありがとう。

4

2 に答える 2

2

私は非常によく似た問題を抱えており、「????????????????」文字セットの問題が疑われました。追加:

  ?useJvmCharsetConverters=true

この投稿で提案されているように、liquibase.properties の URL 文字列に修正してくれました。

置き換えてみることをお勧めします:

  --url="jdbc:mysql://localhost/example"

に:

  --url="jdbc:mysql://localhost/example?useJvmCharsetConverters=true"

あなたのliquibaseコマンドラインで。

お役に立てれば。

于 2013-03-15T03:04:46.087 に答える
0

I suspect that the version of the MySQL server does not match the JDBC client jar which you are using. Version 5.1 is now quite old, the latest version of MySQL is 5.6

To investigate this you could use liquibase to generate a SQL file and try running this against your database using a tool like mysql.

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

Update

I ran my example using debug as follows:

java -jar liquibase.jar --logLevel=debug --logFile=update.log updateSQL

Produces a log file as follows:

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
..
..

Reproduced the same Apache Derby message (which looks to me like a default database check).

The important point is whether the MySQL connection message appears in your logfile?

As you can see Liquibase then performs SQL statements against it's DATABASECHANGELOG table to determine the status of the DB schema.

于 2012-06-05T20:29:09.547 に答える