MySQL データベースのバックアップとリストアを行う (Windows 版)

Siden oppdatert :
ページ作成日 :

動作確認環境

MySQL
  • MySQL 8.0 Community Edition
Windows
  • Windows 11

動作必須環境

MySQL
  • MySQL 8.0
Windows
  • Windows 11
  • Windows 10
Windows Server
  • Windows Server 2022
  • Windows Server 2019
  • Windows Server 2016
  • Windows Server 2012 R2

前提条件

  • MySQL のデータベースがインストールされていること
  • バックアップ対象のデータベースがすでに存在していること
  • 環境変数を設定しコマンドプロンプトから mysql を実行できるようにしていること

バックアップの種類について

ここでは詳しく説明しませんが、MySQL では以下のようなコマンドでのバックアップの種類があります。

バックアップコマンド バックアップデータタイプ 備考
mysqldump 論理バックアップ 古くからあるバックアップ手法。GUI もこれを使用
mysqlpump 論理バックアップ mysqldump の改良版
MySQL Shell Instance Dump Utility and Dump Loading Utility 論理バックアップ 論理バックアップとしては現時点で最新
Percona XtraBackup 物理バックアップ 物理バックアップできるようにした他社製
CLONE PLUGIN 物理バックアップ MySQL 公式の物理バックアップ。ただしプラグインの追加が必要

GUI (MySQL Workbench) によるデータベースのバックアップ

コマンドを使わずに安全に GUI で操作したい場合は MySQL Workbench でバックアップを行うことができます。 MySQL Workbench で実行されるバックアップの種類は「mysqldump」になります。

MySQL Workbench を起動します。

バックアップするデータベースのあるコネクションを選択します。

バックアップ対象のデータベースが存在している状態で左の「Navigator」から「Administration」タブを選択し「Data Export」を選択します。

Data Export 画面が開きます。そこそこ画面が広いので右下の「Start Export」ボタンが見えるまでウィンドウを広げてください。

最初にバックアップ対象のデータベースを選択します。複数選択することもできます。

「Objects to Export」ではプロシージャやトリガーなども一緒にバックアップするかを選択できます。この項目は任意です。

「Export Options」では以下の2つを選べます。

種類 説明
Export to Dump Project Folder 所定のフォルダにテーブルやプロシージャ単位のファイルで出力します。
Export to Self-Contained File 単一のファイルに全て埋め込んで出力します。

どちらで出力しても問題ありません。上の選択であれば特定のテーブルだけ復元したい場合に簡単に取り除けるので楽です。下の選択は単一ファイルに出力するのでデータベース単位としてファイルの移動や管理が楽になります。 今回は下を選択しています。

設定をしたら右下にある「Start Export」ボタンをクリックしてエクスポートを開始します。

エクスポートが開始・完了します。

単一ファイルで出力した場合は以下のようになります。

フォルダに対してエクスポートした場合は以下のようになります。

GUI (MySQL Workbench) によるデータベースの復元

「MySQL Workbench」を開きコネクションを選択したら左の「Navigator」から「Administration」タブを選択し「Data Import/Restore」を選択します。 「Import/Restore」と書いてある通りエクスポートしたファイルから新たにデータベースを作成したり元々あったデータベースに上書きすることもできます。

右下に「Start Import」ボタンが見えるまでウィンドウを広げてください。

「Import Options」はエクスポートしたファイル形式に合わせて選択してください。 今回単一ファイルでエクスポートしたので下の「Import from Self-Contained File」を選択しエクスポートしたファイルを指定しています。

復元先のスキーマ(データベース)を選択します。既存のデータベースに対して復元することもできますし、右の「new」ボタンから新しいデータベースとして復元することもできます。

指定が終わったら右下の「Start Import」ボタンで復元を開始します。

復元が完了したらデータが戻っていることを確認してください。

コマンドによるデータベースバックアップのためのアカウントを作成

単発でコマンドを実行してバックアップする場合は問題ないのですが、例えばコマンドをあらかじめファイルとして用意しておいて実行する場合パスワードを平文で記述する必要があるため、別途バックアップ実行用のアカウントを作成しておいた方が安全です。

