SQLite | SQLiteコマンド | データベースのバックアップと復元(.backup/.restore)
SQLiteデータベースはファイルのコピーやダンプの取り込みでもバックアップできます。ここでは、別の方法として.backupと.restoreコマンドを説明します。
.backupコマンドでバックアップする
.backupでデータベースをバックアップします。構文は次のとおりです。
.backup ?DB? FILE
第1引数はバックアップするデータベース名です。省略時は、通常プライマリデータベースに割り当てられるmainになります。
第2引数はバックアップファイル名です。名前と拡張子は自由に指定でき、存在しない場合は新しく作成されます。
–
バックアップ対象のデータベースに接続します。この例には2つのテーブルがあります。
.tables
sqlite> .tables
color user
sqlite>
現在のディレクトリのmydb.backにバックアップします。ファイルは存在しないため自動的に作成されます。
.backup ./mydb.back
sqlite> .backup ./mydb.back
sqlite>
完了すると現在のディレクトリにmydb.backが作成されます。これはテキストではなくバイナリのデータベースファイルです。
$ ls -al
total 5080
drwxr-xr-x@ 8 kimkc staff 272 11 4 23:31 .
drwxr-xr-x 9 kimkc staff 306 10 17 23:49 ..
drwxr-xr-x 27 kimkc staff 918 11 4 23:31 bak
-rw-r--r-- 1 kimkc staff 16384 11 4 23:30 mydb.back
-rw-r--r-- 1 kimkc staff 16384 11 4 22:38 mydb.sqlite3
-rwxr-xr-x@ 1 kimkc staff 691768 10 11 18:31 sqldiff
-rwxr-xr-x@ 1 kimkc staff 1152260 10 11 18:32 sqlite3
-rwxr-xr-x@ 1 kimkc staff 719796 10 11 18:31 sqlite3_analyzer
$
これでデータベースのバックアップは完了です。
.restoreコマンドで復元する
.restoreでバックアップからデータベースを復元します。構文は次のとおりです。
.restore ?DB? FILE
第1引数は復元先のデータベース名で、省略時はmainです。第2引数にはバックアップファイルを指定します。
復元先に接続してから実行します。復元すると現在のテーブルやデータが削除され、バックアップ内容に置き換わるため注意してください。
–
復元先として新しいnewdb.sqlite3データベースを作成します。
sqlite3 newdb.sqlite3
$ sqlite3 newdb.sqlite3
SQLite version 3.19.3 2017-06-27 16:48:08
Enter ".help" for usage hints.
sqlite>
先ほど作成したmydb.backを指定して.restoreを実行します。
.restore ./mydb.back
sqlite> .restore ./mydb.back
sqlite>
データベースの内容がバックアップに保存されていたデータへ置き換わります。
スキーマを確認すると、2つのテーブルが復元されています。
.tables
sqlite> .tables
color user
sqlite>
テーブルを検索し、バックアップどおりのデータが保存されていることを確認します。
select * from user;
sqlite> select * from user;
devkuma|28|Seoul
kimkc|22|Busan
araikuma|32|Seoul
happykuma|23|Seoul
mykuma|23|Daejeon
sqlite>
select * from color;
sqlite> select * from color;
1|Red
2|Blue
3|White
sqlite>
これでバックアップしたデータベースを新しいデータベースへ復元できました。