メタデータの末尾にスキップ
メタデータの先頭に移動

バイナリログについて

MySQLはクエリを一連のバイナリログファイルに記録することでリプリケーションを実装します。ファイルはサーバのローカルファイルシステムに書き込まれます。スレーブはMySQLインスタンスに接続し、特定のファイルとオフセットから開始されるこれらのファイルを要求します。

しかし、MySQLは以下の欠点があります:

  • システム全体で一つのバイナリログを保持します。
  • 耐障害性はせいぜいファイルシステムによって提供されます。
  • sync_binlog が有効でないと、バイナリログは電源の喪失の結果としてデータベースと矛盾を生じえます。
  • 静的な設定はサーバが開始した時のみ読み込まれ、/etc/my.cnf への変更はサーバの再起動を必要とします。

Clustrixは以下の追加の機能を提供することで、MySQLの機能に勝ります:

  • Clustrixは複数の独立したバイナリログを保持します(例えば、データベース毎、あるいはデータベースのセット)
  • バイナリログはClustrixのシステムの他の部分と同じ保証で、耐障害性があります。
  • binlogへの書き込みはトランザクション、一貫性および耐久性があります(完全なACID保証)。
  • バイナリログはオンラインで作成および削除が可能です。

Clustrixシステムを一つのバイナリログで設定するには、以下のコマンドを発行します:

mysql> CREATE BINLOG 'clustrix-bin';
mysql> SHOW MASTER STATUS;


バイナリログを無効にし、(永久に)既存のbinlogを削除するには:

mysql> DROP BINLOG 'clustrix-bin';

バイナリログファイルを作成する


バイナリログを作成するには、以下のコマンドを発行します:

CREATE BINLOG Syntax
mysql> CREATE BINLOG 'file_name' [LOG (db1,db2,...)], IGNORE (db3,db4,...)][, FORMAT=<'statement'|'row'>];
mysql> CREATE BINLOG 'mybinlog';


オプションの属性は:

  • LOG: 記録する特定のデータベースのリスト
  • IGNORE: 無視する特定のデータベースのリスト
  • FORMAT: フォーマットの指定 ("statement" または "row").

この機能は複数のバイナリログをサポートすることで、MySQLが異なるデータベースのセットを含むように拡張します。デフォルトでは、このコマンドはクラスタ全体に関するバイナリログファイルをstatement形式で作成します。これはMySQLの環境では最も一般的なフォーマットです。特定のwrite負荷において、行ベースのリプリケーションは強力なパフォーマンス効果を提供します。あなたの環境において最も適切なものが分からない場合は、Clustrixテクニカルサポートに連絡を取ってください。

バイナリログのオプションを設定する

バイナリログのオプションを設定するには、ALTER BINLOGコマンドを発行します。ALTER BINLOG logfile コマンドのオプションは以下の通りです。

フラグ

説明

LOG (db1, db2)

db1とdb2データベースへのupdate のみを記録します

IGNORE (db3)

db3へのupdateを無視します

ADD LOG (db4)

他のデータベースに加えて、db4へのupdateを記録します

ADD IGNORE (db5)

他のデータベースに加えて、db5へのupdateを無視します。

DROP LOG (db6)

db6への記録を停止します

LOG ALL

(特定のデータベースとは逆に)全てのデータベースへのupdateを記録します。"ignore"リストをリセットしません。)

DISABLE

このbinlogへの記録を無効にします。

ENABLE

このbinlogへの記録を有効にします。

RENAME bar

指定されたbinlogを"bar"に名前を変えます

FORMAT='row' or 'statement'

ログフォーマットを設定します(rowベースあるいはstatementベース)

バイナリログ情報を表示します


一つだけしかバイナリログが無い場合は、以下のコマンドを発行することで、そのファイル名、セグメント番号およびポジションを表示することができます。

mysql> SHOW MASTER STATUS;


