Database transfer

From MoodleDocs

(Additional tools may be found elsewhere in the admin settings)


The database transfer tool allows an administrator to migrate their Moodle site from one database type to another, for example from MySQL to Postgres.

The tool is currently classed as an experimental feature and may be found in Settings > Site administration > Development > Experimental > Database migration. There is also a command line script in admin/tool/dbtransfer/cli/migrate.php.

The dbtransfer tool uses the XMLDB schema definitions from Moodle and installed plugins to retrieve the data from one database and transfer it another.

Some troubles you may find when using this tool:

  • If there is any object in the current database (columns, tables,...) not included in the XMLDB schema or the other way around the dbtransfer won't be executed until these objects are removed (this may happen if Moodle has been upgraded from earlier versions, if some plugin hasn't been correctly uninstalled...).
  • If there is some wrong encoded data in the current database the transfer will crash; in that case find and fix the troublemaking data and launch the dbtranfer tool again.
  • If you are trying to migrate a big instance it will take a while, and there can be set some timeout (database, PHP, Apache) that can break the migration. In this instance you should use the CLI variant.

CLI Database Transfer

  • put your site into Maintenance mode
  • disable Cron to avoid writing in database during the process
  • execute the script (see below)
  • update your config.php to use the new database configuration
  • test everything that you are able to test
  • disable Maintenance mode, and re-enable cron

Depending on the size of your database, the process may take several hours.


Example executions

The following example executes the migration script to migrate to a postgres database:

$ sudo -u www-data /usr/bin/php /path/to/moodle/admin/tool/dbtransfer/cli/migrate.php \
    --dbtype='pgsql' \
    --dbhost='x.x.x.x' \
    --dbname='moodleDbName' \
    --dbuser='moodleUser' \
    --dbpass='***' \
    --dbport=5432 \
    --prefix='mdl_' \
    --dbsocket='/var/run/postgresql'

For more information, type sudo -u www-data /usr/bin/php /path/to/moodle/admin/tool/dbtransfer/cli/migrate.php --help

See also

  • MDL-34441 finish dbtransfer tool implementation

Using Moodle forum discussions: