joppot

コピペで絶対動く。説明を妥協しない

unix

mysqlデータベースのバックアップと復元(リストア)

投稿日:2014年2月20日 更新日:

Pocket

ff

概要

みなさんこんにはcandleです。今回はmysqlのバックアップとリストアを試してみましょう。

前回くらいに、様々なバックアップを試しましたが、それを問題なくリストア(復元)できなくては、意味ないのでそういった操作にもなれておきましょう。


前提

MAMPが入っているかmysqlが入っているか

MAMPの導入に関してはこのサイトの下の記事を参照してください。

ローカル開発環境のMAMPをインストール

unixコマンドが最低限使える


サンプルデータベースを用意する

 
前回の記事を読んでおり、サンプルデータベースが用意されていればこの項目は飛ばしてかまいません。

下のmysql文をコピーしてmsyql上で実行してください。

MAMPを使用しているならば、phpmyadminの「SQL」という所をクリックしてください。

MAMP_と_MAMP-4

下のSQL文をコピーアンドペーストして実行すれば、btestデータベースが作成されます。

MAMP_と_名称未設定-4

MAMP-3

sql文

CREATE DATABASE IF NOT EXISTS `btest` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `btest`;


CREATE TABLE `board` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(10) NOT NULL,
  `title` varchar(100) NOT NULL,
  `created` datetime NOT NULL,
  `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

INSERT INTO `board` (`id`, `user_id`, `title`, `created`, `modified`) VALUES
(1, 2, '今日の夕ご飯の献立', '2014-02-19 16:15:29', '2014-02-18 09:42:27'),
(2, 2, 'ガルボーおいしい', '2014-02-06 11:03:50', '2014-02-18 09:43:01'),
(3, 1, '小学校にトーテムポールあったよね?', '2014-02-12 19:07:13', '2014-02-18 09:44:01');


CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `age` int(10) NOT NULL,
  `created` datetime NOT NULL,
  `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

INSERT INTO `users` (`id`, `name`, `age`, `created`, `modified`) VALUES
(1, 'alice', 10, '2014-02-18 05:29:13', '2014-02-18 09:40:22'),
(2, 'bob', 12, '2014-02-17 21:11:44', '2014-02-18 09:40:43'),
(3, 'tom', 15, '2014-02-17 04:37:07', '2014-02-18 09:41:18');


バックアップをとる

バックアップの詳しい取り方などは前回の記事を参照してください。

バックアップはMAMPのphpmyadminからデータベースのエクスポートからできなくもないのですが、前回から引き続き、mysqldumpを使用します。

バックアップはバックアップファイルというのが出力されるので、その保存場所を確保する必要があります。

私はデスクトップにmysqlbackupというフォルダを作りました。

デスクトップ_—_bash-4

MAMPを起動してください。

MAMPのmysqldumpは下のパスにあります。

/Applications/MAMP/Library/bin/mysqldump

bin_—_bash-5

btestデータベース丸ごとバックアップをとります。

mysqldump -u root -p btest > backup.sql

mysqlbackup_—_bash-8

中身を見ると、バックアップがとれている事が分かります。

fa


テーブルとデータを破壊する

ただいま、btestデータベースには2つのテーブルがあります。「users」と 「board」です。
MAMP-5

ではあえて、データやテーブルを削除して、データベースが壊れた事にします。

まずは、usersのユーザーデータ、aliceとbobを削除します。

MAMP-5 2

次に、boardテーブルを削除します。
MAMP-6
これで、btestデータベースは壊れてしまいました(自演)。


バックアップからデータベースを復元する

では先ほど保存したbackup.sqlを読み込んでデータベースを復元しましょう。

ここではmysqlコマンドを利用します。

MAMPのmysqlコマンドは下のパスにあります。

/Applications/MAMP/Library/bin/mysql

bin_—_bash-8

mysqlコマンドを使ってバックアップファイルを読み込みます。

Mysql全てのデータベースをバックアップした場合は、簡単なコマンドだけで全てリストアできますが、今回の例では、btestデータベースのみを対象にバックアップを行ったので、-Dオプションをつける必要があります。

mysql -u root -p -D btest < backup.sql

mysqlbackup_—_bash-9

できたでしょうか?

phpmyadminで確認してみましょうか?

usersテーブルのデータも復元されています。
MAMP

boardテーブルも、もとに戻っていますね。

MAMP 2

成功しました。


まとめ

今回試した方法はMysql全てのデータベースをバックアップとっているわけではないので、もしも、Mysql全てのデータが飛んだ場合は、復元がやや面倒になります。

ただ、小規模なサービスとかならこの方法でバックアップとリストアは平気でしょう。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-unix
-,

執筆者:


comment

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

関連記事

最高に見やすいターミナルのフォントを選ぶ

概要 みなさんこんにちはcandleです。 今回は最高に見やすいターミナルのフォントと題し、解説していきたいと思います。 フォントを選ぶことは人生を選ぶくらい大事なことなのはお分かりだと思います。 プ …

ターミナルに奇麗な色をSolarizedで付ける(応用編)

概要 前回、Solarizedの一般的な設定をしたのですが、あまり奇麗な色がでなかったので、その対策です。 前提 coreutilsがインストールされてglsとdircolorが使えること できていな …

mysqlのデータベース、テーブル、データをmysqldumpを使用してバックアップする

概要 みなさんこんにちはcandleです。今回はmysqlのデータベースのバックアップを様々試します。 データベースのバックアップと言っても、テーブルのみとか構造のみとか、様々なオプションがあります。 …

Macターミナルのカーソルの前のプロンプトに表示されている文字をカスタマイズする

概要 皆さんこんにちはcandleです。今回は前回に引き続き、ターミナルのプロンプトに関してです。 プロンプトのカスタマイズをやっていきましょう。今回も、この本から抜粋します。 プロンプトで使用できる …

MacにMacPortsを使ってmecabを入れる

概要 みなさんこんにちはcandleです。形態素解析エンジンmecabをmacに入れてみましょう。 mecabは日本語を分析し、名刺や形容詞などの種類に分けたりできる便利なソフトです。 よく使われる例 …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

スポンサードリンク

アーカイブ