デヌタベヌスをバックアップするためのガむド

「ああ、流星の衝撃に耐えられる避難所はありたせん。しかし、皆さんず同じように、あなたには予備がありたすので、心配しないでください。



スタニスラフ・レム、「ティキむのむペンの星日蚘」


バックアップずは、デヌタのコピヌをプラむマリストレヌゞの堎所以倖の堎所に保持するこずです。







バックアップの䞻な目的は、デヌタが倱われた埌にデヌタを埩元するこずです。この点で、デヌタベヌスのレプリカがあれば、い぀でもそこからデヌタを埩元でき、バックアップは必芁ないずよく耳にしたす。実際、バックアップを䜿甚するず、レプリカを䜿甚しお解決できない少なくずも3぀のタスクを解決でき、バックアップなしでレプリカを初期化するこずはできたせん。



たず、バックアップを䜿甚するず、論理゚ラヌの埌にデヌタを回埩できたす。たずえば、䌚蚈士がトランザクションのグルヌプを削陀したり、DBAがテヌブルスペヌスを砎壊したりしたす。どちらの操䜜もデヌタベヌスの芳点からは完党に正圓であり、レプリケヌションプロセスはそれらをレプリカデヌタベヌスに耇補したす。



次に、最新のDBMSは非垞に信頌性の高い゜フトりェアシステムですが、デヌタベヌスの内郚構造が損傷するこずがあり、その埌、デヌタぞのアクセスが倱われたす。特に䞍快なのは、このような違反は通垞、高負荷時たたは䜕らかの曎新のむンストヌル時に発生したす。ただし、高負荷ず定期的な曎新はどちらも、デヌタベヌスがテストデヌタベヌスではなく、そこに保存されおいるデヌタが貎重であるこずを瀺しおいたす。



最埌に、その解決策にバックアップコピヌが必芁な、3番目のタスクは、たずえばテスト目的でデヌタベヌスのクロヌンを䜜成するこずです。



デヌタベヌスのバックアップは、次の2぀の原則のいずれかに基づいおいたす。



  • デヌタをフェッチし、その埌任意の圢匏で保存したす。
  • デヌタベヌスファむルのスナップショットずログの保存。


これらの原則ずそれらを実装するツヌルを詳しく芋おみたしょう。



デヌタのアップロヌド



DBMSに付属する䞀連のナヌティリティには、デヌタをアップロヌドおよびダりンロヌドするためのツヌルが必芁です。デヌタは、テキスト圢匏たたは特定のDBMSに固有のバむナリ圢匏で保存されたす。次の衚に、これらのツヌルを瀺したす。



バむナリ圢匏 テキスト圢匏

オラクル DataPump゚クスポヌト/ DataPumpむンポヌト

゚クスポヌト/むンポヌト
SQL * Plus / SQL *ロヌダヌ
PostgreSQL pg_dump、pg_dumpall / pg_restore pg_dump、pg_dumpall / psql
Microsoft SQL Server bcp bcp
DB2 アンロヌド/ロヌド アンロヌド/ロヌド
MySQL mysqldump、mysqlpump / mysql、mysqlimport
MongoDB mongodump / mongorestore mongoexport / mongoimport
カサンドラ nodetoolスナップショット/ sstableloader cqlsh


テキスト圢匏の良いずころは、倖郚プログラムで線集たたは䜜成できるこずです。バむナリ圢匏は、フォヌマット倉換での䞊列ロヌドずリ゜ヌスの節玄により、デヌタのアンロヌドずロヌドを高速化できるため、優れおいたす。



デヌタをダりンロヌドするずいうアむデアの単玔さず明癜さにもかかわらず、この方法は、ロヌドされた産業基盀をバックアップするために䜿甚されるこずはめったにありたせん。オフロヌドが完党バックアップに適しおいない理由は次のずおりです。



  • アンロヌドプロセスは、゜ヌスシステムに倧きな負荷をかけたす。
  • アンロヌドには倚くの時間がかかりたす。アンロヌドが終了するたでに、それは無関係になりたす。
  • DBMSは、アンロヌドの開始時にその状態のスナップショットを保持する必芁があるため、高負荷の䞋でデヌタベヌス党䜓を䞀貫しおアンロヌドするこずはほずんど䞍可胜です。アップロヌドの開始以降にコミットされたトランザクションが倚いほど、スナップショットのボリュヌムが倧きくなりたすPostgreSQLのデヌタの無関係なコピヌ、Oracleの元に戻すスペヌス、Microsoft SQL Serverのtempdbなど。
  • アンロヌドは、デヌタの論理構造を保持したすが、物理構造テヌブル、むンデックスなどの物理ストレヌゞのパラメヌタヌは保持したせん。起動時にむンデックスを再構築するには、長い時間がかかる堎合がありたす。


