summaryrefslogtreecommitdiff
path: root/doc/update/mysql_to_postgresql.md
diff options
context:
space:
mode:
authorJacob Vosmaer <contact@jacobvosmaer.nl>2014-05-08 12:10:04 +0200
committerJacob Vosmaer <contact@jacobvosmaer.nl>2014-05-08 12:12:14 +0200
commitc01efa0ed5a9dadd2daf8cc63c5612864c771f23 (patch)
tree3b0558482ad454161a209f53194cd3098c7e6840 /doc/update/mysql_to_postgresql.md
parent3dea71ce0f8e78d7022ea25312af7c812c777d79 (diff)
downloadgitlab-ce-c01efa0ed5a9dadd2daf8cc63c5612864c771f23.tar.gz
Document how to convert a backup to PostgreSQL
Diffstat (limited to 'doc/update/mysql_to_postgresql.md')
-rw-r--r--doc/update/mysql_to_postgresql.md47
1 files changed, 47 insertions, 0 deletions
diff --git a/doc/update/mysql_to_postgresql.md b/doc/update/mysql_to_postgresql.md
index 9a324545eb0..cdef7d71e33 100644
--- a/doc/update/mysql_to_postgresql.md
+++ b/doc/update/mysql_to_postgresql.md
@@ -1,5 +1,9 @@
# Use the shell commands below to convert a MySQL GitLab database to a PostgreSQL one.
+## Export from MySQL and import into Postgres
+
+Use this if you are keeping GitLab on the same server.
+
```
git clone https://github.com/lanyrd/mysql-postgresql-converter.git
cd mysql-postgresql-converter
@@ -7,3 +11,46 @@ mysqldump --compatible=postgresql --default-character-set=utf8 -r databasename.m
python db_converter.py databasename.mysql databasename.psql
psql -f databasename.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
+the lanyrd database converter we can replace a MySQL database dump inside the
+tar file with a Postgres database dump. This can be useful if you are moving to
+another server.
+
+```
+# Stop GitLab
+sudo service gitlab stop
+
+# Create the backup
+cd /home/git/gitlab
+sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
+
+# Note the filename of the backup that was created. We will call it
+# TIMESTAMP_gitlab_backup.tar below.
+
+# Move the backup file we will convert to its own directory
+sudo -u git -H mkdir -p tmp/backups/postgresql
+sudo -u git -H mv tmp/backups/TIMESTAMP_gitlab_backup.tar tmp/backups/postgresql/
+
+# Create a separate database dump with PostgreSQL compatibility
+cd tmp/backups/postgresql
+sudo -u git -H mysqldump --compatible=postgresql --default-character-set=utf8 -r gitlabhq_production.mysql -u root gitlabhq_production
+
+# Clone the database converter
+sudo -u git -H git clone https://github.com/lanyrd/mysql-postgresql-converter.git
+
+# Convert gitlabhq_production.mysql
+sudo -u git -H mkdir db
+sudo -u git -H python mysql-postgresql-converter/db_converter.py gitlabhq_production.mysql db/database.sql
+
+# Replace the MySQL dump in TIMESTAMP_gitlab_backup.tar.
+
+# Warning: if you forget to replace TIMESTAMP below, tar will create a new file
+# 'TIMESTAMP_gitlab_backup.tar' without giving an error.
+
+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.
+```