MySQL 常见异常处理

1、数据库服务器负载大的问题

现象:零点左右cup占用率确不断在提高,QPS数值下降了很多
可能导致的这种现象的原因:
① 服务器磁盘IO超负荷(过多线程等待IO会影响CPU占用率)
② 存在大量阻塞线程(每个SQL占用一颗CPU资源,阻塞过多CPU占用率会升高)
③ 存在大量并发慢查询
④ 服务器中有大量其他的服务
⑤ 服务器硬件资源出现了瓶颈
MySQL 常见异常处理_第1张图片

2、服务器IO负载过大

查看服务器IO使用情况命令:

iostat -dmx 1

如下图所示,磁盘IO使用率达到了100%
MySQL 常见异常处理_第2张图片
造成IO负载过大的原因有:
① 数据库在产生大量的日志
② MySQL正在进行大批量的写操作
③ 慢查询产生了大量的磁盘临时表(参数Created_tmp_disk_tables记录数据库启动开始创建临时表的数量)
解决慢产生查询的方法:
① 优化慢查询,减少使用磁盘临时表
② 增加tmp_table_size和max_heap_table_size参数的大小

3、主从数据库不一致

现象:
① 主从数据库延迟为0
② IO_THREAD和SQL_THREAD状态为YES
③ 相同查询在主从服务器中查询的结果不同
造成上面这种现象有可能的原因是:
① 对从服务器进行了写操作
② 使用sql_slave_skip_counter或注入空事物的方式修复错误
③ 使用了statement格式的复制
解决办法:
① 设置read_only=ON #限制普通用户从库写操作
② 设置super_read_only=ON #限制root用户从库写操作
③ 使用row格式的复制
④ 使用pt_table_sync修复数据,命令如下:

pt-table-sync --execute --charset=utf8 --database=test --table=wangbin --sync-to-master h=192.168.56.103,u=dba,p=123456

4、从服务器连接不到主服务器

现象:
① Slave_IO_Running是Connecting状态,Slave_SQL_Running是Yes状态
② 数据库错误日志中显示账号无法连接到主库服务器
解决思路:
① 主从服务器间网络是否畅通
② 是否存在防火墙,过滤了数据库端口(命令:telnet 192.168.56.103 3306)
③ 复制链路配置的用户名和密码是否正确,是否有相应权限(命令:show grants for repuser@’%’\G)
④ 尝试使用复制账号在从服务器上面远程登录MySQL主库

5、主从复制主键发生冲突

现象:
① Slave_IO_Running是Yes状态,Slave_SQL_Running是No状态
② 错误日志显示出现了主键冲突
造成这种现象可能的原因是:
① 从库发生了宕机,重复重做中继日志。
② 认为操作了从库服务器
解决办法:
① 跳过故障数据
② 检查主从数据一致性(使用pt工具)
③ 或者直接删除从库主键冲突数据(推荐使用)
GTID从库跳过事物示例:从库执行

show slave status\G		

通过看到同步过来的GTID值是8,但是当前执行的GTID的值是7
在这里插入图片描述
跳过事物

show variables like 'gtid_next';
set gtid_next='1c8f7f48-4a7c-11ea-ab18-0800278ffd3d:8';
begin;commit;
set gtid_next='AUTOMATIC';
start slave;
show slave status\G		#从状态中可以看到IO线程和SQL线程都是Yes状态

6、主从复制中的relay log 文件损坏

现象:
① Slave_IO_Running是Yes状态,Slave_SQL_Running是No状态
② 错误日志显示:Error initializing relay log position
有可能造成这种现象的原因:从库MySQL服务器宕机
解决办法:
① 找到已经正确同步的日志点
② 使用reset slave 删除 relay_log
③ 在正确同步日志点后重新同步日志 (Relay_Master_Log_File 的值和Exec_Master_Log_Pos的值)

你可能感兴趣的:(MySQL)