Open mm20140616 opened 5 years ago
可以提一个pull request
这个问题只要将那个问题修改一下再重新发版就好了,修改liquibase-core的源码即可,choerodon-tool-liquibase代码没有变化。
@zhaoxiaoyu19951122 你好,你可以通过向TIDB 提issue 来解决这个问题。Choerodon 使用的liquibase 会与官方保持一致。尽量不在liquibase的官方依赖上做修改。
@zhaoxiaoyu19951122 Hi, 我是 TiDB 的开发者,请问能提供以下报错的语句以及 Schema 吗?以及通过 select tidb_version()
看一下版本?
@winkyao 问题原因:在执行更新语句时,bit
数据类型的字段的值无法更新为1。建表语句如下:
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `DATABASECHANGELOGLOCK`;
CREATE TABLE `DATABASECHANGELOGLOCK` (
`ID` int(11) NOT NULL,
`LOCKED` bit(1) NOT NULL,
`LOCKGRANTED` datetime DEFAULT NULL,
`LOCKEDBY` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
INSERT INTO `DATABASECHANGELOGLOCK` VALUES ('1', '', null, null);
更新语句如下:
UPDATE DATABASECHANGELOGLOCK SET LOCKED=1 WHERE ID=1 AND LOCKED=0
执行select tidb_version()
获取的数据库版本如下:
Release Version: None
Git Commit Hash: 508f5dd6263e4896d53fb37af99f3a1b747de713
Git Branch: master
UTC Build Time: 2018-10-27 09:59:28
GoVersion: go version go1.11 linux/amd64
Race Enabled: false
TiKV Min Version: 2.1.0-alpha.1-ff3dd160846b7d1aed9079c389fc188f7f5ea13e
Check Table Before Drop: false
抛出异常如下:
[SQL] UPDATE DATABASECHANGELOGLOCK SET LOCKED=1 WHERE ID=1 AND LOCKED=0
[Err] 2013 - Lost connection to MySQL server during query
在
TiDB
数据库环境下使用choerodon-tool-liquibase
执行groovy 脚本时会报出连接断开的错误。根据报错信息发现问题是
liquibase.lockservice.StandardLockService#init
方法在数据库中生成的databasechangeloglock
表中LOCKED
为bit
类型,liquibase.lockservice.StandardLockService#acquireLock
方法在获取锁时会将该字段改为1
,TiDB
中bit
类型更新为1
时会发生错误2013 - Lost connection to MySQL server during query
(应该是TiDB
的BUG)。 在liquibase 官方文档中标注的LOCKED
为int
类型。但是代码并不是int
类型,可以通过覆盖文件liquibase.sqlgenerator.core.CreateDatabaseChangeLogLockTableGenerator#generateSql
修改字段类型来解决这个问题。