【初学者と差がつく】MySQLでバックアップを取る

今日の記事は、短いです。

が、とても大切なことです。

MySQLに限らず、データベースに保存されたデータは企業にとって命の次に大切と言っても過言ではありません。

今日は、MySQLでバックアップを取る方法を解説します。

開発途中にデータが消えないように、しっかり学習してから現場にでましょう。

今日の記事は、

  • MySQLのバックアップの取り方が分からない
  • データベースに破損が起きないか不安
  • 現場で即使えるMySQLの知識を身に付けたい

こんな方におすすめの記事です。

それでは、やっていきましょう。

バックアップを取る

まずは、テスト用のデータベースを用意しましょう。

MySQLを起動して以下のコマンドを入力してください。

> create database item;
> use item;
> create table items (
                     id int primary key auto_increment,
                     name text,
                     price int
);
> insert into items set name='りんご', price=200;

詳しくは、【webアプリ作成に必須?】MySQLでデータベースを作成するで解説していますので、ご参考ください。

それでは、バックアップを取っていきましょう。

起動したMySQLから一度抜けて、コマンドプロンプに以下を入力します。

mysqldump --single-transaction --quick -u root item > item.dump

※僕の場合は、ユーザー名がrootでパスワードは設定していないため上記で成功します

これでバックアップは完了です。

同様のディレクトリで「ls」コマンドを入力すると、item.dumpというファイルが出来上がっているはずです。

–single-transactionと–quickとは

バックアップを取ることはできましたが、2つほど気になるコマンドがありますね。

以下2つのオプションについてのリファレンスです。

–single-transaction

このオプションは、データのダンプ前に、トランザクション分離モードを REPEATABLE READ に設定し、START TRANSACTION SQL ステートメントをサーバーに送信します。これは、InnoDB などのトランザクションテーブルの場合にかぎって便利です。その場合、アプリケーションをブロックすることなく、START TRANSACTION が発行された時点のデータベースの一貫した状態をダンプするからです。

MYSQLリファレンス: https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html

–quick

このオプションは大規模なテーブルのダンプに便利です。これは mysqldump に対して、テーブルのすべての行のセットを取得して、書き出す前にメモリーにバッファリングするのではなく、サーバーから 1 行ずつ行を取得することを強制します。

MYSQLリファレンス: https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html

つまり、

  • –single-transactionは、バックアップ前のデータとバックアップ後のデータの整合性を担保する
  • –quickは、1行1行バックアップすることを強制する

ということです。

大規模なwebアプリでのバックアップは、時間がかかる上に、途中でバグが起きる可能性があります。

バグを極力起こさないために用意されたオプションなので、呪文のように覚えてしまうとよいでしょう。

バックアップから復元する

バックアップまで取ったら復元する方法も学習していきましょう。

先ほどのDBを消して、再度DBを作成します。

※バックアップデータはあくまでもテーブルの内容になりますので、DBの再作成は必要になります

MySQLを起動して、以下のコマンドを入力してください。

> drop database item;
> create database item;

データベースは再作成されましたか?

MySQLから一度抜けて、コマンドプロンプトに以下を入力します。

mysql -u root item < item.dump

ここで注意なのが、「<」の記号です。

バックアップの時とは、逆向きの記号を使用します。

ちなみにこの記号を間違えると、

バックアップデータが消えるので本当に注意です。

僕は、これやらかしました。。。(練習でよかった。。。)

MySQLに再ログインして、テーブルの中身を確認してみましょう。

復元されていたら成功です。

まとめ

バックアップ方法:

mysqldump --single-transaction --quick -u ユーザー名  データベース名 > ファイル名

復元方法:

mysql -u ユーザー名 データベース名 < ファイル名
  • 「<>」記号に注意すること

プログラミングを学習していると、作ることに夢中になります

しかし、データを守ることも必要になるので、保守の考えも身に付けていくといいですね。

また、がんばって学習していきましょう。