一つより多いバイナリログがある場合は、グローバル変数 Master_status_binlog で指定されるログが表示されます。Master_status_binlog が設定されていない場合は、エラーが返ります。この挙動はMySQLのmysqldump --Master-dataコマンドの挙動と互換性があります。

mysql> SET GLOBAL Master_status_binlog = 'foo';
mysql> SHOW MASTER STATUS;

全てのバイナリログのステータスを表示するには、以下のコマンドを発行します:

mysql> SHOW ALL MASTER STATUS;

バイナリログに関する詳細な情報を表示するには、以下のコマンドを発行します:

mysql> SHOW BINLOGS;

この情報のほとんどは直接には有用ではありませんが、ログのサイズはログをトリムするかどうかを決めるために役に立つでしょう。

バイナリログのトリム

以下のメソッドのどちらかを使ってバイナリログをトリムすることができます:

  • TRIM BINLOG コマンド
  • trim-binlog スクリプト
TRIM BINLOGコマンドを使ってトリムする

mysqldump --Master-data コマンドを使って規則的にデータベースのバックアップを取ります。dumpの開始時にバイナリログファイル名を記録します。バイナリログのサイズを管理するには、この値を使ってバックアップの後で以前のデータをトリムします。The precise extent to which you trim is a matter of policy: you can choose to retain a week's history, or you might prefer to minimize disk consumption as much as possible by trimming all but the current file. To minimize the amount of space being used by your binary log, trim according to the Slave that is farthest behind in replication.


バイナリログを構成するファイルをリスト表示するには、以下のコマンドを発行します:

mysql> SHOW BINLOG FILES;

システムはバイナリログを構成するファイルをリスト表示します。例えば:

mysql> show binlog files;
+-----------------+-----------+-----------------------+
| File            | Size      | First Event Timestamp |
+-----------------+-----------+-----------------------+
| eukanuba.000001 | 104857600 | 2013-01-09 19:51:08   |
| eukanuba.000002 | 104857600 | 2013-01-09 20:02:09   |
| eukanuba.000003 | 104857600 | 2013-01-09 22:22:27   |
| eukanuba.000004 | 104857600 | 2013-01-09 22:30:37   |
| eukanuba.000005 | 104857600 | 2013-01-09 22:38:11   |
| eukanuba.000006 | 104857600 | 2013-01-09 22:45:44   |
| eukanuba.000007 | 104857600 | 2013-01-09 22:53:03   |
| eukanuba.000008 | 104857600 | 2013-01-09 23:00:44   |
| eukanuba.000009 | 104857600 | 2013-01-09 23:07:46   |
| eukanuba.000010 | 104857600 | 2013-01-09 23:15:00   |
...


現在のスレーブ構成を表示するには、SHOW SLAVE STATUSコマンドを発行します。これはステータスを以下のように表示します:

mysql> show slave status\G
*************************** 1. row ***************************
            Slave_Name: default
          Slave_Status: Running
           Master_Host: alpo
           Master_Port: 3306
           Master_User: root
       Master_Log_File: alpo
         Slave_Enabled: Enabled
          Log_File_Seq: 3383
          Log_File_Pos: 58790712
            Last_Error: no error
     Connection_Status: Connected
  Relay_Log_Bytes_Read: 0
Relay_Log_Current_Size: 0
 Seconds_Behind_Master: 0
1 row in set (0.00 sec)


