注册 登录
MySQL社区 返回首页

贺春阳的技术专栏 http://www.mysqlpub.com/?11327 [收藏] [复制] [RSS] 《MySQL管理之道:性能调优、高可用与监控》china-pub首发!

日志

MySQL故障切换之事件调度器(event)注意事项

已有 2746 次阅读2012-12-6 11:47 |系统分类:原创| master, mysql

在主从架构中,在master创建一个event,如下:

  1. mysql> show create event `insert`\G; 
  2. *************************** 1. row *************************** 
  3.                Event: insert 
  4.             sql_mode:  
  5.            time_zone: SYSTEM 
  6.         Create Event: CREATE DEFINER=`root`@`localhost` EVENT `insert` 
  7. ON SCHEDULE EVERY 1 MINUTE STARTS '2012-11-20 16:10:09' 
  8. ON COMPLETION PRESERVE ENABLE DO BEGIN 
  9. insert into t3(name) values('aa'); 
  10. END 
  11. character_set_client: utf8 
  12. collation_connection: utf8_general_ci 
  13.   Database Collation: utf8_general_ci 
  14. 1 row in set (0.02 sec) 
  15. ERROR:  
  16. No query specified 

slave同步过去,结果是这样的,注意红色字体:

  1. mysql> show create event `insert`\G; 
  2. *************************** 1. row *************************** 
  3.                Event: insert 
  4.             sql_mode:  
  5.            time_zone: SYSTEM 
  6.         Create Event: CREATE DEFINER=`root`@`localhost` EVENT `insert` 
  7. ON SCHEDULE EVERY 1 MINUTE STARTS '2012-11-20 16:10:09' 
  8. ON COMPLETION PRESERVE DISABLE ON SLAVE DO BEGIN 
  9. insert into t3(name) values('aa'); 
  10. END 
  11. character_set_client: utf8 
  12. collation_connection: utf8_general_ci 
  13.   Database Collation: utf8_general_ci 
  14. 1 row in set (0.02 sec) 
  15. ERROR:  
  16. No query specified 

再回过头来,看下事件状态,注意红色字体:

在master上

  1. mysql> show events; 
  2. +------+--------+----------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+ 
  3. | Db   | Name   | Definer        | Time zone | Type      | Execute at | Interval value | Interval field | Starts              | Ends | Status  | Originator | character_set_client | collation_connection | Database Collation | 
  4. +------+--------+----------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+ 
  5. | test | insert | root@localhost | SYSTEM    | RECURRING | NULL       | 1              | MINUTE         | 2012-11-20 16:10:09 | NULL | ENABLED |         25 | utf8                 | utf8_general_ci      | utf8_general_ci    |  
  6. +------+--------+----------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+ 
  7. 1 row in set (0.11 sec) 

在slave上

  1. mysql> show events; 
  2. +------+--------+----------------+-----------+-----------+------------+----------------+----------------+---------------------+------+--------------------+------------+----------------------+----------------------+--------------------+ 
  3. | Db   | Name   | Definer        | Time zone | Type      | Execute at | Interval value | Interval field | Starts              | Ends | Status             | Originator | character_set_client | collation_connection | Database Collation | 
  4. +------+--------+----------------+-----------+-----------+------------+----------------+----------------+---------------------+------+--------------------+------------+----------------------+----------------------+--------------------+ 
  5. | test | insert | root@localhost | SYSTEM    | RECURRING | NULL       | 1              | MINUTE         | 2012-11-20 16:10:09 | NULL | SLAVESIDE_DISABLED |         25 | utf8                 | utf8_general_ci      | utf8_general_ci    |  
  6. +------+--------+----------------+-----------+-----------+------------+----------------+----------------+---------------------+------+--------------------+------------+----------------------+----------------------+--------------------+ 
  7. 1 row in set (0.10 sec) 

也就是说,事件只能在master触发,slave上不会触发,否则如果slave上触发了,同步复制就会坏掉。

当主从故障切换之后,VIP漂移到了以前的slave上,此时slave成了新的master。

但这时,事件的状态还是维持SLAVESIDE_DISABLED,并不是也改成了ENABLED,这样就会造成切换以后,事件无法执行。

所以,需要人工重新开启事件状态。

  1. mysql> alter event `insert` enable;  
  2. Query OK, 0 rows affected (0.05 sec) 


参考手册:

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-4-20 06:54 , Processed in 0.044579 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部