Merge branch 'create_pg_indexes' into 'master'
Rebuild Postgres indexes after a MySQL conversion
This commit is contained in:
commit
c05117d9a2
1 changed files with 34 additions and 6 deletions
|
@ -1,10 +1,11 @@
|
|||
# Migrating GitLab from MySQL to Postgres
|
||||
|
||||
If you are replacing MySQL with Postgres while keeping GitLab on the same
|
||||
server all you need to do is to export from MySQL and import into Postgres as
|
||||
described below. If you are also moving GitLab to another server, or if you are
|
||||
switching to omnibus-gitlab, you may want to use a GitLab backup file. The
|
||||
second part of this documents explains the procedure to do this.
|
||||
server all you need to do is to export from MySQL, import into Postgres and
|
||||
rebuild the indexes as described below. If you are also moving GitLab to
|
||||
another server, or if you are switching to omnibus-gitlab, you may want to use
|
||||
a GitLab backup file. The second part of this documents explains the procedure
|
||||
to do this.
|
||||
|
||||
## Export from MySQL and import into Postgres
|
||||
|
||||
|
@ -15,15 +16,41 @@ sudo service gitlab stop
|
|||
|
||||
# Update /home/git/gitlab/config/database.yml
|
||||
|
||||
git clone https://github.com/lanyrd/mysql-postgresql-converter.git
|
||||
git clone https://github.com/gitlabhq/mysql-postgresql-converter.git
|
||||
cd mysql-postgresql-converter
|
||||
mysqldump --compatible=postgresql --default-character-set=utf8 -r databasename.mysql -u root gitlabhq_production
|
||||
python db_converter.py databasename.mysql databasename.psql
|
||||
psql -f databasename.psql -d gitlabhq_production
|
||||
|
||||
# Rebuild indexes (see below)
|
||||
|
||||
sudo service gitlab start
|
||||
```
|
||||
|
||||
|
||||
## Rebuild indexes
|
||||
|
||||
The lanyrd database converter script does not preserve all indexes, so we have
|
||||
to recreate them ourselves after migrating from MySQL. It is not necessary to
|
||||
shut down GitLab for this process.
|
||||
|
||||
```
|
||||
# Clone the database converter on your Postgres-backed GitLab server
|
||||
cd /tmp
|
||||
git clone https://github.com/gitlabhq/mysql-postgresql-converter.git
|
||||
|
||||
# Stash changes to db/schema.rb to make sure we can find the right index statements
|
||||
cd /home/git/gitlab
|
||||
sudo -u git -H git stash
|
||||
|
||||
# Generate the `CREATE INDEX CONCURRENTLY` statements based on schema.rb
|
||||
cd /tmp/mysql-to-postgresql-converter
|
||||
ruby index_create_statements.rb /home/git/gitlab/db/schema.rb > index_create_statements.psql
|
||||
|
||||
# Execute the SQL statements against the GitLab database
|
||||
sudo -u git psql -f index_create_statements.psql -d gitlabhq_production
|
||||
```
|
||||
|
||||
## Converting a GitLab backup file from MySQL to Postgres
|
||||
|
||||
GitLab backup files (<timestamp>_gitlab_backup.tar) contain a SQL dump. Using
|
||||
|
@ -64,5 +91,6 @@ sudo -u git -H python mysql-postgresql-converter/db_converter.py gitlabhq_produc
|
|||
|
||||
sudo -u git -H tar rf TIMESTAMP_gitlab_backup.tar db/database.sql
|
||||
|
||||
# Done! TIMESTAMP_gitlab_backup.tar can now be restored into a Postgres GitLab installation.
|
||||
# Done! TIMESTAMP_gitlab_backup.tar can now be restored into a Postgres GitLab
|
||||
# installation. Remember to recreate the indexes after the import.
|
||||
```
|
||||
|
|
Loading…
Reference in a new issue