#
ドキュメント

Document

自分のための備忘録です。

バイナリログ

バイナリログとは

コミット情報が記載されています。

バイナリログには、テーブル作成操作やテーブルデータへの変更などのデータベース変更を記述する「イベント」が格納されます。 また、行ベースのロギングが使用される場合を除き、(一致する行のない DELETE などの) 潜在的に変更を行おうとしたステートメントについてのイベントも格納されます。 バイナリログには、データを更新した各ステートメントに要した時間に関する情報も格納されます。

ref. 5.4.4 バイナリログ

具体的にはおもに以下の内容を格納します。

  • INSERT, UPDATE などのデータ変更( DML:Data Manipulation Language )
  • CREATE TABLE, TRANCATE TABLE などのデータ定義変更 ( DDL:Data Definition Language )
  • CREATE USER, GRANT USER のアクセス制御( DCL:Data Control Language )

バイナリログは名前のとおりバイナリ形式なので人間が読む場合は mysqlbinlog コマンドなどでデコードする必要があります。

用途

  • レプリケーション
  • 増分バックアップ

有効化

log_bin にバイナリログのプレフィックスを指定すると有効になります。 MySQL 8.0 以降はデフォルトで有効でプレフィックスのデフォルトは binlog です。

以前の MySQL バージョンでは、バイナリロギングはデフォルトで無効になっており、--log-bin オプションを指定した場合は有効になっていました。 MySQL 8.0 からは、--log-bin オプションを指定するかどうかにかかわらず、バイナリロギングはデフォルトで有効になっています。 例外は、バイナリロギングがデフォルトで無効になっている場合に、mysqld を使用して --initialize または --initialize-insecure オプションを指定してデータディレクトリを手動で呼び出すことによって、データディレクトリを初期化する場合です。 この場合、--log-bin オプションを指定することでバイナリロギングを有効にできます。 バイナリロギングが有効になっている場合、サーバー上のバイナリロギングのステータスを示す log_bin システム変数は ON に設定されます。

ref. https://dev.mysql.com/doc/refman/8.0/ja/replication-options-binary-log.htm

場所

以下コマンドで確認できます。

  • ファイル: show binary logs;
  • ディレクトリ: select @@datadir; ( Debian は /var/lib/mysql )
mysql> show binary logs;
+---------------+-----------+-----------+
| Log_name      | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 |   2940689 | No        |
| binlog.000002 |       157 | No        |
+---------------+-----------+-----------+

mysql> select @@datadir;
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.01 sec)

バイナリログはデフォルトはデータディレクトリ( select @@datadir; の値)の直下に作成されます。

例)

データディレクトリパス( select @@datadir ) 最新のバイナリログ名( show binary logs ) 最新のバイナリログパス
/var/lib/mysql binlog.000001 /var/lib/mysql/binlog.000001
/var/lib/mysql binlog.000002 /var/lib/mysql/binlog.000002

バイナリログ保存形式

バイナリログは保存形式を bin_logformat で指定します。

binlog_format: ( STATEMENT | MIXED | ROW )

  • MySQL 5.6 は STATEMENT, MySQL 5.7 とそれ以降は ROW がデフォルトです
  • 将来的に binlog_format は廃止予定です

binlog_format ROW のオプション

  • binlog_row_image
  • binlog_row_value_options
  • binlog_row_quaery_log_events
  • binlog_row_metadata

Amazon Aurora MySQL 3 のバイナリログ

Amazon Aurora MySQL3におけるバイナリログの最適化