1. 導入
データベース管理において、データのバックアップと移行は最も重要なタスクの一つです。SQLiteは軽量で扱いやすい反面、運用方法を誤るとデータ消失のリスクがあります。本記事では、SQLiteの標準機能である「.dump」コマンドを活用し、データベース構造とデータを安全にテキスト形式で抽出する方法を解説します。この手法をマスターすることで、環境移行や障害時の復旧が格段にスムーズになります。
2. 基礎知識
「ダンプ(Dump)」とは、データベース内のテーブル定義(CREATE文)や、格納されているデータ(INSERT文)を、再実行可能なSQL形式で出力する操作を指します。SQLiteの「.dump」コマンドは、このSQL文を一括で生成します。出力されたファイルはテキストエディタで閲覧・編集が可能であり、別のSQLiteデータベースへ流し込むことで、全く同じ状態のデータベースを容易に再現できるのが最大のメリットです。
3. 実装/解決策
実務では、コンソールに結果を表示するのではなく、ファイルにリダイレクトして保存するのが一般的です。その際、「.output」コマンドを利用して、出力先を一時的にファイルへ切り替える手法をとります。また、データベース全体ではなく、特定のテーブルのみを抽出してバックアップをとることも可能です。
4. サンプルプログラム
以下の手順は、データベース全体をファイルに書き出し、その後出力先を標準出力(画面)に戻す一連の操作です。
— 1. 出力先を現在のディレクトリの backup.sql に設定
.output ./backup.sql
— 2. データベース全体の構成とデータをSQL文として書き出し
.dump
— 3. 出力先を元の画面(stdout)に戻す(これを忘れると以降の操作がファイルへ書き込まれ続けます)
.output stdout
— 4. 特定のテーブルだけをバックアップしたい場合
.output ./user_table.sql
.dump user
.output stdout
5. 応用・注意点
出力先の切り替え漏れに注意:
現場で最も多いミスは、「.output」でファイルに出力先を切り替えた後、「.output stdout」に戻し忘れることです。これにより、その後の「SELECT文」や「.table」コマンドの結果がすべてバックアップファイルに追記されてしまい、ファイルが壊れる原因になります。必ずペアで実行する癖をつけましょう。
大規模データの扱い:
SQLiteのダンプはテキストファイルとして生成されるため、データ量が数ギガバイトを超える場合、ファイルサイズが膨大になり、復元時の「.read」コマンドで時間がかかることがあります。その場合は、テーブル単位でのダンプや、別のバックアップ戦略を検討してください。
文字コードの確認:
ダンプしたファイルはUTF-8で出力されます。Windows環境などでテキストエディタを使って中身を確認する際は、文字コードの設定を確認してください。また、ダンプファイル自体はプレーンテキストなので、Gitなどのバージョン管理システムで管理することで、スキーマの変更履歴を追うことも可能です。

コメント