mysqldump を使って InnoDB のバックアップを取ろうとしたら


"mysqldump: Error: Binlogging on server not active"

というエラーが発生。

バイナリログを有効にすれば解決らしい。

で、調べてみたら /etc/mysql/my.cnf に log_bin とか log-bin を追加すれば良いとのこと(環境は Debian Linux squeeze + MySQL 5.1)。しかし、アンダーラインな log_bin と、ハイフンな log-bin のどっちを指定するのが正しいのかわからない。。。

とりあえず、アンダーライン版で


log_bin                 = /var/log/mysql/mysql-bin.log

と指定したら動いた。

どうやら、
ハイフン log-bin は MySQL Server 起動時のコマンドオプションで、
アンダーライン log_bin は 設定ファイルでのキー名。

でも、公式ドキュメントを読んでいるとこれが本当に正しいのかよくわからなくなってくる。。。

バイナリ ログを有効化したサーバを実行すると、パフォーマンスが 1% ほど遅れます。しかし、リストア作業が必要になった場合のバイナリ ログの有用性、レプリケーション セットアップでの利便性を考慮すると、1% の遅れは許容できるものとします。

--log-bin[=base_name] オプションで起動すると、mysqldで、データ更新に関わる SQL ステートメントのすべてをログ ファイルに書き込みます。base_name の値を指定しない場合、デフォルト名は、-bin を元にするホスト マシンの名前になります。ベース名を指定するときに、絶対パスを使用しない場合は、サーバでデータ ディレクトリにファイルを作成します。できるだけ、ベース名は指定することをお勧めします。その理由に関しては 項B.1.8.1. 「Open Issues in MySQL」 を参照してください。

--log-bin=base_name.extension など、ログ名に拡張子を付ける場合は、その拡張子はサイレントで削除、無視の対象になります。

mysqld ではバイナリ ログのベース名で数値の拡張子を付加します。この数値はサーバで新規ログ ファイルを作成する度に増加し、ファイルの番号が連続する形になります。サーバは起動、そしてログ フラッシュ毎に、新規のバイナリ ログ ファイルを作成します。さらにサーバは現行のログ サイズが max_binlog_size に到達すると、自動的に新規のバイナリ ログ ファイルを作成します。大きなトランザクションがあると、バイナリ ログ ファイルの max_binlog_size を超えることになるため、1 つのトランザクションで最大値を使い切らないようにする必要があります。

使用しているバイナリ ログ ファイルの追跡を行うために、mysqld で、使用があったバイナリ ログ ファイルのすべての名前を含めた、バイナリ ログ インデックスを作成します。デフォルトではバイナリ ログ ファイルと同じベース名で、'.index' という拡張子がつきます。バイナリ ログ インデックス ファイルの名前は、--log-bin-index[=file_name] オプションを使用して変更できます。mysqld が作業中の場合は、このファイルを手動で変更することはしないでください。mysqld が混乱する原因になります。

バイナリ ログ ファイルとインデックス ファイルへの書き込みは、MyISAM テーブルへの書き込みと同じ方法で処理します。項B.1.4.3. 「How MySQL Handles a Full Disk」 を参照してください。

MySQL :: MySQL 5.1 リファレンスマニュアル :: 4.11.4 バイナリ ログ

--log-bin[=base_name]

Command-Line Format --log-bin
Option-File Format log-bin
Variable Name log_bin
Variable Scope Global
Dynamic Variable No
  Permitted Values
Type file name
Default OFF

Enable binary logging. The server logs all statements that change data to the binary log, which is used for backup and replication. See Section 5.2.4, “The Binary Log”.

The option value, if given, is the basename for the log sequence. The server creates binary log files in sequence by adding a numeric suffix to the basename. It is recommended that you specify a basename (see Section C.5.8, “Known Issues in MySQL”, for the reason). Otherwise, MySQL uses host_name-bin as the basename.

Setting this option causes the log_bin system variable to be set to ON (or 1), and not to the basename. This is a known issue; see Bug #19614 for more information.


MySQL :: MySQL 5.1 Reference Manual :: 16.1.3.4 Binary Log Options and Variables

まぁ、 mysqldump で InnoDB のバックアップできるようになったからいいか。

Ref. [ヅ] MySQLのMyISAMとInnoDBのオンラインバックアップ方法

tags: mysql

Posted by NI-Lab. (@nilab)