14.21.6 InnoDB 内存缓存插件和复制

由于daemon_memcached插件支持 MySQL binary log,因此可以复制通过 memcached 接口在源服务器上进行的更新以进行备份,平衡密集的读取工作负载和高可用性。二进制日志记录支持所有 memcached 命令。

您无需在副本服务器上设置daemon_memcached插件。此配置的主要优点是增加了源上的写入吞吐量。复制机制的速度不受影响。

以下各节说明将daemon_memcached插件与 MySQL 复制一起使用时如何使用二进制日志功能。假定您已完成第 14.21.3 节“设置 InnoDB memcached 插件”中描述的设置。

启用 InnoDB Memcached 二进制日志

mysqld ... --log-bin -–innodb_api_enable_binlog=1
source shell> mysqldump --all-databases --lock-all-tables > dbdump.db
replica shell> mysql < dbdump.db
mysql> SHOW MASTER STATUS;
mysql> CHANGE MASTER TO
  MASTER_HOST='localhost',
 MASTER_USER='root',
  MASTER_PASSWORD='',
  MASTER_PORT = 13000,
 MASTER_LOG_FILE='0.000001,
 MASTER_LOG_POS=114;
mysql> START SLAVE;

如果错误日志显示类似于以下内容的输出,则 table 明副本已准备好进行复制。

2013-09-24T13:04:38.639684Z 49 [Note] Slave I/O thread: connected to
master 'root@localhost:13000', replication started in log '0.000001'
at position 114

测试 InnoDB Memcached 复制配置

本示例演示了如何使用 memcached 和 telnet 来测试InnoDB memcached 复制配置,以插入,更新和删除数据。 MySQLClient 端用于验证源服务器和副本服务器上的结果。

该示例使用demo_testtable,该 table 是在daemon_memcached插件的初始设置期间由innodb_memcached_config.sql配置脚本创建的。 demo_testtable 包含单个示例记录。

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
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 |
+-------+--------------+------+------+------+
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 |
+-------+--------------+------+------+------+
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 |
+----+--------------+------+------+------+
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 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
mysql> SELECT * FROM test.demo_test;
+-------+--------------+------+------+------+
| c1    | c2           | c3   | c4   | c5   |
+-------+--------------+------+------+------+
| test2 | again        |   10 |    4 |    0 |
| test3 | again1       |   10 |    5 |    0 |
+-------+--------------+------+------+------+
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)

InnoDB memcached 二进制日志说明

二进制日志格式:

Transactions:

首页