修改表结构:http://zhaoyun.blog.51cto.com/2090116/727252
通过检查slave状态:
show slave status\G;分析binlog:
/usr/local/mysql/bin/mysqlbinlog -usystem -p'BK_root2010!' -vv -S /data/mysqldata/3306/mysql.sock --start-position='9450369'
/data/mysqldata/3306/binlog/mysql-bin.000556 >/home/mysql/mysql-restore.sql
查看delete语句
DELETE FROM baike.bk_sham_attention where baike_id=507 limit 10000;(删除一万条数据)
发现slave会一条一条数据删除,放在一个特别大的事务里面(基于row的)
根源:这是一个RBR的bug
原因:这表上你看看是不是没有主键或者唯一索引
查看问题表:
CREATE TABLE `bk_sham_attention` (
`baike_id` int(11) NOT NULL,
`uid` bigint(12) NOT NULL,
`addtime` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
确实没有索引和自增项。
修改表,加一个自增项
use baike;
set names gbk;
alter table bk_sham_attention add id bigint(12) not null auto_increment primary key not null first ;
修改表结构,50w的数据4秒钟。
本文介绍了一种在MySQL中遇到的删除操作效率低下问题及其解决方案。通过对slave状态的检查及binlog的分析,发现了问题所在,并通过为问题表添加自增主键的方式成功解决了这一问题。
635

被折叠的 条评论
为什么被折叠?



