匿名通过本文主要向大家介绍了MySQL ,Replication,RECOVERING等相关知识,希望本文的分享对您有所帮助
接收到报警通知,db3这台组复制成员故障down机了,等修复好,启动服务器,然后再启动mysql实例,进去查看状态,变成了RECOVERING,如下所示;
mysql> SELECT * FROM performance_schema.replication_group_members; +---------------------------+--------------------------------------+----------------------+-------------+--------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | +---------------------------+--------------------------------------+----------------------+-------------+--------------+ | group_replication_applier | 3381d155-d7d1-11e6-94f7-b8ca3af6e36c | hch_test_dbm2_121_71 | 3317 | ONLINE | | group_replication_applier | 664b9ce9-d7de-11e6-9e8c-18a99b763071 | hch_test_web_1_24 | 3317 | ONLINE | | group_replication_applier | 84dba8ff-d7d2-11e6-aa9a-18a99b76310d | bpe_service | 3317 | RECOVERING | +---------------------------+--------------------------------------+----------------------+-------------+--------------+ 3 rows in set (0.00 sec) mysql>
这种状态有点类似mongodb的sendary的RECOVERING状态,对于刚刚出现的MySQL Group Replication新技术,遇到这种情况,这种情况怎么办?
在mongodb的这种模式下,一般是secondary从primary库上不停复制数据,所以我们遵循这种思路,去看下db2的数据目录,看到有很多relay-bin的recovery日志在应用执行,如下所示relay日志包记录
-rw-r----- 1 mysql mysql 383 1月 17 16:08 bpe_service-relay-bin-group_replication_applier.000019 -rw-r----- 1 mysql mysql 502 1月 17 16:11 bpe_service-relay-bin-group_replication_applier.000020 -rw-r----- 1 mysql mysql 502 1月 17 16:23 bpe_service-relay-bin-group_replication_applier.000021 -rw-r----- 1 mysql mysql 421 1月 17 16:23 bpe_service-relay-bin-group_replication_applier.000022 -rw-r----- 1 mysql mysql 228 1月 17 16:23 bpe_service-relay-bin-group_replication_applier.index -rw-r----- 1 mysql mysql 312 1月 17 16:24 bpe_service-relay-bin-group_replication_recovery.000007 -rw-r----- 1 mysql mysql 1.1G 1月 17 16:24 bpe_service-relay-bin-group_replication_recovery.000008 -rw-r----- 1 mysql mysql 391 1月 17 16:24 bpe_service-relay-bin-group_replication_recovery.000009 -rw-r----- 1 mysql mysql 312 1月 17 16:24 bpe_service-relay-bin-group_replication_recovery.000010 -rw-r----- 1 mysql mysql 1.1G 1月 17 16:24 bpe_service-relay-bin-group_replication_recovery.000011 -rw-r----- 1 mysql mysql 391 1月 17 16:24 bpe_service-relay-bin-group_replication_recovery.000012 -rw-r----- 1 mysql mysql 312 1月 17 16:24 bpe_service-relay-bin-group_replication_recovery.000013 -rw-r----- 1 mysql mysql 1.1G 1月 17 16:25 bpe_service-relay-bin-group_replication_recovery.000014 -rw-r----- 1 mysql mysql 391 1月 17 16:25 bpe_service-relay-bin-group_replication_recovery.000015 -rw-r----- 1 mysql mysql 312 1月 17 16:25 bpe_service-relay-bin-group_replication_recovery.000016 -rw-r----- 1 mysql mysql 1.1G 1月 17 16:25 bpe_service-relay-bin-group_replication_recovery.000017 -rw-r----- 1 mysql mysql 391 1月 17 16:25 bpe_service-relay-bin-group_replication_recovery.000018 -rw-r----- 1 mysql mysql 312 1月 17 16:25 bpe_service-relay-bin-group_replication_recovery.000019 -rw-r----- 1 mysql mysql 1.1G 1月 17 16:25 bpe_service-relay-bin-group_replication_recovery.000020 -rw-r----- 1 mysql mysql 391 1月 17 16:25 bpe_service-relay-bin-group_replication_recovery.000021 -rw-r----- 1 mysql mysql 312 1月 17 16:25 bpe_service-relay-bin-group_replication_recovery.000022 -rw-r----- 1 mysql mysql 1.1G 1月 17 16:25 bpe_service-relay-bin-group_replication_recovery.000023 -rw-r----- 1 mysql mysql 391 1月 17 16:25 bpe_service-relay-bin-group_replication_recovery.000024 -rw-r----- 1 mysql mysql 312 1月 17 16:25 bpe_service-relay-bin-group_replication_recovery.000025 -rw-r----- 1 mysql mysql 181M 1月 17 16:26 bpe_service-relay-bin-group_replication_recovery.000026 -rw-r----- 1 mysql mysql 1.2K 1月 17 16:25 bpe_service-relay-bin-group_replication_recovery.index drwxr-x--- 2 mysql mysql 4.0K 1月 17 14:11 business_db
然后在mysql窗口,可以看到几个线程,其中有一个就是Reading event from the relay log线程,就是表示正在应用relay日志:
mysql> show full processlist; +----+-------------+-----------+------+---------+------+--------------------------------------------------------+-----------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-------------+-----------+------+---------+------+--------------------------------------------------------+-----------------------+ | 28 | system user | | NULL | Connect | 701 | Suspending | NULL | | 31 | system user | | NULL | Connect | 701 | Slave has read all relay log; waiting for more updates | NULL | | 35 | system user | | NULL | Connect | 699 | Waiting for master to send event | NULL | | 36 | system user | | NULL | Connect | 4519 | Reading event from the relay log | NULL | | 38 | root | localhost | NULL | Query | 0 | starting | show full processlist | +----+-------------+-----------+------+---------+------+--------------------------------------------------------+-----------------------+ 5 rows in set (0.00 sec) mysql>
再过一会儿,数据同步完成之后,bpe_service就会从RECOVERING变成ONLINE状态。这个更加证实了,数据已经同步完成。
mysql> SELECT * FROM performance_schema.replication_group_members; +---------------------------+--------------------------------------+----------------------+-------------+--------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | +---------------------------+--------------------------------------+----------------------+-------------+--------------+ | group_replication_applier | 3381d155-d7d1-11e6-94f7-b8ca3af6e36c | hch_test_dbm2_121_71 | 3317 | ONLINE | | group_replication_applier | 664b9ce9-d7de-11e6-9e8c-18a99b763071 | hch_test_web_1_24 | 3317 | ONLINE | | group_replication_applier | 84dba8ff-d7d2-11e6-aa9a-18a99b76310d | bpe_service | 3317 | ONLINE | +---------------------------+--------------------------------------+----------------------+-------------+--------------+ 3 rows in set (0.00 sec) mysql>
去查看后台error log日志显示,刚开始启动,在做CHANGE MASTER TO FOR CHANNEL ‘group_replication_applier’ executed’的时候,没有取到值,然后看后面同步完后,就会执行加入组复制成员的命令
“CHANGE MASTER TO FOR CHANNEL 'group_replication_recovery' executed'. Previous state master_host='hch_test_web_1_24', master_port= 3317, master_log_file='', master_log_pos= 4, master_bind=''. New state master_host='<NULL>', master_port= 0, master_log_file='', master_log_pos= 4, master_bind=''”,
在执行结束后,最后告诉我们“’This server was declared online within the replication group’”已经加入到了组成员,而且变成了实时的ONLINE状态:
2017-01-17T08:23:15.710146Z 4 [Note] Plugin group_replication reported: 'auto_increment_increment is reset to 1' 2017-01-17T08:23:15.710200Z 4 [Note] Plugin group_replication reported: 'auto_increment_offset is reset to 1' 2017-01-17T08:23:15.710401Z 20 [Note] Error reading relay log event for channel 'group_replication_applier': slave SQL thread was killed 2017-01-17T08:23:15.711212Z 17 [Note] Plugin group_replication reported: 'The group replication applier thread was killed' 2017-01-17T08:23:42.141239Z 4 [Note] Plugin group_replication re