mysql常见故障和解决方法

今天不念跟大家讲一讲mysql常见故障和解决方法

1、这个表我建了唯一索引,ptosc添加字段为啥还是不行呢?

图片[1]-mysql常见故障和解决方法-不念博客

解析:有一个关键点是这一行报错:

you have at least one UNIQUE and NOT NULLABLE index。

需要非空唯一索引才行。

图片[2]-mysql常见故障和解决方法-不念博客

比如上面两张表,测试之后,前面执行跟你报错一样,后面可以正常执行。

当然,看版本是MySQL 8.0.25,已经支持快速加列了,可以直接加列,不需要用pt-osc。

2、redo log在prepare准备阶段是否开始刷盘?

解析:Redo Log 在Prepare阶段会刷盘,Binlog是在提交阶段才会刷盘(前提是开启双一的情况)。

3、二阶段提交带来的数据一致性的好处

解析

假设没有两阶段提交:

假设先Redo log落盘了,Binlog后落盘,比如Redo Log落盘之后,MySQL崩溃了,因为Redo log记录在磁盘中,可以把数据恢复回来,但是Binlog因为没完成落盘,那binlog就少一条记录,从库就会少一次变更;

假设先Binlog落盘,再Redo Log落盘,如果写完Binlog,MySQL崩溃了,因为Redo Log没全部完成记录,那这个事务就不会生效,但是Binlog中多出一条记录,那从库可能就会多了一次变更。

4、这个报错是什么原因?

图片[3]-mysql常见故障和解决方法-不念博客

解析

如下图,是pt-mysql-summary 代码里的内容,需要找MySQL的环境变量

图片[4]-mysql常见故障和解决方法-不念博客

5、读已提交,在select时,需要看其他事务的提交情况,比如有三个事务版本,A事务提交,B事务未提交,C事务也未提交,那在C事务查询数据时,只会读取A事务提交后的数据,所以会造成读取的数据不一致的情况,对吗?

解析

在读已提交隔离级别下,同一个事务前后两次相同的查询,可能结果会不一样。

也就出现了幻读(在一个事务里面,按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足查询条件的新数据)

如下图实验:

图片[5]-mysql常见故障和解决方法-不念博客

6、可重复读,在select时,不管其他事务是否更新,只看本次事务begin前的数据,所以不会造成数据不一致的问题,对吗?

解析

对的,即使其他事务所做的变更提交了,也看到的是之前的数据:

图片[6]-mysql常见故障和解决方法-不念博客

7、从复制遇到这个UUID的问题

图片[7]-mysql常见故障和解决方法-不念博客

解析

是不是从库所在的机器,是通过主库所在机器克隆的

因为uuid持久化到auto.cnf里了,克隆机器,这个文件自然也一样,删掉重启,基本可以修复。

测试环境的话,在从库

rm /data/mysql/data/auto.cnf
/etc/init.d/mysql.server restart
© 版权声明
THE END
喜欢就支持一下吧
点赞55赞赏 分享
评论 抢沙发
头像
欢迎光临不念博客,留下您的想法和建议,祝您有愉快的一天~
提交
头像

昵称

取消
昵称代码图片

    暂无评论内容