10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 41.6 mb
PDF (A4)- 41.7 mb
手册页(TGZ)- 262.2 kb
手册页(邮政编码)- 372.3 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

15.20.7 InnoDB memcached插件和复制

因为daemon_memcached插件支持MySQL二进制日志,源服务器通过memcached接口可以复制备份,平衡密集读负载和高可用性。所有memcached二进制日志记录支持命令。

您不需要设置daemon_memcached复制服务器上的插件。这种配置的主要优点是提高了源上的写吞吐量。不影响复制机制的速度。

方法时如何使用二进制日志功能daemon_memcachedMySQL复制插件。假设您已经完成了中描述的设置第15.20.3节“设置InnoDB memcached Plugin”

开启InnoDB memcached二进制日志功能

  1. 使用daemon_memcachedMySQL插件二进制日志,使innodb_api_enable_binlog源服务器上的配置选项。此选项只能在服务器启动时设置。方法还必须在源服务器上启用MySQL二进制日志——log-bin选择。可以将这些选项添加到MySQL配置文件中,或在mysqld命令行。

    mysqld……——log-bin innodb_api_enable_binlog = 1
  2. 配置源和副本服务器,请参见第17.1.2节“建立基于二进制日志文件位置的复制”

  3. 使用, mysqldump创建源数据快照,并将快照同步到副本服务器。

    Source shell> mysqldump——all-databases——lock-all-tables > dbdump.db复制shell> mysql < dbdump.db
  4. 在源服务器上,发出显示主状态获取源二进制日志坐标。

    mysql> SHOW MASTER STATUS;
  5. 在副本服务器上,使用将复制源更改为语句(从MySQL 8.0.23)或改变主语句(在MySQL 8.0.23之前)使用源二进制日志坐标设置一个复制服务器。

    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 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;
  6. 启动复制。

    mysql >开始的奴隶;或者从MySQL 8.0.22: MySQL > START REPLICA;

    如果错误日志输出类似于下面的输出,则表示副本已经准备好进行复制。

    2013-09-24t13:04:38. 639684z49[注]复制I/O线程:连接到源'root@localhost:13000',复制开始在日志'0.000001'的位置114

测试InnoDB memcached复制配置

此示例演示如何测试InnoDBmemcached复制配置使用memcached通过Telnet方式插入、更新和删除数据。MySQL客户端用于验证源服务器和复制服务器上的结果。

该示例使用demo_test表创建的innodb_memcached_config.sql的初始设置期间的配置脚本daemon_memcached插件。的demo_test表包含一个示例记录。

  1. 使用命令插入键为的记录test1的标志值10的过期值0, cas值为1,值为t1

    telnet 127.0.0.1 11211 Trying 127.0.0.1…连接到127.0.0.1。转义字符是'^]'。set test1 10 0 1 t1 STORED
  2. 在源服务器上,检查记录是否已插入demo_test表格假设demo_test表之前没有修改过,应该有两条记录。键为的示例记录AA,以及您刚刚插入的记录,键为test1.的c1列映射到键c2的值c3列的标志值c4列设置为cas值,而c5列的过期时间。过期时间被设置为0,因为它没有使用。

    SELECT * FROM test.demo_test;+-------+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5  | +-------+--------------+------+------+------+ | AA |你好,你好| 8 | 0 | 0 | | test1 t1 | | 10 | 1 | 0  | +-------+--------------+------+------+------+
  3. 检查以验证相同的记录已复制到复制服务器。

    SELECT * FROM test.demo_test;+-------+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5  | +-------+--------------+------+------+------+ | AA |你好,你好| 8 | 0 | 0 | | test1 t1 | | 10 | 1 | 0  | +-------+--------------+------+------+------+
  4. 使用命令将键更新为值

    telnet 127.0.0.1 11211 Trying 127.0.0.1…连接到127.0.0.1。转义字符是'^]'。set test1 10 0 2 new STORED

    更新被复制到复制服务器(注意中科院Value也会更新)。

    SELECT * FROM test.demo_test;+-------+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5  | +-------+--------------+------+------+------+ | AA |你好,你好| 8 | 0 | 0 | | test1新10 | 2 | 0 | |  | +-------+--------------+------+------+------+
  5. 删除test1记录使用删除命令。

    telnet 127.0.0.1 11211 Trying 127.0.0.1…连接到127.0.0.1。转义字符是'^]'。删除test1删除

    删除操作被复制到副本test1副本上的记录也会被删除。

    SELECT * FROM test.demo_test;+----+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5  | +----+--------------+------+------+------+ | AA |你好,你好| 8 | 0 | 0  | +----+--------------+------+------+------+
  6. 方法从表中删除所有行flush_all命令。

    telnet 127.0.0.1 11211 Trying 127.0.0.1…连接到127.0.0.1。转义字符是'^]'。flush_all好
    SELECT * FROM test.demo_test;空集(0.00秒)
  7. Telnet到源服务器并输入两条新记录。

    telnet 127.0.0.1 11211 Trying 127.0.0.1…连接到127.0.0.1。转义字符是'^]' set test2 10 0 4 again STORED set test3 10 0 5 again1 STORED
  8. 确认这两条记录已复制到复制服务器。

    SELECT * FROM test.demo_test;+-------+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5  | +-------+--------------+------+------+------+ | 再次test2 | | 10 | 4 | 0 | | test3 | again1 | 10 | 5 | 0  | +-------+--------------+------+------+------+
  9. 方法从表中删除所有行flush_all命令。

    telnet 127.0.0.1 11211 Trying 127.0.0.1…连接到127.0.0.1。转义字符是'^]'。flush_all好
  10. 检查以确保flush_all在复制服务器上复制操作。

    SELECT * FROM test.demo_test;空集(0.00秒)

InnoDB memcached二进制日志记录

二进制日志格式:

  • 大多数memcached操作被映射到DML语句(类似于插入、删除、更新)。由于MySQL服务器没有实际的SQL语句正在被处理,所有memcached命令(除了flush_all)使用基于行复制(RBR)的日志记录,它独立于任何服务器binlog_format设置。

  • memcachedflush_all命令映射到截断表命令。自DDL命令只能使用基于语句的日志记录flush_all命令通过发送截断表声明。在MySQL 8.0及更高版本中,flush_all映射到删除但仍然通过发送截断表声明。

事务:

  • 的概念交易并不是典型的一部分memcached应用程序。出于性能考虑,daemon_memcached_r_batch_size而且daemon_memcached_w_batch_size用于控制读和写事务的批处理大小。这些设置不影响复制。基础上的每个SQL操作InnoDB成功完成后复制表。

  • 的默认值。daemon_memcached_w_batch_size1,这意味着每个memcached立即提交写操作。这个默认设置会带来一定的性能开销,以避免源服务器和复制服务器上可见的数据不一致。复制的记录总是在复制服务器上立即可用。如果你设置daemon_memcached_w_batch_size到一个大于1,记录插入或更新通过memcached在源服务器上不立即可见;若要在提交前查看源服务器上的记录,请发出设置事务隔离级别读未提交