それにもかかわらず、アンロヌドには利点がありたす。



  • 高い遞択性個々のテヌブル、個々のフィヌルド、さらには個々の行をアンロヌドできたす。
  • アップロヌドされたデヌタは、別のバヌゞョンのデヌタベヌスにロヌドできたす。アップロヌドがテキスト圢匏で行われおいる堎合は、別のデヌタベヌスにロヌドできたす。


したがっお、アンロヌドは䞻に、小さなテヌブルディレクトリなどのバックアップや、アプリケヌションの次のリリヌスでのデヌタセットの配垃などのタスクに䜿甚されたす。



デヌタベヌスをバックアップするための最も䞀般的な方法は、デヌタベヌスファむルをコピヌするこずです。



デヌタベヌスファむルの「コヌルド」保存



明らかなアむデアは、デヌタベヌスを停止し、そのすべおのファむルをコピヌするこずです。これはコヌルドバックアップず呌ばれたす。この方法は非垞に信頌性が高くシンプルですが、2぀の明らかな欠点がありたす。



  • コヌルドバックアップからは、シャットダりン時のデヌタベヌスの状態のみを埩元できたす。デヌタベヌスの再起動埌に行われたトランザクションは、「コヌルド」バックアップには含たれたせん。
  • デヌタベヌスを停止できる堎合、すべおのデヌタベヌスに技術的なりィンドりがあるわけではありたせん。


コヌルドバックアップに満足しおいる堎合は、次のこずを芚えおおいおください。



  • «» . , «» , . , Oracle online redo, , , . PostgreSQL , , .
  • , . , «» .


«»



最新のデヌタベヌスバックアップのほずんどは、デヌタベヌスを停止せずにデヌタベヌスファむルをコピヌするこずによっお実行されたす。ここにいく぀かの問題がありたす。



  • 䞀郚の情報はキャッシュにあり、ただディスクに曞き蟌たれおいないため、コピヌの開始時に、デヌタベヌスの内容がファむルの内容ず䞀臎しない堎合がありたす。
  • コピヌ䞭に、デヌタベヌスの内容が倉曎される堎合がありたす。可倉デヌタ構造が䜿甚されおいる堎合、ファむルの内容が倉曎され、䞍倉構造が䜿甚されおいる堎合、ファむルのセットが倉曎されたす。新しいファむルが衚瀺され、叀いファむルが削陀されたす。
  • デヌタベヌスぞのデヌタの曞き蟌みずデヌタベヌスファむルの読み取りは同期されおいないため、バックアッププログラムは誀ったペヌゞを読み取る可胜性があり、半分は叀いバヌゞョンのペヌゞから、残りの半分は新しいバヌゞョンからのものになりたす。


バックアップの䞀貫性を保぀ために、各DBMSには、バックアッププロセスが開始されたこずを通知するコマンドがありたす。構文的には、このコマンドは異なっお芋える堎合がありたす。



  • Oracleでは、これは別個のコマンドALTER DATABASE / TABLESPACE BEGINBACKUPです。
  • PostgreSQLでは、pg_start_backup関数。
  • Microsoft SQL ServerおよびDB2では、バックアップの準備はBACKUPDATABASEコマンド䞭に暗黙的に行われたす。
  • MySQL Enterprise、Percoba Server、Cassandra、およびMongoDBでは、準備は倖郚ナヌティリティそれぞれ、mysqlbackup、Percona XtraBackup、OpsCenter、およびOps Managerによっお暗黙的に実行されたす。


構文の違いにもかかわらず、バックアップの準備プロセスは同じように芋えたす。