ファイル名の項目は、SHOW MASTER STATUSコマンドで返ってくるファイル名です。シーケンス番号 (Log_File_Seq) はバイナリログが現在利用しているファイルを示します (ファイル名の数字の箇所です)。古いバイナリデータをログ全体を削除せずに削除するには、以下のコマンドを発行します (######はシーケンス番号を示します):

mysql> TRIM BINLOG binlog_name BEFORE FILE 'binlog_name.######';

例として、以下のコマンドは指定されたバイナリログの 2011年9月28日 7:15 PM 以降の内容を削除します (上のSHOW BINLOG FILESコマンドの出力に基づいています):

mysql> TRIM BINLOG clx001 BEFORE FILE 'clx001.000283';
binlog-trimスクリプトを使ったトリム

システムの/bin/binlog-trimにbinlog-trimスクリプトを見つける事ができます。
使い方
binlog-trim [options]
オプション

オプション

説明

-h, --help

ヘルプメッセージを表示し、終了します

-H HOST, --host=HOST

ホストを指定します

-P PORT, --port=PORT

SQL ポート、デフォルトはmysqlポート: 3306

-u USER, --user=USER

ユーザ名、デフォルトはrootです

-p PASSWD, --passwd=PASSWD

パスワードを指定します

-n NUM_FILES, --num-files=NUM_FILES

Number of files to trim a time

-d, --dry

実際のトリムは行いません

-k KEEP_DAYS, --days=KEEP_DAYS

この期間だけbinlogを保持します

-i INTERVAL, --interval=INTERVAL

トリムの間の秒数

-b BINLOG_NAME, --binlog_name=BINLOG_NAME

trimするbinlogの名前; 複数のbinlogが存在する場合には指定する必要があります

-M MAX_RUN_TIME_MINS, --max-run-time-mins=MAX_RUN_TIME_MINS

スクリプトが実行される最大時間(分)

-V, --version

バージョンを表示します

-N, --new-method

高速化のために、SHOW BINLOG FILESの代替を使用します

binlog-trimは一般的に一つのノード上でのcronジョブとして配備されます。An example entry to run once a day at 5:35UTC, with a retention policy of 7 days, trimming no more than 50 files at a time, with a minimum 60 second pause between trims, and operating on the binlog called clustrix-bin:

35 5 * * * root /bin/binlog-trim -H localhost -i 60 -k 7 -n 50 -b clustrix-bin 2>&1 >> /var/log/binlog-trim.log
Icon

The INTERVAL is a minimum wait between trims; there is additional logic in the script to prevent the trims from building up too much cleanup work (the logs will indicate this with 'waiting for bigc to pass trim').

バイナリログのバックアップ

Clustrixのバイナリログ(binlog)はテキストファイルとして保存されていないため、MySQLのbinlogのようにバックアップすることができません。バックアップの目的のために、Clustrixはrepclientユーティリティを提供しています。これはbinlogをClustrixまたはMySQLシステムからまるでリプリケートスレーブのようにコピーします。 repclientユーティリティはどのClustrixノード上でも実行することができます。


全てのbinlogをClustrixクラスタからコピーするには、以下のステップを実行してください:

  1. 最も最近のbinlogをリスト表示するには、SHOW MASTER STATUSコマンドを発行してください。コマンドは"clustrix-bin.001903"のようなファイル名を返します。
  2. ノード上の /clustrix mount の中にディレクトリを作成し、そこにcdします。
  3. 最も最近までの全てのbinlogファイルを取り出すには、以下のコマンドを発行します: 

    node# repclient -addr 10.52.2.20 -dumpbinlog -logname clustrix-bin.000001 -end_logname clustrix-bin.001903
Icon

デフォルトでは、このツールはstdoutに復号化されたbinlogメッセージを出力します。出力先のファイルを指定するには、-dumpbinlog オプションを指定します。binlogを圧縮するつもりの場合は、-logposを省略します。これは結果のbinlogにgapを作成することができます。デフォルトでは、このユーティリティはマスターにつないだままになります。 To specify when it is to disconnect, include the -end_logname or -end_logpos option.

repclientコマンドで有効なオプションは以下の通りです:

フラグ

説明

-addr hostname

データベースのホスト (デフォルト: 127.0.0.1)

-count n

dumpするメッセージの数

-dumpbinlog

binlogをdumpする

-end_logname path

Ending replication log name

-end_logpos offset

Ending replication log position (default: EOF)

-help

コマンドのオプションをリスト表示する

-help-debug

コマンドのオプションに加えてデバッギングの出力オプションをリスト表示する

-logname path

Starting replication log name

-logpos offset

Starting replication log position (default: 4)

-max-packet-size bytes

最大のパケットサイズ (デフォルト: 16777216)

-max-retries n

エラー後のリトライの最大値 (デフォルト: 3)

-no-decode-rows

行の値をデコードしない

-pass password

データベースのパスワード (デフォルト: #undef)

-perf

パフォーマンスの統計をdumpする

-perf-interval seconds

パフォーマンスの統計のdumpの間隔 (デフォルト: 30)

-port port

データベースのポート (デフォルト: 3306)

-retry-timeout seconds

リトライのタイムアウトの秒数 (デフォルト: 10)

-set-variable NAME=VALUE

変数を指定された値に設定する

-slave-id n

スレーブID (デフォルト: 1)

-testconnect

データベース接続をテストし、ステータスを表示する

-truncate

既存のファイルをtruncateする

-user username

データベースのユーザ名 (デフォルト: "root")

-verbose

デバッグメッセージを表示する

バイナリログからセッションを除外する

セッションのステートメントがどのバイナリログにも挿入されないようにするには、以下のコマンドを発行して sql_log_bin を false に設定します:

mysql> SET sql_log_bin=false;


この変数はセッションの開始時の同じ名前のグローバル変数の値が引き継がれます。Clustrixのインスタンスからリプリケートするには、sql_log_bin をtrueに設定します。

Icon

製品でsql_log_binを使うことには注意してください。不適切な使用は、マスターとスレーブの間のデータの不整合に繋がります。

バイナリログファイルを削除する


指定されたバイナリログファイルへの記録を停止するには、以下のコマンドを発行してシステムからそれを削除します:

mysql> DROP BINLOG binlog_name;
Icon

削除した後でバイナリログをリカバーすることはできません。

Understanding Binary Log Global Variables


以下のグローバル変数はバイナリログの挙動を制御するために使うことができます:

グローバル変数

説明

Default, Min, Max

binlog_rotate_threshold

デフォルトでは、Clustrixはバイナリログを1ギガバイトの断片に分割します。これはハードリミットではなく、rotateプロセスが起動して玄ジアのバイナリログが制限を越えたことを伝えるまでは実施されません。大きな容量を消費するため、あまりに大きな断片にすることは避けてください。また作成にコストが掛かるため、あまりに小さな断片にすることは避けてください。

 

binlog_row_delete_limit

Part of binary log garbage collection includes cleaning the transaction table, which involves deleting a row for every logged transaction. 削除そのものがトランザクションのため、Clustrixは一度に削除する行数を制限します。binlog_row_delete_limit はクリーンアップとトランザクションあたりに削除される行数の大まかな制限です。ガベージコレクションが実行中に問題に気づいたら、この値を調節することが役に立つかも知れません。.

 

mysql_binlog_indexer_interval_trxs

For every binary log, Clustrix builds a secondary index based on mysql file/offset coordinates so the master can quickly find positions for slave requests. This is a sparse index, controlled by the mysql_binlog_indexer_interval_trxs variable. CClustrix writes one index row for the given number of transactions. A denser index means faster lookups but more overhead and cleanup.

 

mysql_binlog_indexer_limit

mysql_binlog_indexer_limitはindexerプロセスがsleepに戻る前に実行することができるミリ秒数です。Generally, it should just run as long at it needs to, but we provide this setting to better coordinate with the task manager.

 

mysql_binlog_trx_scan_batchsiz

When Clustrix scans the binary log, it reads batches of transactions up at a time due to limits imposed by the existing database machinery. mysql_binlog_trx_scan_batchsize は一度に読み込むトランザクションの数を制限します。

 

Icon

これらの設定を使う時にはとても注意してください。デフォルトはあなたのシステムに利用的なものではないかも知れませんが、妥当なものに違いありません。The product will not warn you if you configure inadvisable settings.

  • ラベルなし
TOP
inserted by FC2 system