db_dump.md 1.6 KB
Newer Older
A
Anton Davydov 已提交
1
# Importing a database dump into a staging environment
2 3 4 5 6

Sometimes it is useful to import the database from a production environment
into a staging environment for testing. The procedure below assumes you have
SSH+sudo access to both the production environment and the staging VM.

J
Jacob Vosmaer 已提交
7 8 9
**Destroy your staging VM** when you are done with it. It is important to avoid
data leaks.

10 11 12 13 14 15
On the staging VM, add the following line to `/etc/gitlab/gitlab.rb` to speed up
large database imports.

```
# On STAGING
echo "postgresql['checkpoint_segments'] = 64" | sudo tee -a /etc/gitlab/gitlab.rb
16
sudo touch /etc/gitlab/skip-auto-reconfigure
17
sudo gitlab-ctl reconfigure
J
Jacob Vosmaer 已提交
18 19
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
```

Next, we let the production environment stream a compressed SQL dump to our
local machine via SSH, and redirect this stream to a psql client on the staging
VM.

```
# On LOCAL MACHINE
ssh -C gitlab.example.com sudo -u gitlab-psql /opt/gitlab/embedded/bin/pg_dump -Cc gitlabhq_production |\
  ssh -C staging-vm sudo -u gitlab-psql /opt/gitlab/embedded/bin/psql -d template1
```

## Recreating directory structure

If you need to re-create some directory structure on the staging server you can
use this procedure.

First, on the production server, create a list of directories you want to
re-create.

```
# On PRODUCTION
(umask 077; sudo find /var/opt/gitlab/git-data/repositories -maxdepth 1 -type d -print0 > directories.txt)
```

Copy `directories.txt` to the staging server and create the directories there.

```
# On STAGING
sudo -u git xargs -0 mkdir -p < directories.txt
```