GitLab.comのバックアップがうまくいっていなかったことが話題になっていますが、環境によってはオンプレミスで動かしているバックアップも失敗しているかもしれません。
といいますか私の環境がそうでした
GitLab.com Database Incident - 2017/01/31
GitLab.com melts down after wrong directory deleted, backups fail • The Register
環境
- CentOS: 7.2.1511 (Core)
- GitLab 8.16.2
- PostgreSQL: 9.6.1(最近9.2から上げた)
- GitlabにバンドルされたPostgreSQLではなくyumやmake installしたPostgreSQLを利用している
現象
gitlab-rake gitlab:backup:create
でバックアップを実行すると、pg_dumpと実際に動いているPostgreSQLのバージョンが異なるというエラーでバックアップに失敗する
まさに上記記事にあった現象と同じである
原因
- gitlab-rakeでは、動いているPostgreSQLのpg_dump(
/usr/pgsql-9.6/bin/pg_dump
)ではなくGitlabにバンドルされたpg_dump(/opt/gitlab/embedded/bin/pg_dump
)を使っている - バンドルされたpg_dumpのバージョンが9.2であるがゆえにバージョンの不一致でバックアップに失敗する
# gitlab-rake gitlab:backup:create Dumping database ... Dumping PostgreSQL database gitlabhq_production ... pg_dump: server version: 9.6.1; pg_dump version: 9.2.18 pg_dump: aborting because of server version mismatch [FAILED] Backup failed
対応
/opt/gitlab/embedded/bin/pg_dump
を稼働中のPostgreSQLのバージョンと合わせる
対応例
mv /opt/gitlab/embedded/bin/psql /opt/gitlab/embedded/bin/psql.gitlab mv /opt/gitlab/embedded/bin/pg_dump /opt/gitlab/embedded/bin/pg_dump.gitlab ln -s /usr/pgsql-9.6/bin/psql /opt/gitlab/embedded/bin/ ln -s /usr/pgsql-9.6/bin/pg_dump /opt/gitlab/embedded/bin/
上記の対策を行ってからgitlab-rake gitlab:backup:create
を行えば正常にバックアップが動くと思います
感想
私はcronでバックアップを取っています。PostgreSQLを9.6にアップデートした次の日の朝にバックアップ失敗のメール通知を受けて気がつきました。バックアップ失敗時の通知をしていなかったり、ログを見ていなかったりすることもあると思うので一度確認してみたほうがいいかもしれません。