Liquibase MySQL: синтаксическая ошибка рядом с "????????????????"

Я пытаюсь запустить 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 ТЯЖЕЛО 6/5/12 2:42 утра :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) Вызвано: 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.MysqlIOPacket (MysqlIOPacket (MysqlIOPacket). java: 4028) в com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:2490) в com.mysql.jdbc.MysqlIO.sqlQueryDirect (MysqlIO.java:2651) в com.mysql.jdImc.exe (ConnectionImpl .java: 2677) в com.mysql.jdbc.ConnectionImpl.configureClientCharacterSet (ConnectionImpl.java:1943) в com.mysql.jdbc.ConnectionImpl.initializePropsFromServer (ConnectionImpl.java:3541) в com.mysqnectionOnnectionOnline.jdb. 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) ... еще 2

Понятия не имею, что могло вызвать это. Я использую Liquibase 2.0.5.

Спасибо.


person Gediminas    schedule 05.06.2012    source источник


Ответы (2)


Я подозреваю, что версия сервера MySQL не соответствует клиентской банке JDBC, которую вы используете. Версия 5.1 сейчас довольно старая, последняя версия MySQL - 5.6.

Чтобы исследовать это, вы можете использовать Liquibase для создания файла SQL и попробовать запустить его в своей базе данных с помощью такого инструмента, как 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

Обновлять

Я запустил свой пример, используя отладку, следующим образом:

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

Воспроизведено то же сообщение Apache Derby (которое мне кажется проверкой базы данных по умолчанию).

Важный момент: появляется ли сообщение о подключении MySQL в вашем файле журнала?

Как вы можете видеть, Liquibase затем выполняет операторы SQL для своей таблицы DATABASECHANGELOG, чтобы определить состояние схемы БД.

person Mark O'Connor    schedule 05.06.2012
comment
Но 5.1.20 - это новейшая версия J Connector. Сервер работает под управлением MySQL 5.5.20, который, согласно Документам, поддерживается соединителем 5.1.X. - person Gediminas; 07.06.2012
comment
@Gediminas Как выглядит сгенерированный SQL? Я попытался воспроизвести вашу ошибку, но потерпел неудачу. - person Mark O'Connor; 08.06.2012
comment
Мне очень жаль, что я ответил так медленно. Это та же ошибка (проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с '????????????????' в строке 1). Я также попытался установить уровень журнала для отладки, выдает еще одну дополнительную строку: DEBUG 6/13/12 1:08 a.m.:liquibase: Unable to load/access Apache Derby driver class to check version Однако не отображает никаких запросов. - person Gediminas; 13.06.2012
comment
@Gediminas Apache Derby? Но ваш URL-адрес JDBC пытается подключиться к MySQL? Очень странно. - person Mark O'Connor; 13.06.2012
comment
нет, сообщение MySQL не появляется. Только первый, Дерби. Хотя, если я изменяю имя пользователя на какое-то недопустимое, несуществующее или делаю то же самое с именем базы данных, он печатает ошибку MySQL, которая не может найти указанную базу данных или доступ запрещен для пользователя. java --version вывод: java version "1.5.0" gij (GNU libgcj) version 4.4.6 20110731 (Red Hat 4.4.6-3) Сервер работает под управлением 64-битной CentOS 6.2 с версией ядра 2.6.32-042stab055.12 - person Gediminas; 16.06.2012

person    schedule
comment
Сервер, на котором возникла проблема, больше не работает, поэтому я не могу сказать, исправил бы он это, но все равно спасибо! возможно поможет кому-то еще в будущем :) - person Gediminas; 15.03.2013