Commit c05117d9a25c4f8b2fbec6c520acdcc36f85f659
Exists in
spb-stable
and in
2 other branches
Merge branch 'create_pg_indexes' into 'master'
Rebuild Postgres indexes after a MySQL conversion
Showing
1 changed file
with
34 additions
and
6 deletions
Show diff stats
doc/update/mysql_to_postgresql.md
1 | # Migrating GitLab from MySQL to Postgres | 1 | # Migrating GitLab from MySQL to Postgres |
2 | 2 | ||
3 | If you are replacing MySQL with Postgres while keeping GitLab on the same | 3 | If you are replacing MySQL with Postgres while keeping GitLab on the same |
4 | -server all you need to do is to export from MySQL and import into Postgres as | ||
5 | -described below. If you are also moving GitLab to another server, or if you are | ||
6 | -switching to omnibus-gitlab, you may want to use a GitLab backup file. The | ||
7 | -second part of this documents explains the procedure to do this. | 4 | +server all you need to do is to export from MySQL, import into Postgres and |
5 | +rebuild the indexes as described below. If you are also moving GitLab to | ||
6 | +another server, or if you are switching to omnibus-gitlab, you may want to use | ||
7 | +a GitLab backup file. The second part of this documents explains the procedure | ||
8 | +to do this. | ||
8 | 9 | ||
9 | ## Export from MySQL and import into Postgres | 10 | ## Export from MySQL and import into Postgres |
10 | 11 | ||
@@ -15,15 +16,41 @@ sudo service gitlab stop | @@ -15,15 +16,41 @@ sudo service gitlab stop | ||
15 | 16 | ||
16 | # Update /home/git/gitlab/config/database.yml | 17 | # Update /home/git/gitlab/config/database.yml |
17 | 18 | ||
18 | -git clone https://github.com/lanyrd/mysql-postgresql-converter.git | 19 | +git clone https://github.com/gitlabhq/mysql-postgresql-converter.git |
19 | cd mysql-postgresql-converter | 20 | cd mysql-postgresql-converter |
20 | mysqldump --compatible=postgresql --default-character-set=utf8 -r databasename.mysql -u root gitlabhq_production | 21 | mysqldump --compatible=postgresql --default-character-set=utf8 -r databasename.mysql -u root gitlabhq_production |
21 | python db_converter.py databasename.mysql databasename.psql | 22 | python db_converter.py databasename.mysql databasename.psql |
22 | psql -f databasename.psql -d gitlabhq_production | 23 | psql -f databasename.psql -d gitlabhq_production |
23 | 24 | ||
25 | +# Rebuild indexes (see below) | ||
26 | + | ||
24 | sudo service gitlab start | 27 | sudo service gitlab start |
25 | ``` | 28 | ``` |
26 | 29 | ||
30 | + | ||
31 | +## Rebuild indexes | ||
32 | + | ||
33 | +The lanyrd database converter script does not preserve all indexes, so we have | ||
34 | +to recreate them ourselves after migrating from MySQL. It is not necessary to | ||
35 | +shut down GitLab for this process. | ||
36 | + | ||
37 | +``` | ||
38 | +# Clone the database converter on your Postgres-backed GitLab server | ||
39 | +cd /tmp | ||
40 | +git clone https://github.com/gitlabhq/mysql-postgresql-converter.git | ||
41 | + | ||
42 | +# Stash changes to db/schema.rb to make sure we can find the right index statements | ||
43 | +cd /home/git/gitlab | ||
44 | +sudo -u git -H git stash | ||
45 | + | ||
46 | +# Generate the `CREATE INDEX CONCURRENTLY` statements based on schema.rb | ||
47 | +cd /tmp/mysql-to-postgresql-converter | ||
48 | +ruby index_create_statements.rb /home/git/gitlab/db/schema.rb > index_create_statements.psql | ||
49 | + | ||
50 | +# Execute the SQL statements against the GitLab database | ||
51 | +sudo -u git psql -f index_create_statements.psql -d gitlabhq_production | ||
52 | +``` | ||
53 | + | ||
27 | ## Converting a GitLab backup file from MySQL to Postgres | 54 | ## Converting a GitLab backup file from MySQL to Postgres |
28 | 55 | ||
29 | GitLab backup files (<timestamp>_gitlab_backup.tar) contain a SQL dump. Using | 56 | 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 | @@ -64,5 +91,6 @@ sudo -u git -H python mysql-postgresql-converter/db_converter.py gitlabhq_produc | ||
64 | 91 | ||
65 | sudo -u git -H tar rf TIMESTAMP_gitlab_backup.tar db/database.sql | 92 | sudo -u git -H tar rf TIMESTAMP_gitlab_backup.tar db/database.sql |
66 | 93 | ||
67 | -# Done! TIMESTAMP_gitlab_backup.tar can now be restored into a Postgres GitLab installation. | 94 | +# Done! TIMESTAMP_gitlab_backup.tar can now be restored into a Postgres GitLab |
95 | +# installation. Remember to recreate the indexes after the import. | ||
68 | ``` | 96 | ``` |