Michi's Tech Blog

一人前のWebエンジニアを目指して

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: ****

③データベースを確認。削除前の状態に戻っている

1万件分の氏名と年齢のデータが入ったusersテーブル

まとめ

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

ここまでお読みいただきありがとうございました。