このページは機械翻訳したものです。
daemon_memcached
プラグインは MySQL binary log をサポートしているため、memcached インタフェースを介してソースサーバーをレプリケートし、バックアップ、集中型の読取りワークロードおよび高可用性のバランスを取ることができます。 バイナリロギングでは、すべての memcached コマンドがサポートされます。
レプリカサーバーに daemon_memcached
プラグインを設定する必要はありません。 この構成の主な利点は、ソースでの書込みスループットの向上です。 レプリケーションメカニズムの速度は影響を受けません。
次のセクションでは、MySQL レプリケーションで daemon_memcached
プラグインを使用するときにバイナリログ機能を使用する方法について説明します。 セクション15.20.3「InnoDB memcached プラグインの設定」 で説明されている設定が完了していることを前提としています。
-
MySQL binary log で
daemon_memcached
プラグインを使用するには、ソースサーバーでinnodb_api_enable_binlog
構成オプションを有効にします。 このオプションは、サーバーの起動時にのみ設定できます。--log-bin
オプションを使用して、ソースサーバーで MySQL バイナリログを有効にする必要もあります。 これらのオプションは、MySQL 構成ファイルまたは mysqld コマンドラインに追加できます。mysqld ... --log-bin -–innodb_api_enable_binlog=1
セクション17.1.2「バイナリログファイルの位置ベースのレプリケーションの設定」 の説明に従って、ソースサーバーとレプリカサーバーを構成します。
-
mysqldump を使用して、ソースデータスナップショットを作成し、スナップショットをレプリカサーバーに同期します。
source shell> mysqldump --all-databases --lock-all-tables > dbdump.db replica shell> mysql < dbdump.db
-
ソースサーバーで、
SHOW MASTER STATUS
を発行してソースバイナリログ座標を取得します。mysql> SHOW MASTER STATUS;
-
レプリカサーバーで、(MySQL 8.0.23 の)
CHANGE REPLICATION SOURCE TO
ステートメントまたは (MySQL 8.0.23 の前の)CHANGE MASTER TO
ステートメントを使用して、ソースバイナリログ座標を使用するレプリカサーバーを設定します。mysql> CHANGE MASTER TO MASTER_HOST='localhost', MASTER_USER='root', MASTER_PASSWORD='', MASTER_PORT = 13000, MASTER_LOG_FILE='0.000001, MASTER_LOG_POS=114; Or from MySQL 8.0.23: mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='localhost', SOURCE_USER='root', SOURCE_PASSWORD='', SOURCE_PORT = 13000, SOURCE_LOG_FILE='0.000001, SOURCE_LOG_POS=114;
-
レプリカを起動します。
mysql> START SLAVE; Or from MySQL 8.0.22: mysql> START REPLICA;
エラーログに次のような出力が出力された場合、レプリカはレプリケーションの準備ができています。
2013-09-24T13:04:38.639684Z 49 [Note] Replication I/O thread: connected to source 'root@localhost:13000', replication started in log '0.000001' at position 114
この例では、memcached および telnet を使用して InnoDB
memcached レプリケーション構成をテストし、データを挿入、更新および削除する方法を示します。 MySQL クライアントは、ソースサーバーとレプリカサーバーの結果を検証するために使用されます。
この例では、daemon_memcached
プラグインの初期設定時に innodb_memcached_config.sql
構成スクリプトによって作成された demo_test
テーブルを使用します。 demo_test
テーブルには、単一のサンプルレコードが含まれます。
-
set
コマンドを使用して、キーがtest1
、フラグ値が10
、有効期限値が0
、cas 値が 1 およびt1
のレコードを挿入します。telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. set test1 10 0 1 t1 STORED
-
ソースサーバーで、レコードが
demo_test
テーブルに挿入されたことを確認します。demo_test
テーブルが以前に変更されていないと仮定すると、2 つのレコードがあります。 キーがAA
で、キーがtest1
のレコードの例を示します。c1
カラムはキーに、c2
カラムは値に、c3
カラムはフラグ値に、c4
カラムは cas 値に、c5
カラムは有効期限にマップされます。 有効期限は未使用であるため、0 に設定されました。mysql> SELECT * FROM test.demo_test; +-------+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +-------+--------------+------+------+------+ | AA | HELLO, HELLO | 8 | 0 | 0 | | test1 | t1 | 10 | 1 | 0 | +-------+--------------+------+------+------+
-
同じレコードがレプリカサーバーにレプリケートされたことを確認する場合に選択します。
mysql> SELECT * FROM test.demo_test; +-------+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +-------+--------------+------+------+------+ | AA | HELLO, HELLO | 8 | 0 | 0 | | test1 | t1 | 10 | 1 | 0 | +-------+--------------+------+------+------+
-
set
コマンドを使用して、キーをnew
の値に更新します。telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. set test1 10 0 2 new STORED
更新はレプリカサーバーにレプリケートされます (
cas
値も更新されます)。mysql> SELECT * FROM test.demo_test; +-------+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +-------+--------------+------+------+------+ | AA | HELLO, HELLO | 8 | 0 | 0 | | test1 | new | 10 | 2 | 0 | +-------+--------------+------+------+------+
-
delete
コマンドを使用してtest1
レコードを削除します。telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. delete test1 DELETED
delete
操作がレプリカにレプリケートされると、レプリカ上のtest1
レコードも削除されます。mysql> SELECT * FROM test.demo_test; +----+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +----+--------------+------+------+------+ | AA | HELLO, HELLO | 8 | 0 | 0 | +----+--------------+------+------+------+
-
flush_all
コマンドを使用して、テーブルからすべての行を削除します。telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. flush_all OK
mysql> SELECT * FROM test.demo_test; Empty set (0.00 sec)
-
ソースサーバーに Telnet し、2 つの新しいレコードを入力します。
telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]' set test2 10 0 4 again STORED set test3 10 0 5 again1 STORED
-
2 つのレコードがレプリカサーバーにレプリケートされたことを確認します。
mysql> SELECT * FROM test.demo_test; +-------+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +-------+--------------+------+------+------+ | test2 | again | 10 | 4 | 0 | | test3 | again1 | 10 | 5 | 0 | +-------+--------------+------+------+------+
-
flush_all
コマンドを使用して、テーブルからすべての行を削除します。telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. flush_all OK
-
flush_all
操作がレプリカサーバーでレプリケートされたことを確認します。mysql> SELECT * FROM test.demo_test; Empty set (0.00 sec)
バイナリログ形式:
ほとんどの memcached 操作は (挿入、削除、更新に類似した) DML ステートメントにマップされます。 MySQL サーバーでは実際の SQL ステートメントが処理されないため、すべての memcached コマンド (
flush_all
を除く) で行ベースのレプリケーション (RBR) ロギングが使用され、これはサーバーのbinlog_format
設定とは無関係です。memcached
flush_all
コマンドは、MySQL 5.7 以前のTRUNCATE TABLE
コマンドにマップされます。 DDL コマンドはステートメントベースのロギングのみを使用できるため、flush_all
コマンドはTRUNCATE TABLE
ステートメントを送信することによってレプリケートされます。 MySQL 8.0 以降では、flush_all
はDELETE
にマップされますが、TRUNCATE TABLE
ステートメントを送信することでレプリケートされます。
トランザクション:
トランザクションの概念は、これまで通常は memcached アプリケーションの一部をなすものではありませんでした。 パフォーマンスを考慮するために、
daemon_memcached_r_batch_size
およびdaemon_memcached_w_batch_size
を使用して、読取りおよび書込みトランザクションのバッチサイズを制御します。 これらの設定はレプリケーションには影響しません。 基礎となるInnoDB
テーブルに対する各 SQL 操作は、正常に完了した後にレプリケートされます。daemon_memcached_w_batch_size
のデフォルト値は1
です。これは、各 memcached 書込み操作がただちにコミットされることを意味します。 このデフォルト設定では、ソースサーバーとレプリカサーバーに表示されるデータの不整合を回避するために、一定量のパフォーマンスオーバーヘッドが発生します。 レプリケートされたレコードは、常にレプリカサーバーですぐに使用できます。daemon_memcached_w_batch_size
を1
より大きい値に設定すると、memcached を介して挿入または更新されたレコードはすぐにソースサーバーに表示されません。コミット前にソースサーバー上のレコードを表示するには、SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
を発行します。