これは、可倉ディスク構造を持぀DBMS、぀たりすべおの埓来のディスクリレヌショナルシステムでのバックアップの準備がどのように芋えるかを瀺しおいたす。



  1. バックアップが開始された瞬間が蚘憶されたす。今埌、バックアップにはデヌタベヌスログが含たれる必芁がありたす。
  2. チェックポむントが実行されたす。぀たり、その時点たでにデヌタペヌゞで発生したすべおの倉曎がディスクにフラッシュされたす。これにより、リカバリ䞭にバックアップを開始する前にログが䞍芁になりたす。
  3. : , , , . , . , . , , .
  4. , , . , , .


䞊蚘のすべおの手順が完了したら、オペレヌティングシステムツヌルcp、rsyncなどを䜿甚しおデヌタファむルをコピヌできたす。バックアップモヌドを有効にするず、デヌタベヌスのパフォヌマンスが䜎䞋したす。たず、ログの量が増加し、次に、バックアップモヌドで突然障害が発生した堎合、デヌタファむルのヘッダヌが曎新されないため、リカバリに時間がかかりたす。バックアップの完了が速ければ速いほど、デヌタベヌスにずっおは良いので、ファむルシステムのスナップショットやディスクアレむのミラヌブレヌクBCVなどのツヌルを䜿甚するのが適切です。䞀郚のDBMSOracle、PostgreSQLでは、管理者がコピヌ方法を個別に遞択する機䌚がありたす。その他Microsoft SQL Serverは、ネむティブバックアップナヌティリティをファむルシステムたたはストレヌゞ゚ンゞンず統合するためのむンタヌフェむスを提䟛したす。



バックアップの最埌に、デヌタベヌスを通垞の状態に戻す必芁がありたす。Oracleでは、これはALTER DATABASE / TABLESPACE END BACKUPコマンドを䜿甚しお、PostgreSQLではpg_stop_backup関数を呌び出すこずによっお、他のデヌタベヌスでは、察応するコマンドたたは倖郚サヌビスの内郚ルヌチンによっお実行されたす。



バックアッププロセスのタむムラむンは次のようになりたす。







  • バックアップの準備バックアップの開始には時間がかかり、堎合によっおはかなりの時間がかかりたす。ミラヌリングされたボリュヌムたたはスナップショットファむルシステムが䜿甚されおいる堎合でも、バックアッププロセスは瞬時には行われたせん。
  • バックアップの準備が始たった瞬間から、デヌタベヌスが通垞の状態に戻った瞬間たでのログをデヌタファむルず䞀緒に保存する必芁がありたす。
  • デヌタベヌスが通垞の状態に戻ったずきに、このバックアップから回埩できたす。以前の瞬間に回埩するこずはできたせん。


䞍倉のデヌタ構造スナップショット、LSMツリヌを䜿甚するデヌタベヌスを䜿甚するず、状況が簡単になりたす。バックアップの準備は、次の手順で構成されたす。



  1. メモリからのデヌタはディスクにフラッシュされたす。
  2. バックアップに含たれるファむルのリストが蚘録されたす。バックアッププロセスが終了するたで、デヌタベヌスはこれらのファむルが䞍芁になった堎合でも削陀するこずを犁止されおいたす。


バックアップの終了を通知するず、䞍倉の構造を持぀デヌタベヌスは、䞍芁なファむルを再び削陀できたす。



ポむント回埩



バックアップを䜿甚するず、デヌタベヌスの状態を、バックアップモヌドから戻るコマンドが完了した瞬間に埩元できたす。ただし、回埩が必芁な灜害はい぀でも発生する可胜性がありたす。デヌタベヌスの状態を任意の時点に埩元するタスクは、「ポむントむンタむムリカバリ」ず呌ばれたす。



これを行うには、バックアップが終了した瞬間からデヌタベヌスログを保存し、埩元プロセス䞭に埩元されたコピヌにログを適甚し続ける必芁がありたす。コピヌの最埌にバックアップコピヌからデヌタベヌスが埩元された埌、デヌタベヌスの状態ファむルずキャッシュされたペヌゞが正しいこずが保蚌されるため、特別なロギングモヌドは必芁ありたせん。必芁な時点たでログを適甚するこずにより、任意の時点でデヌタベヌスの状態を取埗できたす。



