"Icinga Mysql 마이그레이션 오류: 엔진에 테이블이 없습니다."
P粉358281574
2023-09-01 19:15:34
<p>我尝试将icinga更新到2.9.1版本,并且为此需要在sql数据库上应用迁移。</p>
<p>迁移使用以下sql查询:</p>
<p>2.9.0迁移</p>
<pre class="brush:php;toolbar:false;">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;</pre>
<p>2.9.1迁移</p>
<pre class="brush:php;toolbar:false;">ALTER TABLE `icingaweb_rememberme`
-> MODIFY random_iv varchar(32) NOT NULL;</pre>
<p><strong>问题</strong>是,当我尝试执行时,我得到了冲突的错误消息</p>
<p><strong>完整的迁移日志</strong></p>
<pre class="brush:php;toolbar:false;">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'在引擎中不存在</pre>
<p>Icinga当前显示此错误(类似于第二个迁移错误)</p>
<pre class="brush:php;toolbar:false;">SQLSTATE[42S02]: 基表或视图不存在:1932 表'icingaweb2.icingaweb_rememberme'在引擎中不存在</pre>
<p><strong>问题</strong></p>
<p>我如何应用迁移,以便集合<code>icingaweb2</code>具有表<code>icingaweb_rememberme</code></p>
답변을 찾았습니다.
MySQL 데이터베이스는
icingaweb_rememberme.idb
的文件,但没有相应的frm
라는 파일을 생성합니다.icingaweb_rememberme
表,移除了在MySQL目录中剩下的.idb
파일을 삭제하고 명령어 하나로 테이블을 다시 생성했습니다(2차 마이그레이션이 적용되었습니다).완전한 답변이 아닐 수도 있고 더 간단한 해결책이 있을 수도 있지만 저에게는 이것이 효과가 있었습니다.
파일이나 테이블을 삭제하거나 제거할 계획이라면 백업을 꼭 해주세요