因为daemon_memcached
插件支持MySQL二进制日志,源服务器通过memcached接口可以复制备份,平衡密集读负载和高可用性。所有memcached二进制日志记录支持命令。
您不需要设置daemon_memcached
复制服务器上的插件。这种配置的主要优点是提高了源上的写吞吐量。不影响复制机制的速度。
方法时如何使用二进制日志功能daemon_memcached
MySQL复制插件。假设您已经完成了中描述的设置第15.20.3节“设置InnoDB memcached Plugin”.
使用
daemon_memcached
MySQL插件二进制日志,使innodb_api_enable_binlog
源服务器上的配置选项。此选项只能在服务器启动时设置。方法还必须在源服务器上启用MySQL二进制日志——log-bin
选择。可以将这些选项添加到MySQL配置文件中,或在mysqld命令行。mysqld……——log-bin innodb_api_enable_binlog = 1
配置源和副本服务器,请参见第17.1.2节“建立基于二进制日志文件位置的复制”.
使用, mysqldump创建源数据快照,并将快照同步到副本服务器。
Source shell> mysqldump——all-databases——lock-all-tables > dbdump.db复制shell> mysql < dbdump.db
在源服务器上,发出
显示主状态
获取源二进制日志坐标。mysql> SHOW MASTER STATUS;
在副本服务器上,使用
将复制源更改为
语句(从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;
启动复制。
mysql >开始的奴隶;或者从MySQL 8.0.22: MySQL > START REPLICA;
如果错误日志输出类似于下面的输出,则表示副本已经准备好进行复制。
2013-09-24t13:04:38. 639684z49[注]复制I/O线程:连接到源'root@localhost:13000',复制开始在日志'0.000001'的位置114
此示例演示如何测试InnoDB
memcached复制配置使用memcached通过Telnet方式插入、更新和删除数据。MySQL客户端用于验证源服务器和复制服务器上的结果。
该示例使用demo_test
表创建的innodb_memcached_config.sql
的初始设置期间的配置脚本daemon_memcached
插件。的demo_test
表包含一个示例记录。
使用
集
命令插入键为的记录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
在源服务器上,检查记录是否已插入
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 | +-------+--------------+------+------+------+
检查以验证相同的记录已复制到复制服务器。
SELECT * FROM test.demo_test;+-------+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +-------+--------------+------+------+------+ | AA |你好,你好| 8 | 0 | 0 | | test1 t1 | | 10 | 1 | 0 | +-------+--------------+------+------+------+
使用
集
命令将键更新为值新
.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 | | | +-------+--------------+------+------+------+
删除
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 | +----+--------------+------+------+------+
方法从表中删除所有行
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秒)
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
确认这两条记录已复制到复制服务器。
SELECT * FROM test.demo_test;+-------+--------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +-------+--------------+------+------+------+ | 再次test2 | | 10 | 4 | 0 | | test3 | again1 | 10 | 5 | 0 | +-------+--------------+------+------+------+
方法从表中删除所有行
flush_all
命令。telnet 127.0.0.1 11211 Trying 127.0.0.1…连接到127.0.0.1。转义字符是'^]'。flush_all好
检查以确保
flush_all
在复制服务器上复制操作。SELECT * FROM test.demo_test;空集(0.00秒)
二进制日志格式:
事务:
的概念交易并不是典型的一部分memcached应用程序。出于性能考虑,
daemon_memcached_r_batch_size
而且daemon_memcached_w_batch_size
用于控制读和写事务的批处理大小。这些设置不影响复制。基础上的每个SQL操作InnoDB
成功完成后复制表。的默认值。
daemon_memcached_w_batch_size
是1
,这意味着每个memcached立即提交写操作。这个默认设置会带来一定的性能开销,以避免源服务器和复制服务器上可见的数据不一致。复制的记录总是在复制服务器上立即可用。如果你设置daemon_memcached_w_batch_size
到一个大于1
,记录插入或更新通过memcached在源服务器上不立即可见;若要在提交前查看源服务器上的记录,请发出设置事务隔离级别读未提交
.