近日在spring-boot:2.2.2.release中启用了flyway。但在生产环境中启动却发生了如下错误:DB: Statement violates GTID consistency: CREATE TABLE ... SELECT. (SQL State: HY000 - Error Code: 1786)
查看日志获得详细信息如下:
-----------------
SQL State : HY000
Error Code : 1786
Message : Statement violates GTID consistency: CREATE TABLE ... SELECT.
Location : ()
Line : 1
Statement : CREATE TABLE `task`.`flyway_schema_history` (
`installed_rank` INT NOT NULL,
`version` VARCHAR(50),
`description` VARCHAR(200) NOT NULL,
`type` VARCHAR(20) NOT NULL,
`script` VARCHAR(1000) NOT NULL,
`checksum` INT,
`installed_by` VARCHAR(100) NOT NULL,
`installed_on` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`execution_time` INT NOT NULL,
`success` BOOL NOT NULL,
CONSTRAINT `flyway_schema_history_pk` PRIMARY KEY (`installed_rank`)
) ENGINE=InnoDB AS SELECT 1 as "installed_rank", '1.0.0' as "version", '<< Flyway Baseline >>' as "description", 'BASELINE' as "type", '<< Flyway Baseline >>' as "script", NULL as "checksum", 'task' as "installed_by", CURRENT_TIMESTAMP as "installed_on", 0 as "execution_time", TRUE as "success"
根据以上日志获知:flyway在初始化其依赖的flyway_schema_history表时发生了1786错误。查阅相文资料获知:mysql认为create table xxx as select存在一定的风险,所以默认禁止用户这么做。
问题原因猜出来后,解决的方法也就有了。方案有二:
一、将mysql的相关安全设置关闭,即--enforce-gtid-consistency=false。
二、手动指定flyway的版本(经测试5.2.4版本并不存在该问题)
笔者选用的第二种。
org.flywaydb
flyway-core
5.2.4