加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL 异常及处理方法

发布时间:2023-09-21 10:26:11 所属栏目:MySql教程 来源:
导读:在使用 MysqL 的过程中,我们会碰到各种各样的问题,如数据库突然响应很慢、表碎片空间占比过大等。本小节我们一起来学习一些常见的 MysqL 异常,以及响应的处理方法。

1. 主从同步数据异常,如何跳过错误?
由于
在使用 MysqL 的过程中,我们会碰到各种各样的问题,如数据库突然响应很慢、表碎片空间占比过大等。本小节我们一起来学习一些常见的 MysqL 异常,以及响应的处理方法。

1. 主从同步数据异常,如何跳过错误?
由于种种原因,有时候从库可能会出现因主从数据导致的无法执行的 sql 语句,那么此时就要跳过该sql 语句了。

1.1 binlog+position 模式
-- 在从库上操作
) 跳过错误报错
MysqL> stop slave;
MysqL> set global sql_slave_skip_counter =;
MysqL> start slave;

) 查看同步状态
MysqL> show slave status\G

1.2 GTID 模式
方法一:直接跳过错误:
-- 在从库上操作
) 停止slave进程
MysqL> STOP SLAVE;

) 设置事务号,事务号从Executed_Gtid_Set获取,在session里设置gtid_next,即跳过这个GTID
如从show slave status拿到Executed_Gtid_Set为xxxx:-
MysqL> SET @@SESSION.GTID_NEXT= 'xxxx:5'

) 设置空事物
MysqL> BEGIN; COMMIT;

) 恢复事物号
MysqL> SET SESSION GTID_NEXT = AUTOMATIC;

) 启动slave进程
MysqL> START SLAVE;

2. 如何清理表碎片
当某张表删除完大量数据,或 MysqL 运行很长时间(一般指半年)后,难免会产生表碎片,这时就要对表进行碎片清理。

) 查询表碎片大小(一般碎片率超过%,可以考虑清理表碎片)
MysqL> select t.table_name, t.table_schema, t.ENGINE, t.TABLE_ROWS, ROUND(t.DATA_LENGTH//,) DATA_LENGTH_MB, ROUND(t.INDEX_LENGTH//,) INDEX_LENGTH_MB,
  ROUND((t.DATA_LENGTH+t.INDEX_LENGTH)//,) SUM_LENGTH_MB, ROUND(t.DATA_FREE//,) DATA_FREE_MB, CONCAT(ROUND((t.DATA_FREE / (t.DATA_LENGTH + t.INDEX_LENGTH + t.DATA_FREE)) * ,),'%') FRAGMENT_RATE 
  from information_schema.tables t
where =
and t.DATA_FREE != 
and (t.DATA_FREE / (t.DATA_LENGTH + t.INDEX_LENGTH + t.DATA_FREE)) >=  -- 碎片率超过30%
and t.TABLE_ROWS >= 
and ROUND(t.DATA_FREE//,) >= 
order by t.DATA_FREE / t.DATA_LENGTH desc

) 清理表碎片
-- MyISAM存储引擎
MysqL> OPTIMIZE TABLE tbl_name

-- Innodb存储引擎
MysqL> ALTER TABLE tbl_name ENGINE = Innodb;

3. cpu突然爆表,如何解决?
cpu 使用率突然暴增至 90% 以上,数据库响应非常缓慢,一般都是某个 sql 出现性能问题,耗光 cpu 资源。

) 定位问题sql
-- 找到执行时间很长,且占用会话比较多的sql
MysqL> show processlist\G
MysqL> select * from information_schema.processlist order by info desc\G

) 分析执行计划,判断sql是否存在优化空间
MysqL> explain select * from xxx where xxx=xxx\G

) 实施优化措施
这里就比较考验优化功力了,根据不同的问题sql,快速判断需要采取何种优化措施。最简单的例子,sql的where条件没有走索引,而且字段的选择性比较高,那这时就要考虑给字段创建相应的索引来解决。

 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章