バックアップに必要な権限は以下の通りですが必要な情報に応じて増えたり減ったりする場合もあります。

  • EVENT
  • LOCK TABLES
  • SELECT
  • SHOW VIEW

コマンドで作成する場合は以下のようになります。MySQL のコマンドラインツールで実行してください。

create user '<ユーザー名>'@'<ホスト名>' identified by '<パスワード>';
GRANT EVENT, LOCK TABLES, SELECT, SHOW VIEW ON <データベース名>.* TO '<ユーザー名>'@'<ホスト名>';
flush privileges;

create user 'backup_user'@'localhost' identified by 'password';
GRANT EVENT, LOCK TABLES, SELECT, SHOW VIEW ON test_database.* TO 'backup_user'@'localhost';
flush privileges;

バックアップ先のフォルダ権限

バックアップファイルを保存するフォルダの権限はコマンドを実行する権限と同様の権限を設定しておく必要があります。 Administrators 権限でコマンドを実行する場合はフォルダに追加で権限を設定する必要はありません。

コマンド (mysqldump) によるデータベースのバックアップ

コマンドによるバックアップはいくつかありますが、今回は古くから使われており安定性のある「mysqldump」でバックアップを行います。

スタートメニューを右クリックしてターミナル (コマンドプロンプト) を起動します。「MySQL 8.0 Command Line Client」ではないので注意してください。

以下のコマンドでバックアップできます。

mysqldump -u <ユーザー名> -p<パスワード> --no-tablespaces --single-transaction --triggers --routines --events --default-character-set=utf8 <データベース名> > "<バックアップファイルパス>"

mysqldump -u backup_user -ppassword --no-tablespaces --single-transaction --triggers --routines --events --default-character-set=utf8 test_database > "C:\Temporary\Backup.sql"

  • --default-character-set=utf8 を指定すると GUI でバックアップしたときと同じ文字コードになります。こうすることによって GUI でもインポートできます。
  • パスワードの入力欄は -p とパスワードの間にスペースを入れないでください。
  • テーブルスペースの情報も出力する場合は --no-tablespaces を外してください。その場合実行ユーザーの権限に PROCESS が必要になります。

指定した場所にバックアップファイルが作成されます。

コマンド (mysqldump) によるデータベースの復元

mysqldump でバックアップしたファイルは SQL で実行できる形式なので対象 SQL を実行するだけです。 リストアは手動で行うことが多いと思うので root アカウントで実行しても問題ありません。

コマンドから実行する場合は PowerShell ではなくコマンドプロンプトで実行してください。PowerShell だと < 記号が使用できないためです。

以下のコマンドを実行します。

mysql -u root -p<root のパスワード> <データベース名> < <バックアップした SQL のファイルパス>

mysql -u root -ppassword test_database < C:\Temporary\Backup.sql

データベースの自動バックアップ

Windows の場合はタスクスケジューラーを使用するのが一般的です。 まずはバッチファイルを作成します。.bat ファイルを作成し中身はコマンドでバックアップしたものをそのまま入力して保存します。 文字コードは Shift-JIS で保存します。バッチファイルの保存場所やファイル名は任意です。

タスクスケジューラーへの登録を行います。スタートメニューを右クリックして「コンピューターの管理」を選択します。

左のメニューから「コンピューターの管理 > システムツール > タスク スケジューラ > タスク スケジューラ ライブラリ」を選択します。 右のメニューから「タスクの作成...」を選択します。

「全般」タブを設定します。「名前」はタスクの一覧に表示されるので分かりやすい名前を入れます。 セキュリティオプションでは「ユーザーがログオンしているかどうかにかかわらず実行する」にチェックを入れます。

「トリガー」タブではどのタイミングでバックアップを実行するかを設定します。 この設定は運用に合わせて設定してください。

「操作」タブでは先ほど作成したバッチファイルを起動するように設定します。

それぞれ設定したら OK ボタンで確定します。

指定したアカウントで実行するためにパスワードを入力して登録します。

あとは指定した時間にバックアップが実行されるか確認してください。