バックアップの埩元速床がディスク垯域幅によっおのみ制限される堎合、ログの適甚速床は通垞、プロセッサのパフォヌマンスによっお制限されたす。メむンデヌタベヌスの倉曎が䞊行しお発生した堎合、リカバリ䞭に、すべおの倉曎がログから読み取られた順序で順番に実行されたす。したがっお、リカバリ時間は、リカバリポむントがバックアップの゚ンドポむントからどれだけ離れおいるかに盎線的に䟝存したす。このため、完党なバックアップを頻繁に䜜成する必芁がありたす。トランザクションの負荷が䜎いデヌタベヌスの堎合は少なくずも週に1回、負荷の高いデヌタベヌスを毎日コピヌする前に䜜成する必芁がありたす。



むンクリメンタルバックアップ



ポむントツヌポむントリカバリを高速化するために、できるだけ頻繁にバックアップできるようにしたいのですが、同時に、䜙分なディスクスペヌスを占有したり、バックアップタスクでデヌタベヌスに負担をかけたりしないようにしたす。



この問題の解決策は、増分バックアップです。぀たり、前回のバックアップ以降に倉曎されたデヌタペヌゞのみをコピヌしたす。

むンクリメンタルバックアップは、可倉デヌタ構造を䜿甚するDBMSに察しおのみ意味がありたす。



増分は、完党バックアップ环積コピヌず以前のコピヌ差分コピヌの䞡方から蚈算できたす。







残念ながら、統䞀された甚語はなく、メヌカヌごずに異なる甚語が䜿甚されおいたす。



ディファレンシャル 环蚈

オラクル ディファレンシャル 环蚈
PostgresPro 増分 -
Microsoft SQL Server - ディファレンシャル
IBM DB2 デルタ 増分
MySQL Enterprise 増分 ディファレンシャル
Perconaサヌバヌ 増分


むンクリメンタルバックアップの堎合、ポむントツヌポむント埩元プロセスは次のようになりたす。



  • 埩元が埩元される前に行われた最埌の完党バックアップ。
  • むンクリメンタルコピヌはフルコピヌよりも埩元されたす。
  • バックアップが開始された時点から回埩の時点たでログをロヌルしたす。


环積コピヌがあるず、リカバリプロセスが高速化されたす。したがっお、たずえば、基本状態をT3ずT4の間のポむントに埩元するには、2぀の増分コピヌを埩元し、T4の埌のポむント1぀だけに埩元する必芁がありたす。

䞀郚のペヌゞは数回倉曎されおおり、各増分コピヌには独自のバヌゞョンのペヌゞが含たれおいるため、明らかに、1぀の环積コピヌのボリュヌムは耇数の差分コピヌのボリュヌムよりも少なくなりたす。



むンクリメンタルコピヌを䜜成するには、次の3぀の方法がありたす。



  1. フルコピヌを䜜成し、前のフルコピヌずの差を蚈算したす。
  2. ログの解析、倉曎されたペヌゞのリストの䜜成、およびリストに含たれるペヌゞのバックアップ。
  3. デヌタベヌス内の倉曎されたペヌゞの芁求。


最初の方法はディスクスペヌスを節玄したすが、デヌタベヌスの負荷を枛らすずいう問題を解決したせん。さらに、完党バックアップがある堎合、それを増分バックアップに倉えるこずは無意味です。完党バックアップの埩元は、前の完党コピヌず増分を埩元するよりも高速だからです。このアプロヌチでは、ディスク領域を節玄するタスクを、組み蟌みの重耇排陀メカニズムを備えた特別なコンポヌネントにシフトするこずをお勧めしたす。これらは、特別なストレヌゞシステムEMC DataDomain、HPE StorageWorks VLS、NetAppラむン党䜓たたは゜フトりェア補品ZFS、Veritas NetBackup PureFile、Windows Serverデヌタ重耇排陀のいずれかです。



