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> 

これでバックアップしたデータベースを新しいデータベースへ復元できました。