可以使用 Nextcloud 命令行工具,把 SQLite 数据库转换成更适合扩展的 MySQL、MariaDB 或 PostgreSQL 数据库。SQLite 适合测试和简单的单用户 Nextcloud 服务器,但不适合扩展成多用户生产环境。
运行转换
转换包含两个步骤:
- 建立目标数据库,并准备它的连接凭据。
- 调用转换工具,把现有数据库的内容迁移到目标数据库。
操作注意:下面的转换、清空结构和修改配置都会影响实例。实施前需要备份数据库与配置、安排停机,并在隔离副本验证恢复路径;本稿未执行这些操作。
建立目标数据库
先根据所选数据库的官方手册建立新数据库,以及对应的用户名和密码。原文链接了 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_calendarsoc_calendar_objectsoc_calendar_share_calendaroc_calendar_share_eventoc_fscacheoc_logoc_media_albumsoc_media_artistsoc_media_sessionsoc_media_songsoc_media_usersoc_permissionsoc_privatedata:后来又被 privatedata 应用使用;只有该应用未启用时,原文才将其列为可以安全移除的表。oc_queuedtasksoc_sharing











暂无评论内容