转换 Nextcloud 的数据库类型

可以使用 Nextcloud 命令行工具,把 SQLite 数据库转换成更适合扩展的 MySQL、MariaDB 或 PostgreSQL 数据库。SQLite 适合测试和简单的单用户 Nextcloud 服务器,但不适合扩展成多用户生产环境。

运行转换

转换包含两个步骤:

  1. 建立目标数据库,并准备它的连接凭据。
  2. 调用转换工具,把现有数据库的内容迁移到目标数据库。

操作注意:下面的转换、清空结构和修改配置都会影响实例。实施前需要备份数据库与配置、安排停机,并在隔离副本验证恢复路径;本稿未执行这些操作。

建立目标数据库

先根据所选数据库的官方手册建立新数据库,以及对应的用户名和密码。原文链接了 MySQL/MariaDB 与 PostgreSQL 的配置说明,可从建立目标数据库一节进入。

那些配置步骤使用 nextcloud 作为新数据库名,下面为了保持一致也沿用它。你可以使用其他名称;转换时填入的数据库名、用户名和密码,必须与新建数据库时设置的一致。

启动转换

occ db:convert-type 负责完成转换。命令语法为:

sudo -E -u www-data php occ db:convert-type [options] type username hostname database

type 是目标数据库类型,取值与 config.php 中的 dbtype 一致。原文列出的类型为:

  • mysql:MariaDB 或 MySQL。
  • pgsql:PostgreSQL。
  • oci:Oracle。

其中 oci 是原文列举的参数值;具体版本、发行渠道和数据库支持范围仍需按目标实例的文档核对,不能据此推定任意部署都支持它。

选项 作用
--port="3306" 目标数据库端口,可选;文档给出的默认值是 3306。
--password="mysql_user_password" 新数据库的密码,可选。省略时工具会提示输入。
--clear-schema 清空目标数据库结构,可选。使用前必须确认目标及已有数据。
--all-apps 默认只转换已启用应用的表;此选项也转换已停用应用的表。
-n, --no-interaction 不提出交互式问题。

转换工具会在配置的应用目录中查找应用,根据应用提供的表结构定义创建新表。应用已被移除后遗留下来的表不会被转换,即使指定 --all-apps 也一样。

下面是原文把正常工作的 sqlite3 实例转换为 MariaDB/MySQL 的示例。尖括号中的内容是占位符,需要在真实操作时替换;它们不是实际账号或密码:

sudo -E -u www-data php occ db:convert-type --password="<password>" --port="3306" --all-apps mysql <username> <hostname> nextcloud

这个例子显式指定 3306 只是为了演示参数;由于它已是默认端口,此处并非必须。目标数据库使用非标准端口时,应指定实际端口。真实密码放进命令行可能进入历史或进程参数,因此也可利用省略密码参数时的交互提示。

成功后,转换工具会自动在 Nextcloud 的 config.php 中配置新数据库。转换到 MySQL/MariaDB 后,文档还要求把 mysql.utf8mb4 设置为 true:

sudo -E -u www-data php occ config:system:set mysql.utf8mb4 --type boolean --value="true"

若想查看变化,可在 config.php 中查找以 db 为特征的参数。转换前也可以使用同一命令作前后对照:

grep db config/config.php

此命令只是文本筛选,不是 PHP 配置解析器;输出可能包含数据库连接凭据。检查结果不要未经处理就公开。

无法转换的表

实例升级后,可能留下不再使用的旧表。更新器会告诉你哪些表不会转换,消息例如:

The following tables will not be converted:
oc_permissions
...

原文说明,下列已知旧表可以忽略。这是针对已废弃表的说明,不代表所有未转换表都可以删除;自定义应用和业务数据应分别确认。

  • oc_calendar_calendars
  • oc_calendar_objects
  • oc_calendar_share_calendar
  • oc_calendar_share_event
  • oc_fscache
  • oc_log
  • oc_media_albums
  • oc_media_artists
  • oc_media_sessions
  • oc_media_songs
  • oc_media_users
  • oc_permissions
  • oc_privatedata:后来又被 privatedata 应用使用;只有该应用未启用时,原文才将其列为可以安全移除的表。
  • oc_queuedtasks
  • oc_sharing

来源:Nextcloud 文档贡献者,Converting database type。核验时该地址显示 Nextcloud 35 管理手册;不同版本应核对对应文档。文档按 CC BY 3.0 发布,官方仓库许可说明。本文为中文翻译,补充了备份、参数占位符、目标支持范围、凭据隐私与旧表判断说明;原命令和表名保留,未运行转换。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容