アップグレード失敗後のバックアップからのリストア
アップグレードは通常スムーズで、バックアップからの復元はめったに起こりません。 しかし、問題が発生した場合の復旧方法を知っておくことは重要です。
以前のバージョンにロールバックし、バックアップを復元します。
アップグレードに失敗した場合、一番手っ取り早い解決策は、以前のバージョンにロールバックすることです。
まず、コードやパッケージをロールバックします。 ソースのインストールでは、古いバージョン (ブランチまたはタグ) をチェックアウトします。 Omnibus のインストールでは、古い.deb
または.rpm
パッケージをインストールします。 次に、バックアップからリストアします。Backup and Restoreドキュメントの指示に従ってください。
次回のアップグレードで起こりうる問題
ロールバックが必要な場合、その後のアップグレードで問題が発生する可能性があります。 これは、失敗したアップグレード中にいくつかのテーブルが追加された可能性があるためです。 古いバックアップからリストアした後もこれらのテーブルが存在する場合、今後のアップグレードで移行に失敗する可能性があります。
GitLab 8.6から、この問題を防ぐためにバックアップをインポートする前にすべてのテーブルを削除するようになりました。 8.6より前のバージョンにバックアップをリストアしている場合は、次回アップグレードするときに手動で問題を修正する必要があるかもしれません。
エラーの例
== 20151103134857 CreateLfsObjects: migrating =================================
-- create_table(:lfs_objects)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
PG::DuplicateTable: ERROR: relation "lfs_objects" already exists
エラーからバージョンをコピーします。この場合、バージョン番号は20151103134857
です。
警告:以下の手順は、これが必要であると確信できる場合にのみ使用してください。
GitLab 8.6 以上
データベースRakeタスクにバージョンを渡し、手動で移行完了をマークします。
# Source install
sudo -u git -H bundle exec rake gitlab:db:mark_migration_complete[20151103134857] RAILS_ENV=production
# Omnibus install
sudo gitlab-rake gitlab:db:mark_migration_complete[20151103134857]
マイグレーションが正常にマークされたら、Rakedb:migrate
タスクを再度実行します。失敗したマイグレーションがすべて完了とマークされるまで、このプロセスを何度か繰り返す必要があるでしょう。
GitLab < 8.6
# Source install
sudo -u git -H bundle exec rails console -e production
# Omnibus install
sudo gitlab-rails console
Railsコンソールで以下のコマンドを入力します:
ActiveRecord::Base.connection.execute("INSERT INTO schema_migrations (version) VALUES('20151103134857')")
exit
マイグレーションが正常にマークされたら、Rakedb:migrate
タスクを再度実行します。失敗したマイグレーションがすべて完了とマークされるまで、このプロセスを何度か繰り返す必要があるでしょう。