wiki:TracMigratePlugin

Migrate to new environment with another database

Description

The plugin allows you to migrate to a new Trac environment with another database. A common usage scenario is to convert a Trac environment based on SQLite to MySQL to accommodate performance requirements and concurrency requirements better.

This plugin provides a trac-migrate.py script and the migrate command of trac-admin.

See also: MsSqlBackendPlugin: a plugin to connect (not migrate) to a MS-SQL database server.

Bugs/Feature Requests

Existing bugs and feature requests for TracMigratePlugin are here.

If you have any issues, create a new ticket.

defect

9 / 9

enhancement

3 / 3

task

1 / 1

Download

Download the zipped source from here.

Source

You can check out TracMigratePlugin from here using Subversion, or browse the source with Trac.

Usage without installation

  1. Checkout or export latest source:
    svn co https://trac-hacks.org/svn/tracmigrateplugin/0.12 /path/to/tracmigrateplugin
    
  2. If the new environment uses PostgreSQL or MySQL, create a database for this new environment. See DatabaseBackend#BackendSpecificInstallationInstructions.
  3. Run trac-migrate.py:
    cd /path/to/tracmigrateplugin
    ./trac-migrate.py /path/to/source /path/to/destination mysql://tracuser:password@localhost/trac
    
    This would result in:
    Copying tables:
      attachment table... 10 records.
      auth_cookie table... 9 records.
      cache table... 11 records.
    ....
    

Installation

  1. Install the plugin for Trac 0.12 or later:
    easy_install https://trac-hacks.org/svn/tracmigrateplugin/0.12
    
  2. Enable the plugin in the trac.ini file of your source environment:
    [components]
    tracmigrate.* = enabled
    

Examples

Usage

$ ./trac-migrate.py

Usage: trac-migrate.py [OPTIONS] SOURCE-TRACENV [DEST-TRACENV] DBURI

  Migrate to new environment with another database or another
  database without creating a new environment.

Options:
  -i, --in-place    migrate without creating a new environment

Examples:
  $ trac-migrate.py /path/to/source /path/to/dest sqlite:db/trac.db
  $ trac-migrate.py /path/to/source /path/to/dest postgres://tracuser:password@localhost/trac?schema=destination
  $ trac-migrate.py /path/to/source /path/to/dest mysql://tracuser:password@localhost/trac
  $ trac-migrate.py --in-place /path/to/source sqlite:db/trac.db
  $ trac-migrate.py --in-place /path/to/source postgres://tracuser:password@localhost/trac?schema=destination
  $ trac-migrate.py --in-place /path/to/source mysql://tracuser:password@localhost/trac

Migration to a new environment

The syntax for migrating to a new environment is as follows:

$ ./trac-migrate.py /path/to/source-tracenv /path/to/destination-tracenv postgres://tracuser:password@localhost/trac?schema=destination

Copying tables:
  attachment table... 10 records.
  auth_cookie table... 9 records.
  cache table... 11 records.
  component table... 5 records.
  enum table... 13 records.
  milestone table... 7 records.
  node_change table... 37 records.
  permission table... 17 records.
  report table... 11 records.
  repository table... 5 records.
  revision table... 35 records.
  session table... 2 records.
  session_attribute table... 19 records.
  ticket table... 35 records.
  ticket_change table... 110 records.
  ticket_custom table... 375 records.
  version table... 2 records.
  wiki table... 93 records.
Copying directories:
  attachments directory... done.
  htdocs directory... done.
  templates directory... done.
  plugins directory... done.

Migration to a new database without creating a new environment

The syntax for migrating to a new database without creating a new environment is as follows:

$ ./trac-migrate.py --in-place /path/to/tracenv postgres://trac:password@localhost/trac?schema=new_schema

Copying tables:
  attachment table... 31 records.
  auth_cookie table... 5 records.
  cache table... 17 records.
  component table... 6 records.
  enum table... 13 records.
  milestone table... 8 records.
  node_change table... 133876 records.
  permission table... 18 records.
  report table... 11 records.
  repository table... 80 records.
  revision table... 30076 records.
  session table... 5 records.
  session_attribute table... 15 records.
  system table... 3 records.
  tags table... 89797 records.
  tags_change table... 0 records.
  ticket table... 30009 records.
  ticket_change table... 353 records.
  ticket_custom table... 923 records.
  version table... 2 records.
  wiki table... 167 records.
Back up conf/trac.ini to conf/trac.ini.migrate-1392451681 in /path/to/tracenv.

Recent Changes

15444 by jun66j5 on 2016-03-21 17:26:26
TracMigratePlugin: bump up the version and call setuptools.setup() only if run setup.py as a script
15443 by jun66j5 on 2016-03-21 12:12:39
TracMigratePlugin: fix not migrating tables when installed egg files in plugins directory (closes #12696)
15436 by jun66j5 on 2016-03-15 08:51:08
TracMigratePlugin: fix not migrating all options in [trac] section (refs #12697)
(more)

Author/Contributors

Author: jun66j5
Maintainer: Jun Omae <jun66j5 at gmail.com>
Contributors:

Last modified 2 months ago Last modified on Jun 27, 2016, 10:15:23 AM