HeidiSQLでMySQL/MariaDBを簡単にバックアップするには

はじめに

どんなシステムにも言えることだが、事前にバックアップの仕組みを用意しておくことは欠かせない。
MySQLなどの関係型データベースシステムも例外ではない。

普段は、関係型データベースの管理ツールとして「HeidiSQL」を使っているので、何かバックアップの仕組みが用意されていないか調べてみた。
すると、本格的な仕組みではないものの、十分にバックアップとしての要件を満たせそうな機能が用意されていることが分かった。

本記事では、その機能の紹介をしたい。

データベースの内容をSQL文で出力する

データベースのバックアップには様々な方法があるが、実は一番使える方法がSQL文を出力するやり方だ。

この方法は、データをSQL文というテキスト形式に一度変換するため、ある程度の時間を要するのが難点だが、小規模なシステムや個人で使っているようなシステムではほぼ問題にはならない。
SQL文の処理さえできれば要件を満たせるため、バックアップのために追加の仕組みを別途用意する必要もない。

テキストファイルなのでデータの可読性が高いのも長所の一つだろう。

その代わり、金融機関のオンラインサービスの裏で動いているような巨大なデータベースシステムでは、全く検討すらされない方法でもある。
その一番の理由は、前述の通り時間がかかるからだ。

なので、向き不向きがはっきりした方法にはなってしまうが、状況によっては非常に役に立つ方法でもある。
HeidiSQLでは、このSQL出力機能が標準機能として提供されている。

SQLを出力するには

まずはHeidiSQLを起動しよう。
HeidiSQLのショートカットを作っているならそこから起動すればよいし、そうでなければWindowsのスタートメニューから起動してもよいだろう。

今回使用した環境では、HeidiSQLはスタートメニューの「M」のところに起動用のアイコンが存在する。
頭文字の「H」のところでないのは、MariaDBと同時にインストールされたモジュールを使用しているからだ。
単独でHeidiSQLをインストールした場合には、恐らく「H」のところに分類されるのではないかと思われる。

HeidiSQLのアイコンが見つかったら、ダブルクリックして起動しよう。
すると、以下のような初期画面が表示されるはずだ。

左側のウィンドウに「kaikei」という名前のデータベースが存在しているのが見えるが、今回は試しにこれをバックアップしてみることにする。

カーソルを「kaikei」に合わせてマウスを右クリックしよう。
すると、以下のようなメニューが表示される。

メニューの中ほどに「データベースをSQLとしてエクスポート」という項目があるので、これを選択しよう。

続いて、以下のような設定画面が表示される。

今回は「kaikei」データベースを選択したので「kaikei」の前のチェックボックスにチェックが入っているが、改めてこの段階でバックアップ対象を選びなおすことが可能だ。

バックアップはデフォルトでは、テキストファイルへSQL文が書き込まれる方式で行われる。
出力先を変更するには、上図の赤枠で囲ったディレクトリーのアイコンをクリックすればよい。

他にも出力ファイルをZIP形式で圧縮したり、出力先をファイルではなくクリップボードに変更することなどができるようだ。

今回は特に設定を変更せず、デフォルト動作のままでバックアップを実施することにした。

準備が整ったら画面右下の「エクスポート」ボタンを押下しよう。
しばらくするとバックアップが開始され、SQL文が出力される。

出力されるSQL文

出力されるSQL文の一例を紹介しておこう。

データベースをバックアップすると、最初に生成されるのはデータベースを作成する「CREATE DATABASE」文になる。
前述の「kaikei」データベースの場合は、以下のようなSQL文が生成されていた。

-- kaikei のデータベース構造をダンプしています
CREATE DATABASE IF NOT EXISTS kaikei /*!40100 DEFAULT CHARACTER SET utf8mb4*/;
USE kaikei;

この文に続いては、テーブルを作成する文、テーブルにデータを挿入する文、ストアドプロシージャやストアド関数の定義文、ビューの定義文などが作成されるようだ。

例として、「maccountgroup」テーブルの定義文とデータ挿入文の部分を挙げておく。
主キーや外部キーなどのキー情報や、AUTO_INCREMENT項目の設定などももれなくバックアップされるようだ。

-- テーブル kaikei.maccountgroup の構造をダンプしています
CREATE TABLE IF NOT EXISTS maccountgroup (
accountGroupId int(11) NOT NULL AUTO_INCREMENT,
accountGroupName varchar(50) NOT NULL,
accountSideId int(11) NOT NULL,
PRIMARY KEY (accountGroupId),
KEY FK_maccountgroup_mside (accountSideId),
CONSTRAINT FK_maccountgroup_mside FOREIGN KEY (accountSideId) REFERENCES mside (sideId) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='科目グループマスター';

-- テーブル kaikei.maccountgroup: ~5 rows (約) のデータをダンプしています
/*!40000 ALTER TABLE maccountgroup DISABLE KEYS */;
INSERT INTO maccountgroup (accountGroupId, accountGroupName, accountSideId) VALUES
(1, '費用', 0),
(2, '収益', 1),
(3, '資産', 0),
(4, '負債', 1),
(5, '純資産', 1);
/*!40000 ALTER TABLE maccountgroup ENABLE KEYS */;

HeidiSQLのインストールについて

順序が逆になってしまうが、HeidiSQLのインストール方法について簡単に触れておく。

今回取り上げたHeidiSQLは、MariaDBをインストールした際に自動的に追加インストールされたものを使用している。
ちなみにMariaDBは、以下の記事で紹介した際にインストールしたものを使用している。

そのため今回は、HeidiSQL自身を単独でインストールする方法は試していないが、「HeidiSQL インストール」などで検索してみると、インストール方法を解説しているサイトなどが見つかるようだ。

HeidiSQLの公式サイトがなぜか出て来ないのだが、アーカイブの二次配布をしている著名なサイトなら見つかったのでそこからダウンロードすればよいだろう。
その著名なサイトとは「窓の杜」だ。

一般的にはアーカイブを二次配布サイトからダウンロードするのは危険なので避けるべきなのだが、ここは大丈夫そうなので紹介することにする。
以下にURLを掲示しておく。

https://forest.watch.impress.co.jp/library/software/heidisql/

終わりに

HeidiSQLを使って、MySQL、またはMariaDBのバックアップをSQLベースで簡単に出力する方法を紹介した。
ただし、実際に試しているのはMariaDBのみで、MySQLで本当に動作するかは検証していない。

当ブログはバックアップの記事が多いのだが、過去に何度かバックアップを取らずに痛い目にあった経験があるからでもある。
万が一の事態に備えて、バックアップは定期的に実施しておくことをおすすめする。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です