fix oc_ext_apps corrupted

于 2025-04-02 发布

在 upgrade nextcloud 的过程里,执行 occ upgrade 的时候发现错误提示:

1
- ERROR: An exception occurred while executing a query: SQLSTATE[HY000]: General error: 1877 Table `nextcloud`.`oc_ex_apps` is corrupted. Please drop the table and recreate.

搜索了 nextcloud 社区,虽然没有直接的解决方法,但是从这个对话里得到了 schema。虽然是 postgresql 的,但是让 chatgpt 转换成 mariadb 就行了。修复过程如下:

  1. 连接到 mariadb,root 身份直接 mariadb -uroot
  2. 然后在 mysql shell 中执行以下命令(这里数据库名字之类的用的默认名字):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    USE nextcloud;
    DROP TABLE oc_ex_apps;
    CREATE TABLE nextcloud.oc_ex_apps (
     id BIGINT NOT NULL,
     appid VARCHAR(32) NOT NULL,
     version VARCHAR(32) NOT NULL,
     name VARCHAR(64) NOT NULL,
     daemon_config_name VARCHAR(64) NOT NULL DEFAULT '0',
     port SMALLINT NOT NULL,
     secret VARCHAR(256) NOT NULL,
     status JSON NOT NULL,
     enabled SMALLINT NOT NULL DEFAULT 0,
     created_time BIGINT NOT NULL
    );
    

这样就修好了。不过这个 schema 是 30.0.x 的,为了避免刻舟求剑,可以定时用以下命令导出整个 nextcloud 数据库中所有 table 的 schema:

1
mariadb-dump --no-data nextcloud > nextcloud_schema.sql

目录