表现:从mysql5.1中导出全库导入到mysql5.5中,报ERROR 1548 (HY000): Cannot load from mysql.proc. The table is probably corrupted
解决方法:mysql5.5和mysql5.1的mysql.proc表时有区别的,修改表结构:
ALTER TABLE `proc`MODIFY COLUMN `comment` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL AFTER `sql_mode`;
问题二:2.事务提交时间过长
表现:在批量查询较多,定时任务跑脚本插入数据,sql关联比较复杂的前提下,commit数据耗时长
架构:一台服务器装8个实例,基本都是查询统计使用,每个实例平均有四到五个业务的查询系统使用,服务器共有2个磁盘阵列组。一个为sas盘,一个为ssd盘。其中6个实例在sas盘阵列组,2个实例在ssd盘阵列组。
问题分析:分析commit的一个过程,mysql的二进制日志和事务commit之间有一个关系, 需要在二进制日志刷新成功后,才能commit . 而现在数据和二进制日志均在sas阵列,怀疑sas阵列出现了io瓶颈,通过数据库监控平台验证,sas盘上在那段时间的io使用率达到100%。由于多业务使用同一实例,多个查询统计系统使用的同一台服务器的资源,在并发量大的时候,sas盘遭遇IO瓶颈。而发现ssd盘阵列的io却使用非常的少。
解决方法:将该实例上所有的库迁移至ssd盘阵列,减少sas盘阵列的io压力。
问题三:3.如何删除几千万的数据
表现:tableA表冗余数据过多,需要清理,数据量达到千万级别。time列没有建索引,如何删除这么多数据。
解决方法:考虑给时间列加个索引,分批删除:
delete from tabA where time<'2009-10-01' order by time limit 10000;
问题四:4.查询被迫中断error 1317
表现:在数据库中执行查询,查询被迫中断。ERROR 1317 ( ): Query execution was interrupted
解决方法:Mysql查询语句,当被认为其搜索范围大于1/3(?),将会无视索引而对所有数据进行搜索,在执行这个SQL语句的时候,系统认为消耗资源太大,所以被强制停止了,等会再执行
问题五:5.DB_ONLINE_LOG_TOO_BIG错误
表现:在业务比较繁忙时做online ddl时,发生了DB_ONLINE_LOG_TOO_BIG错误
解决方法:增大innodb_online_alter_log_max_size的值