
mysql
发哥1997
我很懒
展开
-
二十三、mysql中kill不掉的sql语句的原因
在mysql中有两个kill命令:一个是kill query +线程id,表示终止这个线程中正在执行的语句;一个是kill connection +线程id,这里connection 可缺省,表示断开这个线程的连接,当然如果线程有语句正在执行,也是要先停止正在执行的语句的。收到kill 命令后,线程做什么?当对一个表做增删改查操作时,会在表上加MDL读锁;如果线程被kill的时候,...原创 2020-02-05 10:28:21 · 3641 阅读 · 0 评论 -
二十二、mysql中误删数据的几种方式及恢复方法
1、使用delete 语句删除数据行;2、使用drop table 或者truncate table语句误删除数据库;3、使用drop database 语句误删除数据库;4、使用rm 命令误删除整个mysql实例。恢复方案:1、数据定期备份;2、记录操作日志 ,使用日志回滚;...原创 2020-02-04 08:39:58 · 1327 阅读 · 0 评论 -
二十、mysql中如何判断一个库是否正常
目录如何判断一个数据库是否出问题?select 1判断查表判断更新判断内部统计在一主一备的双M架构里,主备切换只需要把客户端流量切换到备库;而在一主多从架构里,主备切换除了要把客户端流量切到备库外,还需要把从库连接到新主库上。主备切换有两种场景,一种是主动切换,一种是被动切换。而其中被动切换,往往是因为主库出问题了,由HA系统发起的。如何判断一个数据库是...原创 2020-02-04 08:39:52 · 1319 阅读 · 0 评论 -
十九、mysql中读写分离的一些问题
目录读写分离的主要目标就是分摊主库的压力:客户端直连和带proxy的读写分离架构 特点:主题:读写分离,处理主备延迟导致的读写分离问题;读写分离的主要目标就是分摊主库的压力:1、可以由客户端来选择连接后端数据库;2、在MySQL和客户端之间有一个中间代理层proxy,客户端只连接proxy,由proxy根据请求类型和上下文决定请求的分发路由。客户端直连和带prox...原创 2020-02-04 08:39:37 · 317 阅读 · 0 评论 -
二十一、mysql中如何正确的切换主从暨主从同步如何跳过错误
目录1、基于位点的主备切换2、GTIDGTID实例:一主多重的切换正确性:1、基于位点的主备切换通常情况下,在切换任务的时候,要先主动跳过这些错误,有两种常用的方法:1、主动跳过一个事物,跳过的命令的写法是:set global sql_slave_skip_counter=1;start slave;因为切换过程中,可能会不止重复执行一个事物,所以需要在...原创 2020-02-04 08:39:58 · 771 阅读 · 0 评论 -
十八、mysql如何保证高可用
目录主备延迟问题主备延迟的来源:可靠性优先策略可用性优先策略正常情况下,只要主库执行更新生成的所有binlog,都可以传到备库并被正确地执行,备库就能达到跟主库一致的状态,这就是最终一致性。但是MySQL要提供高可用能力,只有最终一致性是不够的。主备延迟问题主备切换可能是一个主动运维动作:比如软件升级、主库所在机器按计划下线等,也可能是被动操作,比如主库所在机器掉...原创 2020-02-04 08:39:26 · 310 阅读 · 0 评论 -
十七、mysql如何保证主备一致
目录主备原理binlog的三种格式MySQL能够成为现下最流行的开源数据库,binlog功不可没;在最开始,MySQL是以容易学习和方便的高可用架构为优势,几乎所有的高可用架构,都直接依赖于binlog。虽然这些高可用架构已经呈现出越来越复杂的趋势,但都是从最基本的一主一备演化过来。mysqlbinlog -vv data/master.000001 --start-posit...原创 2020-02-04 08:39:10 · 279 阅读 · 0 评论 -
十六、mysql中如何保证数据的可靠性
目录MySQL写入binlog 和redo log 的流程binlog 的写入机制redo log 的写入机制如果MySQL出现了性能瓶颈,而且瓶颈在IO上,可以通过哪些方法来提升性能?只要redo log 和binlog 保证持久化到磁盘,就能确保MySQL异常重启后,数据可以恢复。MySQL写入binlog 和redo log 的流程binlog 的写入机制bi...原创 2020-02-04 08:39:10 · 1522 阅读 · 0 评论 -
十五、mysql一些性能问题及提高性能的方法
目录短链接风暴第一种解决方案:先处理掉那些占着连接但是不工作的线程第二种方法:减少链接过程的消耗慢查询性能问题索引没设计好的解决方案语句没写好的解决方案MySQL选错索引的解决方案QPS突增问题短链接风暴正常的短连接模式就是连接到数据库后,执行很少的SQL语句就断开,下次需要的时候再重连。如果使用的是短连接,在业务高峰期的时候,就可能出现连接数突然暴涨的...原创 2020-02-04 08:38:53 · 450 阅读 · 0 评论 -
十四、mysql改一条记录却锁住多行数据的原因
目录加锁规则的两个“原则”、两个“优化”和一个“bug”案例一:等值查询间隙锁案例二:非唯一索引等值锁案例三:主键索引范围锁案例四、非唯一索引范围锁案例五:唯一索引范围锁bug案例六、非唯一索引上 存在“等值”的例子案例七:limit语句加锁案例八:一个死锁的例子总结这里需要明确间隙锁和next-key lock的概念及加锁规则。加锁规则有以下两条前...原创 2020-02-04 08:38:37 · 1176 阅读 · 2 评论 -
十三、mysql执行查询慢的情况及原因
目录1、查询长时间不返回1.1. 等MDL锁1.2. 等flush锁1.3. 等行锁2. 查询慢如果mysql数据库本身就有很大的压力,导致数据库服务器CPU占用率很高或ioutil(IO利用率)很高,这种情况下所有语句的执行都有可能变慢。除了这种情况外还有一下情况及可能出现的原因:1、查询长时间不返回mysql> select * from t wher...原创 2020-02-04 08:38:28 · 397 阅读 · 0 评论 -
十二、mysql为什么SQL语句逻辑相同,性能却差异巨大?
目录如何避免sql语句相同,性能和差异却很大的语句?1、条件字段函数操作2、隐式类型转换3、隐式字符编码转换优化方式1:优化方式二:修改sql语句无法使用索引:可以使用索引:(CONVERT函数在输入处执行)如何避免sql语句相同,性能和差异却很大的语句?1、对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能;2、隐式类型转...原创 2020-02-03 08:42:35 · 584 阅读 · 0 评论 -
十一、mysql如何正确地显示随机消息?
1、使用内存临时表可以使用order by rand()来实现这个逻辑。mysql> select word from words order by rand() limit 3;对于InnoDB表来说,执行全字段排序会减少磁盘访问,因此会被优先选择。对于内存表,回表过程只是简单地根据数据行的位置,直接访问内存得到数据,根本不会导致多访问磁盘。优化器没有了这一层顾虑,那么它会优先...原创 2020-02-03 08:42:25 · 307 阅读 · 0 评论 -
十、mysql中order by 是怎么工作的?
目录全字段排序rowid排序全字段排序与rowid排序的区别是否所有的order by都需要排序操作?order by 有两种排序方式:全字段排序、rowid排序。全字段排序CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16)...原创 2020-02-03 08:42:24 · 310 阅读 · 0 评论 -
九、mysql问题锦集
目录1、在两阶段提交的不同瞬间,MySQL如果发生异常重启,是怎么保证数据完整性的?事务两阶段提交在两阶段提交的不同时刻,MySQL异常重启会出现什么现象2、MySQL怎么知道binlog是完整的?3、redo log和binlog是怎么关联起来的?4、处于prepare阶段的redo log 加上完整binlog,重启就能恢复,MySQL为什么要这么设计?5、m...原创 2020-02-03 08:42:17 · 262 阅读 · 0 评论 -
八、mysql中count(*)的使用
目录如何正确使用count()?count(*)的实现方式为什么InnoDB不跟MyISAM一样也把数字存起来?InnoDB对count(*)做的优化?show table status 命令如果需要经常显示交易系统的操作记录总数,该怎么办?用缓存系统保存计数在数据库保存计数不同的count用法如何正确使用count()?count() 是一个聚合函数,...原创 2020-02-03 08:41:39 · 919 阅读 · 0 评论 -
二十四、mysql中数据删除的几个问题
目录1. 为什么简单删除表数据达不到表空间回收的效果?2. 表的数据delete了,但是表空间却没有被回收?3. 一条数据的删除流程?4. 如何正确回收表空间?重建表一个InnoDB表包含两部分,即:表结构定义和数据。再MySQL8.0版本以前,表结构是存在以.frm为后缀的文件里。而MySQL8.0版本,则已经允许把表结构定义放在系统数据表中了。1. 为什么简单...原创 2020-02-05 10:28:29 · 541 阅读 · 0 评论 -
七、mysql中的锁
目录7.1. 锁的目的7.2. 锁的类型7.3. 全局锁7.4. 表级锁7.5. 如何安全地给小表加字段?7.6.mysql行锁7.7. 死锁和死锁检测7.1. 锁的目的数据库锁涉及的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。7.2. 锁的类型 ...原创 2020-02-03 08:40:53 · 301 阅读 · 0 评论 -
六、mysql中的索引
目录6.1. 索引的常见模型哈希表有序数组二叉搜索树6.2. InnoDB 的索引模型?6.3. 主键索引和非主键索引的存储区别?6.4. 基于主键索引和普通索引的查询有什么区别?6.5. 索引的维护?6.6. 如何重建索引?6.7. 如何重建主键索引?6.8. 覆盖索引?6.9. 联合索引?6.10. 最左前缀原则?6.11. 索引下推...原创 2020-02-03 08:41:18 · 334 阅读 · 0 评论 -
五、mysql中事务的隔离级别
目录5.1. 事务的隔离性5.2. 事务隔离的实现5.3. mysql事务的启动方式5.4. 如何查询长事务?5.5. 如何修改事务的隔离级别为读已提交?5.6.事物到底是隔离的还是不隔离的?在mysql里,有两个“视图”的概念:“快照”在MVCC里是怎么工作的?事物的可重复读的能力是怎么实现的?5.1. 事务的隔离性读未提交是指,一个事务还没提交时,...原创 2020-02-03 08:41:13 · 340 阅读 · 0 评论 -
四、mysql一条sql更新语句的执行过程
目录4.1. mysql一条语句更新过程4.2. 执行过程4.1. mysql一条语句更新过程update test1 t set t.id=t.id+1 where id=2;执行器找引擎拿到id=2的这一行——》执行器拿到数据+1,调用引擎接口写入这样数据——》引擎更新到内存、记录redo log、告知执行器已完成,可随时提交——》执行器生成binlog日志,写入磁盘——》...原创 2020-02-03 08:40:34 · 638 阅读 · 0 评论 -
三、mysql重要日志模块
目录3.1.redo logredo log实现分析Undo Log3.2.bin log出现两份日志的原因?两种日志的不同点binlog格式StatementRowMixed查看与配置binlog格式与binlog有关参数什么是binlog、redo logredo log 是 InnoDB 引擎特有的;binlog 是 MySQL ...原创 2020-02-03 08:40:23 · 347 阅读 · 0 评论 -
二、mysql组件详解
目录2.1. 连接器2.1.1. 长连接和短连接的区别2.1.2.mysql占用内存涨得快的原因之一2.1.3. mysql占用内存涨得快的解决方案2.2. 查询缓存2.2.1. mysql中查询缓存的缺点2.2.2.mysql中查询缓存的使用方案2.3.分析器2.3.1.词法分析2.3.2.语法分析2.3.优化器2.3.1.优化器...原创 2020-02-02 09:04:26 · 1087 阅读 · 0 评论 -
一、mysql的基本结构
目录server层:存储引擎层:mysql总体上可以分为server层和存储引擎层两部分:server层:连接器、查询缓存、分析器、优化器、执行器等; server层涵盖mysql的大多数核心服务功能,以及所有的内置函数(时间、日期、数学、加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等存储引擎层:负责数据的存储和提取;...原创 2020-02-02 09:04:18 · 429 阅读 · 0 评论