Skip to content
Next Next commit
docs(admin): Clarify DB conversion steps and command usage
Signed-off-by: Josh <[email protected]>
  • Loading branch information
joshtrichards authored Feb 25, 2024
commit 2874107d7a296b6bf4e3ca3c9075a64961dec568
53 changes: 41 additions & 12 deletions admin_manual/configuration_database/db_conversion.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,36 +11,65 @@ multiple-user production servers.
Run the conversion
------------------

First set up the new database, here called "new_db_name".
In Nextcloud root folder call
Conversion consists of two steps:

1. Establishing the target database (including its credentials)
2. Triggering the conversion tool which migrates the contents of the existing database to the target database

Establishing the target database
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

First create up the target (new) database (along with its associated username and password) by following the manual database configuration instructions for your chosen target database type:
- :ref:`configuring-a-mysql-or-mariadb-database`
- :ref:`postgresql-database`

Since the above use the database name "nextcloud" for the newly created database we will do so here for consistency, but you are free to use whatever database name you prefer. Use
the database username and password you specified when creating the new database.

Triggering the conversion
~~~~~~~~~~~~~~~~~~~~~~~~~

The ``occ db:convert-type`` command handles all the tasks of the conversion. The following are the parameters available:

::

php occ db:convert-type [options] type username hostname database

The Options
The options:

* ``--port="3306"`` the database port (optional)
* ``--port="3306"`` the database port (optional) [defaults to "3306"]
* ``--password="mysql_user_password"`` password for the new database. If omitted the tool will ask you (optional)
* ``--clear-schema`` clear schema (optional)
* ``--all-apps`` by default, tables for enabled apps are converted, use to convert also tables of deactivated apps (optional)
* ``-n, --no-interaction`` do not ask any interactive question

*Note:* The converter searches for apps in your configured app folders and uses
the schema definitions in the apps to create the new table. So tables of removed
apps will not be converted even with option ``--all-apps``
.. note:: The conversion tool searches for apps in your configured app folders and uses
the schema (table) definitions in the apps to create the new tables. Any tables that still exist for removed
apps will not be converted (even with option ``--all-apps``).

For example
Let's convert our existing (functioning) sqlite3 installation to be MariaDB/MySQL based:

::

php occ db:convert-type --all-apps mysql oc_mysql_user 127.0.0.1 new_db_name
php occ db:convert-type --password="<password>" --port="3306" --all-apps mysql <username> <hostname> nextcloud

To successfully proceed with the conversion, you must type ``yes`` when prompted
with the question ``Continue with the conversion?``
.. note:: It was unnecessary to specify the port in this example because``3306`` is already the default. We did so
merely for demonstration purposes and completeness in case the reader is using non-standard port on their target
database server.

On success the converter will automatically configure the new database in your
Nextcloud config ``config.php``.
Nextcloud config ``config.php``.

If you are converting to a MySQL/MariaDB database, you will also want to set ``mysql.utf8mb4`` parameter to true in your ``config.php``:

::
php occ config:system:set mysql.utf8mb4 --type boolean --value="true"

If you like, you can view the changes that were made by looking for the ``db*`` parameters in your ``config.php`` (you could also use this command before
doing the conversion to compare your configuration before/after):

::
grep db config/config.php

Inconvertible tables
--------------------
Expand Down