SQL総復習④ ダンプとリストア
こんにちは!
スマレジ テックファームのMichiです!
今回は『SQL総復習④ ダンプとリストア」編です。
ダンプとリストアとは?
データベースからテーブルやデータを抜き取り、sqlファイルに変換することをダンプ、ダンプしたファイルから再度テーブルやデータを生成することをリストアといいます。
コマンド
ダンプとリストアを実行するには、下記のコマンドを実行します。
ダンプ
# 全データベースのダンプ
$ mysqldump -u {ユーザー名} -p -x --all-databases > {ファイル名}.sql
# 指定したデータベースのダンプ
$ mysqldump -u {ユーザー名} -p -x {データベース名} > {ファイル名}.sql
# 指定したテーブルのダンプ
$ mysqldump -u {ユーザー名} -p -x {データベース名} {テーブル名} > {ファイル名}.sql
ちなみに、コマンド中の-xは「バックアップ実行中は全テーブルをロックする」というオプションです。ロックすることで、ダンプ中にデータの更新が実行されてテーブル間で整合性が取れなくなる事態を防ぎます。
リストア
# 全データベースのリストア
$ mysql -u {ユーザー名} -p < {ファイル名}.sql
# 指定したデータベースのリストア
$ mysql -u {ユーザー名} -p {データベース名} < {ファイル名}.sql
実践
前回の記事『SQL総復習③ インデックス』で使用したusersテーブルを使用します。テーブルの作成方法はそちらに記載していますので、この記事では割愛します。
ダンプする
※windowsを使用している方は、PoweShellで操作すると文字化けが発生するので、コマンドプロンプトかGit Bashを使用してください。筆者はGit Bashを使用しました。
①sqlファイルを出力したいディレクトリまで移動して、ダンプコマンドを入力。パスワードを要求されるので入力。
$ mysqldump -u root -p -x blog users > 20230330_dump_users.sql Enter password: ****
②lsコマンドで確認すると、20230330_dump_users.sqlファイルが作成されているのが分かる。
$ ls __pycache__/ 20230330_dump_users.sql model.py names.xlsx requirements.txt seeder.py
③ファイルの中身を確認してみると、対象テーブルのCREATE TABLE文とINSERT文が記載されている。

リストアする
①テーブルを丸ごと削除
DROP TABLE users;
②ダンプファイルがあるディレクトリまで移動して、リストアコマンドを入力。パスワードを要求されるので入力。
$ mysql -u root -p blog < 20230330_dump_users.sql Enter password: ****
③データベースを確認。削除前の状態に戻っている

まとめ
データベースのダンプとリストアについて解説しました。実務では結構使うことの多いスキルなのですが、入門本に載ってないことが多いので今回記事にしてみました。
ここまでお読みいただきありがとうございました。