2015年7月1日-------------------
1、MHA修復宕機的機器
首先cat /var/log/manager.log|grep -i "All other slaves should start"確定change master命令,把宕掉的數據庫給啟動,登陸進去後,slave status為空,使用change master命令設置應用的主節點,啟動slave進程
然後設置read_only=1,最後檢查復制環境,必須啟動mha manager的監控(ps aux|grep perl)並查看狀態,刪除app1.failover.complete,並把# mysql -e "set global relay_log_purge=0"
2、主從復制中,使用alter event把事件enable,不會影響從庫的事件狀態SLAVESIDE_DISABLED,進行切換後,現在的主庫事件狀態SLAVESIDE_DISABLED,需要手動進行enable,可以使用如下方式:
select concat('alter event ',EVENT_SCHEMA,'.',EVENT_NAME,' disable;') from information_schema.events;
2015年7月2日------------------
表結構:
CREATE TABLE `question_2` ( `qid` int(11) NOT NULL DEFAULT '0', `QuestionID` varchar(50) NOT NULL COMMENT '只做數據冗余,不做查詢條件,不添加索引', `UserID` int(11) DEFAULT NULL, `QuestionTitle` varchar(500) NOT NULL, `Age` int(11) NOT NULL, `Month` int(11) NOT NULL, `CatalogID` int(11) NOT NULL, `Sex` int(11) NOT NULL, `QuestionDesc` longtext NOT NULL, `QuestionTag` varchar(400) DEFAULT NULL, `Score` int(11) DEFAULT NULL, `Anonym` int(11) DEFAULT '0', `CommentCount` int(11) NOT NULL DEFAULT '0', `Source` int(11) DEFAULT NULL, `IsAutoAdd` int(11) DEFAULT '0', `QuestionStatus` int(11) DEFAULT NULL, `OperateStatus` int(11) DEFAULT '0', `OperateTime` datetime DEFAULT NULL, `CreateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '展示時間', `UpdateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`qid`), KEY `idx_2_uid_ctime_qstatus` (`UserID`,`CreateTime`,`QuestionStatus`,`OperateStatus`), KEY `idx_2_qstatus_opstatus_sc_so` (`QuestionStatus`,`OperateStatus`,`Age`,`Score`,`Source`), KEY `idx_2_ctime_qstatus_opstatus` (`CreateTime`,`QuestionStatus`,`OperateStatus`,`CatalogID`,`Age`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; select count(*) from question_2;-- 4086112 explain select * from `question_2` where `questionstatus` >= 0 and `operatestatus` =2 and `age` in ('1','2') order by qid desc limit 60000,20; explain select qid from `question_2` where `questionstatus` >= 0 and `operatestatus` =2 and `age` in ('1','2') order by qid desc limit 60000,20; select count(*) from `question_2` where `questionstatus` >= 0;-- 4064825/4086112 select count(*) from `question_2` where `questionstatus` >= 0 and `operatestatus` =2;-- 3649271/4086112 ---------------優化後的sql explain select * from question_2 inner join (select qid from `question_2` where `questionstatus` >= 0 and `operatestatus` =2 and `age` in ('1','2') order by qid desc limit 60000,20) a using (qid);