Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


4.6.8.3 バイナリログファイルのバックアップのための mysqlbinlog の使用

デフォルトでは、mysqlbinlog はバイナリログファイルを読み取り、その内容をテキスト形式で表示します。これにより、ファイル内のイベントが調べやすくなり、(たとえば出力を mysql への入力として使用して) それらを再実行できます。mysqlbinlog はローカルファイルシステムから直接ログファイルを読み取るか、または --read-from-remote-server オプションで、サーバーに接続してそのサーバーからバイナリログの内容を要求できます。mysqlbinlog はテキスト出力を標準出力、または --result-file=file_name オプションが指定された場合はその値で指名されるファイルに書き出すことができます。

MySQL 5.6 では、mysqlbinlog はバイナリログファイルを読み取って、同じ内容、つまりテキスト形式ではなくバイナリ形式の内容を含む新しいファイルに書き出すことができます。この機能により、バイナリログを容易に元の形式でバックアップできます。mysqlbinlog は、ログファイルのセットのバックアップを実行して最後のファイルの最後に到達したときに停止して、静的バックアップを作成できます。また、最後のログファイルの最後に到達したときにサーバーとの接続を保ち、新しいイベントが生成されるたびにコピーを継続して、連続的な (ライブ) バックアップを作成することもできます。連続的なバックアップ操作では、mysqlbinlog は接続が終了するまで (たとえばサーバーが終了するときなど)、または mysqlbinlog が強制的に終了させられるまで実行されます。接続が終了する際、スレーブレプリケーションサーバーとは異なり、mysqlbinlog は待機して再接続を試みません。サーバーの再起動後にライブバックアップを続行するには、mysqlbinlog も再起動する必要があります。

バイナリログバックアップには、mysqlbinlog を少なくとも 2 つのオプションを使用して起動する必要があります。

  • --read-from-remote-server (または -R) オプションは mysqlbinlog に、サーバーに接続してバイナリログを要求するよう指示します。(これは、マスターサーバーに接続するスレーブレプリケーションサーバーと同様です。)

  • --raw オプションは mysqlbinlog に、テキスト出力ではなく生の (バイナリ) 出力を書き出すように指示します。

--read-from-remote-server オプションに加えて、次のオプションを指定するのが一般的です。--host はサーバーが稼働している場所を示し、--user および --password などの接続オプションも必要な場合があります。

--raw とともに使用すると便利なオプションがほかにいくつかあります。

  • --stop-never: 最後のログファイルの最後に到達したあと、サーバーとの接続を維持して新しいイベントの読み取りを続行します。

  • --stop-never-slave-server-id=id: --stop-never が使用される場合に mysqlbinlog がレポートするサーバー ID。デフォルトは 65535 です。これは、スレーブサーバーまたは別の mysqlbinlog プロセスの ID との競合を避けるために使用できます。セクション4.6.8.4「mysqlbinlog サーバー ID の指定」を参照してください。

  • --result-file: あとで説明するように、出力ファイル名のプリフィクス。

mysqlbinlog でサーバーのバイナリログファイルのバックアップを行うには、サーバーに実際に存在するファイル名を指定する必要があります。名前がわからない場合は、サーバーに接続して SHOW BINARY LOGS ステートメントを使用して現在の名前を表示します。このステートメントによって次の出力が生成されるとします。

mysql> SHOW BINARY LOGS;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000130 |     27459 |
| binlog.000131 |     13719 |
| binlog.000132 |     43268 |
+---------------+-----------+