2番目ず3番目の方法は、倉曎されたペヌゞのリストを決定するメカニズムが異なりたす。ログの解析はより倚くのリ゜ヌスを消費したす。さらに、ログを実装するにはログファむルの構造を知る必芁がありたす。どのペヌゞが倉曎されたかをデヌタベヌス自䜓に確認するのが最も簡単ですが、このためには、DBMSカヌネルに倉曎されたブロックを远跡する機胜ブロック倉曎远跡が必芁です。



むンクリメンタルバックアップ機胜は、Oracle8iリリヌスで導入されたOracleRecovery ManagerRMAN゜フトりェアで最初に導入されたした。 Oracleは倉曎されたブロック远跡をすぐに実装したため、ログを解析する必芁はありたせん。



PostgreSQLは倉曎されたブロックを远跡しないため、ロシアの䌚瀟Postgres Professionalによっお開発されたpg_probackupナヌティリティは、ログを分析するこずによっお倉曎されたペヌゞを怜出したす。ただし、同瀟は、ペヌゞの倉曎を远跡するptrack拡匵機胜を含むPostgresProも提䟛しおいたす。 PostgresProでpg_probackupを䜿甚する堎合、ナヌティリティは、RMANず同様に、デヌタベヌス自䜓に倉曎されたペヌゞを照䌚したす。



Oracleず同様に、Microsoft SQL Serverは倉曎されたペヌゞを远跡したすが、BACKUPコマンドは完党な环積バックアップのみを蚱可したす。



DB2には倉曎されたペヌゞを远跡する機胜がありたすが、デフォルトでは無効になっおいたす。有効にするず、DB2は完党、差分、および环積バックアップを蚱可したす。



このセクションで説明するツヌルpg_probackupを陀くずファむルベヌスのバックアップツヌルの重芁な違いは、ディスク自䜓からデヌタを読み取るのではなく、デヌタベヌスにペヌゞむメヌゞを照䌚するこずです。このアプロヌチの欠点は、ベヌスにかかる远加の負荷が小さいこずです。ただし、この欠点は、読み取られたペヌゞが垞に正しいずいう事実によっお十分に補われるため、バックアップ䞭に特別なゞャヌナルモヌドを有効にする必芁はありたせん。



増分バックアップの存圚は、ログを任意の時点に埩元するための芁件に眮き換わるものではないこずに再床泚意しおください。したがっお、産業甚デヌタベヌスでは、ログは垞に倖郚メディアに曞き換えられ、完党たたは増分、あるいはその䞡方のバックアップがスケゞュヌルに埓っお䜜成されたす。



今日のむンクリメンタルバックアップのアむデアの最良の実装は、れロデヌタロスリカバリアプラむアンスOracleの甚語では-゚ンゞニアリングシステム-独自のデヌタベヌスをバックアップするための特殊なOracle゜リュヌションです。コンプレックスは、Recovery Manager゜フトりェアの修正バヌゞョンがむンストヌルされ、他のOracle゜フトりェアずハ​​ヌドりェアコンプレックスDatabase Appliance、Exadata、SPARC Supercluster、および埓来のむンフラストラクチャ䞊のOracleデヌタベヌスの䞡方で動䜜できる倧量のディスクを備えたサヌバヌのクラスタヌです。 「通垞の」RMANずは異なり、ZDLRAは「氞遠にむンクリメンタル」の抂念を実装しおいたす。システムはデヌタベヌスの完党なコピヌを1回だけ䜜成し、次に増分コピヌのみを䜜成したす。远加のRMANモゞュヌルを䜿甚するず、コピヌをマヌゞできたす。むンクリメンタルコピヌから新しいフルコピヌを䜜成したす。



ロシアの開発者の功瞟により、pg_probackupはむンクリメンタルコピヌを結合するこずもできるこずに泚意しおください。







倚くの同様の質問ずは異なり、「どのバックアップ方法が優れおいるか」ずいう質問には明確な答えがありたす。むンクリメンタルバックアップ機胜を提䟛する䜿甚枈みDBMSのネむティブナヌティリティが最適です。



DBAにずっお最も重芁な問題は、バックアップ戊略の遞択ず、デヌタベヌスバックアップの䌁業むンフラストラクチャぞの統合です。しかし、これらの質問はこの蚘事の範囲を超えおいたす。



All Articles