【MySQL】バックアップ/リストアのノウハウ

投稿者: | 2016/06/22

今回は、MySQLのdump及びrestore時のノウハウを紹介したいと思います。
すぐに忘れてしまうので、備忘録も兼ね。

バックアップ方法(mysqldump の使用)

取得したい情報によって、オプション等が変わってきますので、
注意が必要です。

とその前に

mysqldump コマンドの色々な使い方を知る前に、知っておきたいオプションがあります。
それは「–single-transaction」というものです。
このオプションは InnoDB のトランザクションを利用してバックアップを取得しますというものです。
例えばバックアップの対象となるデータが膨大で、バックアップに1時間かかるとしましょう。
そうした場合でもトランザクションを利用してくれるので、
バックアップを開始した時点のデータも(1時間後に)終了する間際のデータも全く整合性のとれたデータであることを保証してくれます。
ですので、 –single-transaction オプションは何も考えずにつけておくと良いと思います。

対象:全てのデータベース

MySQL の全てのデータベースを dump バックアップするには、次のコマンドで行います。

$ mysqldump --single-transaction -u DBユーザ名 -p --default-character-set=utf8 -x --all-databases > 出力ファイル名

オプション -x は、全てのデータベースの全てのテーブルをロックするためのオプションであり、バックアップ中のデータの操作を禁止します。
整合性を担保するために基本的には付けておいたほうがいいですが、
整合性についてあまりシビアでは無いデータ(バックアップ中に更新が入ってもいい)の場合は、オプション -x を外してもいいかもしれません。

対象:特定のデータベース

MySQL の特定のデータベースのデータを dump バックアップするには、次のコマンドで行います。

mysqldump --single-transaction -u DBユーザ名 -p --default-character-set=utf8 DB名 > 出力先ファイル名

対象:特定のテーブル

MySQL の特定のテーブル(複数可)データのみ dump バックアップするには、次のコマンドで行います。

mysqldump -u DBユーザ名 -p --default-character-set=utf8 -t DB名 テーブル1 テーブル2...> 出力先ファイル名

対象:一定条件を満たすレコード

MySQL の一定条件を満たすレコードのみ dump バックアップするには、次のコマンドで行います。

mysqldump -u DBユーザ名 -p --default-character-set=utf8 -t "--where=カラム名='文字列'" DB名 テーブル名 > 出力先ファイル名

リストア方法

mysqldump コマンドとは違い、リストアするときは至って簡単です。
→基本的には「全データベースdump」と「それ以外」の2パターンのみです。

全データベースdump リストアする場合

全てのデータベースの dump ファイルを、データベースに復元する方法は次のコマンドでできます。

mysql -u DBユーザ名 -p --default-character-set=utf8 < dumpファイル名

それ以外(DB指定)の場合

特定のデータベースの dump ファイルを、特定のデータベースに復元する方法は次のコマンドでできます。
※ データの投入先となるデータベースは先に作成しておく必要があります。

mysql -u DBユーザ名 -p --default-character-set=utf8 DB名 < dumpファイル名

何かあれば追記しようと思います。
以上です。

コメントを残す

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