この情報により、mysqlbinlog を使用して次のようにバイナリログを現在のディレクトリにバックアップできます (コマンドは 1 行に 1 つずつ入力します)。

  • binlog.000130 から binlog.000132 までの静的バックアップを行うには、次のいずれかのコマンドを使用します。

    mysqlbinlog --read-from-remote-server --host=host_name --raw
      binlog.000130 binlog.000131 binlog.000132
    
    mysqlbinlog --read-from-remote-server --host=host_name --raw
      --to-last-log binlog.000130
    

    最初のコマンドはすべてのファイル名を明示的に指定します。2 番目は最初のファイルのみを指名し、--to-last-log を使用して最後まで読み取ります。これらのコマンド間の違いは、mysqlbinlogbinlog.000132 の最後に到達する前にサーバーが binlog.000133 を開いた場合に、最初のコマンドはそれを読み取りませんが、2 番目のコマンドは読み取るという点です。

  • mysqlbinlogbinlog.000130 から既存のログファイルのコピーを開始し、その後接続を維持してサーバーが新しいイベントを生成するにつれてそれらをコピーするライブバックアップを行うには:

    mysqlbinlog --read-from-remote-server --host=host_name --raw
      --stop-never binlog.000130
    

    --stop-never を使用すると、--to-last-log オプションは暗示されているため、最後のログファイルまで読み取るようにこのオプションを指定する必要はありません。

出力ファイルの命名

--raw を使用しないと、mysqlbinlog はテキスト出力を生成し、--result-file オプションが与えられた場合は、すべての出力が書き出される単一のファイルの名前を指定します。--raw を使用すると、mysqlbinlog はサーバーから転送される各ログファイルに対して 1 つのバイナリ出力ファイルを書き出します。デフォルトでは、mysqlbinlog はファイルを現在のディレクトリに元のログファイルと同じ名前で書き出します。出力ファイル名を変更するには、--result-file オプションを使用します。--raw も指定されている場合、--result-file オプション値は出力ファイル名を変更するプリフィクスとして処理されます。

サーバーに現在 binlog.000999 以上の名前のバイナリログファイルがあるとします。mysqlbinlog --raw を使用してファイルのバックアップを行う場合、--result-file オプションは次の表に示すように出力ファイル名を生成します。--result-file の値をディレクトリパスで始まるようにすることで、ファイルを特定のディレクトリに書き出すことができます。--result-file の値がディレクトリ名のみで構成されている場合は、その値はパス名区切り文字で終わっていなければなりません。出力ファイルが存在する場合は上書きされます。

--result-file オプション 出力ファイル名
--result-file=x xbinlog.000999 以上
--result-file=/tmp/ /tmp/binlog.000999 以上
--result-file=/tmp/x /tmp/xbinlog.000999 以上
例: mysqldump と mysqlbinlog を合わせてバックアップとリストアを行う

次の例は、mysqldumpmysqlbinlog を一緒に使用してサーバーのデータおよびバイナリログのバックアップを取る方法、およびデータの損失が生じた場合にバックアップを使用してサーバーのリストアを行う方法を示す簡単なシナリオを説明しています。例では、サーバーはホスト host_name 上で稼働し、最初のバイナリログファイルの名前は binlog.000999 であるとします。コマンドは 1 行に 1 つずつ入力します。

mysqlbinlog を使用してバイナリログのバックアップを継続的に作成します。

mysqlbinlog --read-from-remote-server --host=host_name --raw
  --stop-never binlog.000999

mysqldump を使用してサーバーのデータのスナップショットとしてダンプファイルを作成します。--all-databases--events、および --routines を使用してすべてのデータのバックアップを行い、--master-data=2 を使用して現在のバイナリログ座標をダンプファイルに含めます。

mysqldump --host=host_name --all-databases --events --routines --master-data=2> dump_file

必要に応じて mysqldump コマンドを定期的に実行して、新しいスナップショットを作成します。

データ損失が生じた場合 (たとえばサーバーのクラッシュなど)、直近のダンプファイルを使用してデータをリストアします。

mysql --host=host_name -u root -p < dump_file

次にバイナリログバックアップを使用して、ダンプファイル内にリストされている座標よりあとで書き出されたイベントを再実行します。ファイル内の座標が次のようになっているとします。

-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.001002', MASTER_LOG_POS=27284;

直近にバックアップされたログファイルが binlog.001004 という名前の場合、次のようにログイベントを再実行します。

mysqlbinlog --start-position=27284 binlog.001002 binlog.001003 binlog.001004
  | mysql --host=host_name -u root -p

リストア操作をより容易に実行するために、または MySQL でリモート root アクセスが許可されない場合は、バックアップファイル (ダンプファイルおよびバイナリログファイル) をサーバーホストにコピーする方が簡単な場合もあります。


User Comments
Sign Up Login You must be logged in to post a comment.