我尝试将icinga更新到2.9.1版本,并且为此需要在sql数据库上应用迁移。
迁移使用以下sql查询:
2.9.0迁移
CREATE TABLE `icingaweb_rememberme`(
-> id int(10) unsigned NOT NULL AUTO_INCREMENT,
-> username varchar(254) COLLATE utf8mb4_unicode_ci NOT NULL,
-> passphrase varchar(256) NOT NULL,
-> random_iv varchar(24) NOT NULL,
-> http_user_agent text NOT NULL,
-> expires_at timestamp NULL DEFAULT NULL,
-> ctime timestamp NULL DEFAULT NULL,
-> mtime timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
-> PRIMARY KEY (id)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
2.9.1迁移
ALTER TABLE `icingaweb_rememberme`
-> MODIFY random_iv varchar(32) NOT NULL;
问题是,当我尝试执行时,我得到了冲突的错误消息
完整的迁移日志
MariaDB [(none)]> use icingaweb2
Database changed
MariaDB [icingaweb2]> CREATE TABLE `icingaweb_rememberme`(
-> id int(10) unsigned NOT NULL AUTO_INCREMENT,
-> username varchar(254) COLLATE utf8mb4_unicode_ci NOT NULL,
-> passphrase varchar(256) NOT NULL,
-> random_iv varchar(24) NOT NULL,
-> http_user_agent text NOT NULL,
-> expires_at timestamp NULL DEFAULT NULL,
-> ctime timestamp NULL DEFAULT NULL,
-> mtime timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
-> PRIMARY KEY (id)
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
ERROR 1050 (42S01): 表'icingaweb_rememberme'已经存在
MariaDB [icingaweb2]> ALTER TABLE `icingaweb_rememberme`
-> MODIFY random_iv varchar(32) NOT NULL;
ERROR 1932 (42S02): 表'icingaweb2.icingaweb_rememberme'在引擎中不存在
Icinga当前显示此错误(类似于第二个迁移错误)
SQLSTATE[42S02]: 基表或视图不存在:1932 表'icingaweb2.icingaweb_rememberme'在引擎中不存在
问题
我如何应用迁移,以便集合icingaweb2具有表icingaweb_rememberme
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
I found the anwser.
MySQL数据库创建了一个名为
icingaweb_rememberme.idb的文件,但没有相应的frm文件。我已经删除了
icingaweb_rememberme表,移除了在MySQL目录中剩下的.idb文件,并使用单个命令重新创建了该表(已经应用了第二次迁移)。这可能不是完整的答案,或者可能有更简单的解决方案,但对我来说这是有效的。
如果您计划删除或移除文件和表,请记得备份