SQL Serverのバックアップを別サーバで復元した場合にログインできない

同じユーザIDが存在する場合でも、別インスタンスからもってきたものは不整合とみなされるため、元インスタンスと展開先インスタンスのユーザマッピングをする必要あり。

ALTER USER バックアップ元ユーザID WITH LOGIN = 復元先のユーザID

毎回忘れて検索するのでメモ。

Pythonでrarファイルを解凍する

rarfileライブラリを利用

import rarfile
 
rar_filepath = r"c:\arch\data.rar"
output_dir = r"c:\tmp"

rf = rarfile.RarFile(rar_filepath,output_dir)

for arch_file in rf.infolist():
    rf.extract(arch_file.filename, output_dir)
  • infolist()でファイル情報リストを取得。 ファイル名だけであればnamelist()を利用
  • extractallですべて、extractで指定ファイルの解凍が可能。
  • optionで出力先を指定することで、そこから書庫内構成に基づいて解凍(下位ディレクトリは自動作成)
参考

rarfile API documentation — RarFile documentation

Calibreで外部ビューアを使う

設定箇所が気づきにくかったのでメモ。

f:id:ntoh:20210517084513p:plain
設定-動作

設定>動作>右ペインの「内部ビューアを使用」の拡張子一覧から、外部ビューアを使いたいもののチェックを外す。外したものの動作は、Windowsの関連付けで指定したアプリケーションとなる。

SQL ServerのミラーリングのステータスをSQLで確認する方法

SSMSで見るのもいいが、sqlで取得できるといろいろ捗るので。

SELECT
 database_name,
 principal_server_name,
 mirror_server_name,
 safety_level,
 partner_sync_state,
 partner_sync_state_desc
FROM
 sys.database_mirroring_witnesses

ミラーリング監視サーバでsqlcmd経由で定期的に発行させ確認するとか。

docs.microsoft.com

QNAPに「さくらのVPS」のシステムバックアップを自動でおこなう③

QNAPで設定

ポイントをおさえておけば設定自体は難しくない(が、制約もあることに注意)

  • 事前にリモートバックアップの情報を「ストレージ領域」として作成する
  • リモートからローカルNASへのバックアップは「アクティブ同期」(名前がわかりにくい)を指定する
  • インターネット経由でのバックアップの場合は、暗号化する事が望ましいが 暗号化が可能なSSH経由のRSYNCの場合、rootでログインしないとファイルのアクセス権限の理由で、バックアップに失敗する場合がある(rsync-path='sudo rsync')してくれないっぽい?

AppCenterからHBS3 Hybrid Backup Syncをインストールする

f:id:ntoh:20210325090008p:plain

バックアップ系はここに集約しているようなので、これをインストールする

f:id:ntoh:20210325083354p:plain

左アイコンの一番下をクリックし、ストレージ領域の作成ボタンを押下して領域を作成

f:id:ntoh:20210325085427p:plain

リモートRSYNCを選択。

Rsyncの設定に基づいた設定の実施

RSYNCの場合

f:id:ntoh:20210325154744p:plain

  • 名前:わかりやすいのをつける
  • IPアドレス/ホスト名:さくらのVPSのホスト名
  • ポート:特に変更してなければデフォルトの873を指定
  • サーバの種類:Rsync互換サーバ
  • アカウントアクセス:rsyncサーバアカウント
  • ユーザ名:rsyncd設定の時に設定したID
  • パスワード:rsyncd設定の時に指定したパスワード
  • 暗号化ポートを使用する:選ばない(チェックするとSSH経由になる)

RSYNCSSH経由で実施する場合(暗号化ポートを利用する)

f:id:ntoh:20210325154750p:plain

  • 名前:わかりやすいのをつける
  • IPアドレス/ホスト名:さくらのVPSのホスト名
  • ポート:SSHのポート 通常は22。攻撃が多いポートのため、変更を推奨。
  • サーバの種類:Rsync互換サーバ
  • アカウントアクセス:rsyncサーバアカウント
  • ユーザ名:SSHアカウント
  • パスワード:SSHパスワード
  • 暗号化ポートを使用する:選ぶ

同期ジョブの作成

f:id:ntoh:20210325085441p:plain

同期を選択。

f:id:ntoh:20210325085446p:plain

作成→アクティブ同期

f:id:ntoh:20210325085427p:plain

リモートRSYNCサーバを指定

f:id:ntoh:20210325085502p:plain

さきほど作ったストレージ領域を「選択」

f:id:ntoh:20210325085509p:plain

同期先をそれぞれ選択

  • リモート /timeshift /backup等 バックアップファイルを格納したフォルダ
  • ローカル /任意のバックアップ場所

f:id:ntoh:20210325085526p:plain

スケジュールの設定

f:id:ntoh:20210325085531p:plain

ソースフォルダから消えたものは、削除するように設定。

f:id:ntoh:20210325085537p:plain

QNAPに「さくらのVPS」のシステムバックアップを自動でおこなう②

postgresqlのDBバックアップ

/var/lib/postgresql/bkup_daily.sh [任意の場所]

postgresqlユーザで実行するので、postgresのホームディレクトリにおいてある。

# backup
/usr/bin/pg_dumpall -f /backup/today_bkup.sql
/usr/bin/zip  --encrypt --password xxxxxx /backup/postgres_`date "+%Y%m%d_%H%M"`.zip /backup/today_bkup.sql
/usr/bin/rm /backup/today_bkup.sql

# old-backup-delete
/usr/bin/rm  `ls -t /backup/* | tail -n+8`
  • pg_dumpallで出力したあと、/backupへ暗号化ZIPで日付ファイル名で出力。
  • 7世代より古いファイルは削除する。 -n+8の数字をかえることで世代数は変更可能。(世代数が少ないうちは削除エラーがでるが、動作上問題がないのでよしとする)

出力先は/backupにしてあるが任意の場所でOK。postgresユーザで書き込みできる権限にしておく。

chmod +x /var/lib/postgresql/bkup_daily.sh

crondから実行するので実行権限をつけておく。

crondの設定

$ crontab -e

0 4 * * * /usr/bin/sh /var/lib/postgresql/bkup_daily.sh >/dev/null 2>&1

上記の例は毎日朝の4時にバックアップをとる設定にしてある。

Timeshiftの設定

ubuntu20.04であれば、apt install timeshiftでインストール可能。 最新版をインストールしたい場合は、以下の手順。

$ sudo add-apt-repository -y ppa:teejee2008/timeshift
$ sudo apt-get update
$ sudo apt-get install timeshift

f:id:ntoh:20210325000118p:plain

f:id:ntoh:20210325000125p:plain

外部ディスクを利用できればいいが、VPSなので同じディスクを指定。

f:id:ntoh:20210325000131p:plain

スケジュールは任意。システムバックアップなので、基本は大きな更新作業前に、手動でとっておくのがよい。

取り忘れのために、週次と月次で1世代だけとるようにした。

f:id:ntoh:20210325000135p:plain

ホームディレクトリはデフォルトで隠しファイル以外は対象外となっている。自分の使い方ではこちらもバックアップ必要なので加えてある。