liufeng2023
日拱一卒
展开
-
274-MySQL(查看源码的工具sourceinsight)
MySQL(查看源码的工具sourceinsight)在mac或者Linux下,可以用vscode查看源码(jateblen,clang)解决source insight不识别.cc文件的问题重新添加一下源码文件夹:同步一下即可:在windows下查看源码sourceinsightMySQL源码是C语言来写的。核心的东西是放在sql文件夹里的。(有.c也有.cc,相当于是C和C++混合编程)建立sourceinsigt项目文件夹:我们打开souceinsight:原创 2022-05-23 16:51:04 · 730 阅读 · 0 评论 -
174-MySQL(GUI工具)
GUI工具SQLyog(小海豚,免费,轻便)Navicat(功能多,收费的。但是有破解版,运行起来,占用资源多)Windows SQLyog远程连接Linux我们要保证IP地址和端口是通的。我们查看linux下的IP地址我们打开Windows的cmd来ping一下地址:网络可通。在linux上查看防火墙然后点测试连接,看是否连接成功!询问就是敲SQL语句敲一两个字母,按TAB可以联想:里面还有架构设计器,可以设计表和表之间的关系:主键和有关联的主键用线连起原创 2022-05-08 21:47:52 · 1457 阅读 · 0 评论 -
161-MySQL(分库分表)
数据库架构演变刚开始多数项目用单机数据库就够了,随着服务器流量越来越大,面对的请求也越来越多,我们做了数据库读写分离, 使用多个从库副本(Slave)负责读,使用主库(Master)负责写,master和slave通过主从复制实现数据同步更新,保持数据一致。slave 从库可以水平扩展,所以更多的读请求不成问题。但是当用户量级上升,写请求越来越多,怎么保证数据库的负载足够?(主库的磁盘大小和磁盘I/O都受不了,把这个表分在多台数据库服务器里面进行写入)增加一个Master是不能解决问题的, 因为数据原创 2022-05-06 21:25:21 · 376 阅读 · 0 评论 -
149-MySQL(mycat读写分离实践)
mycat读写分离配置条件:主库master(centos7,net模式,固定不变的ip):192.168.131.129从库slave(win10,局域网的路由器,dhcp,ip会动态变化):192.168.31.27mycat(Java开发的),需要环境:1、JDK1.7版本以上(执行java -version检查jdk环境)2、MySQL的root账户有远程访问权限主从复制正常:要打开root的远程连接一般MySQL和代理中间件是不在一台机器上的。涉及数据库的远程访问和连接。原创 2022-05-04 20:20:26 · 1201 阅读 · 0 评论 -
148-MySQL(读写分离原理)
读写分离基于主从复制的读写分离,是我们在单机环境下,数据库的性能到瓶颈了,我们进行读写分离,提高后台服务,存储这一块的增删改查的并发的处理能力。有一个库专门写操作,从库专门读取操作,主库的数据更改通过主从复制同步到从库。读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。(读操作特别多,而且耗时特别大 )我们把图中的客户端看作:代码 ,作为mysql client的角色,通过mysql 提原创 2022-05-04 17:54:18 · 1973 阅读 · 1 评论 -
138-MySQL(主从复制实践)
主从复制配置命令条件:master和slave机器的信息master(centos7):192.168.131.129slave(win10):192.168.0.6保证master和slave之间的网络互通,并且保证3306端口是开放的。检查一下网络互通:网络是互通的!!!我们需要保证3306端口是开放的,主库中的binlog dump process会通过网络给从库发送内容,并且从库的IO线程会连接主库。也是在3306端口进行数据同步的。我们要确定主库上的3306端口是可以访问的原创 2022-05-03 20:31:30 · 370 阅读 · 0 评论 -
137-MySQL(主从复制原理)
MySQL集群在实际生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是不能满足实际需求的,一般要通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。1、数据备份 - 热备份&容灾&高可用2、读写分离,支持更大的并发(有了主从复制,才可以实现读写分离)读写分离: 我们读操作多,写操作少。主库专门写操作,数据的更新,通过binlog同步到从库,客户端的查询请求最终映射到从库上,从库读操作。1主2从。原创 2022-05-03 12:39:28 · 257 阅读 · 0 评论 -
127-MySQL(一次SQL的完整处理流程)
一次SQL的完整处理流程连接器:mysql client和 mysql server进行通信的时候,当我们要进行一个请求的时候,作为mysql client,首先和服务器进行通信,里面有一个查询缓存,属于连接器的部分,MySQL server是网络服务器,控制连接的,走的是TCP 加密的ssl通信协议;客户端在登录的时候,要进行合法性的检查(验证mysql账号密码之类的是否正确,后续如果有SQL过来,如果是select的话优先访问查询缓存(两次同样的查询之间有更新操作,会清空缓存);解析器:原创 2022-05-02 13:24:47 · 374 阅读 · 0 评论 -
126-MySQL(mysqldump数据备份)
mysqldump数据备份部署在后台服务器或者云端的MySQL大部分做了一些限制,在本地无法直连后台服务的数据库 3306端口上,一般有防火墙之类的网络中间件。没有条件用GUI图形化界面工具,鼠标进行数据备份,数据恢复。我们通过命令。命令也最快速。mysqldump -u root -p123456 --all-databases > ~/all.sqlmysqldump -u root -p123456 --databases school > ~/school.sqlmysq原创 2022-05-02 11:43:19 · 96 阅读 · 0 评论 -
120-MySQL(日志)
在之前,我们已经讲了MySQL事务日志:redo log 和 undo log(是InnoDB engine存储引擎生成的)当我们作为一个mysql client 来发起一个连接请求:经过了如下图示过程:MySQL Server:包括建立连接、连接的验证、SQL的语法分析、SQL优化等通过API访问相应的存储引擎,MyISAM和InnoDB;存储引擎再具体的操作磁盘这章我们要讲的MySQL日志是在MySQL server上的不管更改哪个存储引擎,今天所讲的这些日志都是有的。MySQL支持原创 2022-05-01 15:16:32 · 121 阅读 · 0 评论 -
119-MySQL(如何进行优化)
MySQL的优化问题MySQL需要优化的地方有哪些???面试官注重实践意义的回答分为3个方面:1、SQL和索引的优化(数据量比较大,执行SQL效率低,要优化)开启慢查询日志-》设置相应的项目表数据量的合理的慢查询时间–》找到记录慢查询SQL–》用explain分析SQL的执行计划–》给出相应的优化措施–》如果数据量太大的话,用分页。没有用索引。用多列索引没有用到第一列,导致索引没有用上。联合查询的大小表设置索引不合理 ,导致索引没有用上,小表示整表查询,大表才能够用到索引。多表查询原创 2022-05-01 11:53:41 · 400 阅读 · 0 评论 -
116-MySQL(redo log重做日志)
回顾undo log:原子性:事务要么成功,要么失败,不能不分成功,不分失败 。事务执行到一半失败后,需要回滚,回滚到数据修改前的状态;怎么做?回滚日志undolog记录了修改的详细的内容,修改前和修改后的都串在一个链表中,还有一个事务id,详细的记录了是哪个事务修改的持久性:当事务提交之后,不管MySQL server会出现什么不可预期的错误,哪怕是进程挂了,断电了,只要事务提交成功,由MySQL-server处理完异常后把数据恢复到正常状态。(redo log实现的)不管是事务提原创 2022-04-30 17:12:37 · 510 阅读 · 0 评论 -
112-MySQL(意向共享锁、意向排他锁、死锁)
InnoDB表级锁我们在之前知道,InnoDB是行锁,但是不是每次都获取行锁,如果没有索引项的话,还是一个表锁。而且有的时候,我们希望直接去使用表锁。在绝大部分情况下都应该使用行锁,因为事务和行锁往往是选择InnoDB存储引擎的理由,但个别情况下也使用表级锁;事务需要更新大部分或全部数据,表又比较大,如果使用默认的行锁,给大部分行都加锁,还不如直接给整张表加锁呢。不仅这个事务执行效率低,而且可能造成其他事务长时间等待和锁冲突;事务涉及多个表,比较复杂,如果都用行锁,很可能引起死锁,造成大量事务回滚原创 2022-04-30 11:59:13 · 202 阅读 · 0 评论 -
108-MySQL(MVCC和undo log)
1、MVCCInnoDB的事务隔离级别已提交读和可重复读的底层实现原理:MVCC(多版本并发控制)–》并发的读取方式:快照读InnoDB提供了2种读取操作: 锁定读和非锁定读锁定读就是读取的时候加锁了(S锁或者X锁)非锁定读就是读取的时候没有加锁,指的就是MVCC提供的快照读–》依赖底层的undo log回滚日志。事务日志: undo log回滚日志 和 redo log重做日志ACID,A:原子性,C:一致性,I:隔离性,D:持久性ACD:(依靠 事务日志 保证的)I:(依靠 锁+M原创 2022-04-29 12:04:18 · 401 阅读 · 0 评论 -
90-MySQL(间隙锁)
InnoDB串行化隔离级别(间隙锁)怎么解决幻读问题的???原创 2022-04-28 13:35:40 · 567 阅读 · 0 评论 -
81-MySQL(表锁,行锁,排他锁,共享锁)
1、事务隔离级别的实现原理锁+MVCC(多版本并发控制)事务-》事务的ACID特性-》事务的隔离性-》事务要能够允许并发执行-》数据的安全性,一致性和并发的效率问题-》事务的隔离级别串行化-》靠锁实现,通过锁给所有的事务都排个序,并发的效率就太低了,但是数据的安全性高。未提交读-》没有做任何的并发控制,明知是错误的,造成脏读(造成错误),数据的安全性最低。优点是并发效率非常高。(多线程的竞态条件)所以我们一般用的是下面这2个隔离级别:已提交读可重复读这2个隔离级别就结合了数据的安全性,原创 2022-04-26 13:30:52 · 828 阅读 · 3 评论 -
75-MySQL(事务)
MySQL事务MyISAM不支持事务(每一个SQL自动就提交了,不能做转账这种多条SQL组成的业务啊)!InnoDB支持事务,支持行锁 !(InnoDB最大的2个特点)事务的概念一个事务是由一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元;只有当事务中的所有操作都正常执行完了,整个事务才会被提交给数据库;如果有部分事务处理失败,那么事务就要回退到最初的状态,因此,事务要么全部执行成功,要么全部失败。有的业务需要1条以上的SQL语句共同完成,只有这些SQL都成功了才算业务成原创 2022-04-25 14:37:08 · 857 阅读 · 0 评论 -
74-MySQL(索引和慢查询日志:slow_query_log)
面试问题—SQL和索引的优化问题我们使用explain去分析SQL语句但是真正的企业级项目有上千条万条SQL我们不可能从头开始一条一条explain去分析。也不是所有的SQL都慢。explain分析行不通。正常的流程:从什么地方可以获取那些运行时间长,耗性能的SQL,然后再用explain去分析它???我们可以打开慢查询日志:根据具体的业务和并发量来预估1个时间,比如说100毫秒,20毫秒,设置好后开启业务,压测过程中,如果打开慢查询日志,就会看到超过执行时间的SQL,然后就用expl原创 2022-04-25 13:49:18 · 658 阅读 · 0 评论 -
64-MySQL(索引常见问题)
索引常见问题问题1默认是在InnoDB存储引擎。首先,最基本的,userid要加索引(因为一般用过滤条件加索引),此时创建的是二级索引树;select *还要涉及回表。 而且还有order by addtime,如果addtime没有建索引的话,explain分析时会出现using filesort(涉及addtime的文件排序)!所以,我们要加联合索引(多列索引):userid+addtime这样的话,选出来的addtime在二级索引树上就已经是有序的了有using filesort原创 2022-04-24 17:56:22 · 367 阅读 · 0 评论 -
54-MySQL(哈希索引,InnoDB自适应哈希索引)
哈希索引(memory支持)memory引擎: 基于内存的存储引擎,支持哈希索引。哈希表在可控的冲突范围,我们经常写的链式哈希表,它的增删改查的时间复杂度都是O(1)哈希索引,是基于哈希表这个数据结构实现的 (链式哈希表)平衡树的增删改查的时间复杂度是O(logn)B+树索引就是把磁盘上的存储的索引加载到内存上构建的数据结构,索引就是数据结构。看起来哈希表比B+树好,但是为什么MyISAM和InnoDB存储引擎用的是B+树索引?我们主要看1、搜索的效率:2、磁盘I/O的花费:我们改用创原创 2022-04-23 13:35:49 · 667 阅读 · 0 评论 -
53-MySQL(聚集索引和非聚集索引)
聚集索引和非聚集索引InnoDB主键索引InnoDB存储引擎的主键索引,叶子节点中,索引关键字和数据是在一起存放的,如图:辅助索引InnoDB的辅助索引,叶子节点上存放的是索引关键字和对应的主键,如图:辅助索引的B+树,先根据关键字找到对应的主键,再去主键索引树上找到对应的行记录数据。从索引树上可以看到,InnoDB的索引关键字和数据都是在一起存放的,体现在磁盘存储上,例如创建一个user表,在磁盘上只存储两种文件,user.frm(存储表的结构),user.ibd(存储索引和数据)。原创 2022-04-23 11:30:55 · 171 阅读 · 0 评论 -
54-MySQL(MyISAM主索引树,二级索引树)
MyISAM存储引擎数据和索引没有放在一块。叫做 非聚集索引原创 2022-04-23 11:15:31 · 294 阅读 · 0 评论 -
49-MySQL(InnoDB的主键和二级索引树)
InnoDB存储引擎数据和索引存储在一起。一张表有2个文件:student.frm,student.ibd(数据和索引文件)场景1(主键索引树)uid是主键,其他字段没有添加任何索引;如果是:select * from student;搜索的是整个索引树。主键索引树:如下图整表搜索:从叶子节点的链表上,从左到右遍历,从小到大访问。如果是:select * from student where uid<5;MySQL看到有过滤条件,uid有索引!!!如果是做等值查询,原创 2022-04-23 10:10:12 · 483 阅读 · 0 评论 -
40-MySQL(索引的底层实现原理,B树,B+树索引)
索引的底层实现原理数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘块(对应索引树的节点),索引树越低,越“矮胖”,磁盘IO次数就少MySQL支持两种索引,一种的B-树索引,一种是哈希索引。大家知道,B-树和哈希表在数据查询时的效率是非常高的。这里我们主要讨论一下MySQL InnoDB存储引擎,基于B-树(但实际上MySQL采用的是B+树结构)的索引结构。B-树是一种m阶平衡树,叶子节点都在同一层,由于每一个节点存储的数据量比较大,所以整个B-原创 2022-04-22 13:18:54 · 320 阅读 · 0 评论 -
31-MySQL(解析索引,索引的操作)
MySQL索引只要是关系型数据库,索引都是其查询最核心的关键。当表中的数据量到达几十万甚至上百万的时候,SQL查询所花费的时间会很长,导致业务超时出错,此时就需要用索引来加速SQL查询。由于索引也是需要存储成索引文件的,因此对索引的使用也会涉及磁盘I/O操作。如果索引创建过多,使用不当,会造成SQL查询时,进行大量无用的磁盘I/O操作,降低了SQL的查询效率, 适得其反,因此掌握良好的索引创建原则非常重要!索引也是数据结构,要对索引列,存储引擎会对这列的值进行排序,当我们索引太多的话,我们对表增加原创 2022-04-21 16:28:21 · 362 阅读 · 2 评论 -
30-MySQL(存储引擎)
MySQL存储引擎插件式的存储引擎,存储引擎可更换,支持不同类型的存储引擎我们创建的表有3个东西:表的结构,数据,表的索引怎么存储,存储方式是什么?这就是存储引擎直接影响上面内容的存储方式配置文件在配置文件修改:Windows下:Linux下:Linux下数据的存储:数据库存储:MyISAMMyISAM 不支持事务、也不支持外键,索引采用非聚集索引;优势: 访问的速度快,对事务完整性没有要求,以 SELECT、INSERT 为主的应用基本上都可以使用这个存储引擎来创原创 2022-04-21 10:42:21 · 65 阅读 · 0 评论 -
13-MySQL(连接查询)
连接查询表多了,我们有时候要在两个表甚至多个表之间进行查询,一次select涉及到多张表格。如果你是一张一张表select,一个一个取数据的话,是不好的。mysql client 发送一条SQL语句到mysql server,mysql server要做很多校验操作。你发2条不同的SQL,首先,在mysql server处理的流程就要走2遍,而且,1次通信就代表1次完整的TCP的3次握手,整个的处理流程返回结果,和TCP的4次挥手,效率就低了,所以有联合查询。连接查询分为: 内连接查询和外连接原创 2022-04-19 20:19:39 · 783 阅读 · 0 评论 -
11—MySQL(新浪笔试:银行代缴话费问题)
问题:银行代缴话费问题下表bank_bill是某银行代缴话费的主流水表结构:1、统计表中缴费的总笔数和总金额。2、给出一个sql,按网点和日期统计每个网点每天的营业额,并按照营业额进行倒序排序。解题思路创建表,插入数据create table bank_bill(serno bigint unsigned primary key not null auto_increment,date date not null,accno varchar(100) not null,name var原创 2022-04-19 15:40:00 · 117 阅读 · 0 评论 -
10-MySQL(排序、分组)
1、排序order by的使用select id,nickname,name,age,sex from user where sex='M' and age>=20 and age<=25 order by age asc; select id,nickname,name,age,sex from user where sex='M' and age>=20 and age<=25 order by age desc;asc: 升序;desc: 降序;不写的话,默认是升原创 2022-04-19 15:38:55 · 185 阅读 · 0 评论 -
9-MySQL(limit分页)
1、分页查询limit语法1、因为商品非常多,总是会分页显示,这样显示的话方便大家查看。2、我在翻页的时候,查询的性能是均衡的。1.1、limit语法对整张表的数据的查看,然后显示前3个。select * from user limit 3;select * from user limit 1,3;select * from user limit 3 offset 1;对整张表的数据的查看,然后偏移1个,然后显示前3个。两种写法是等价的;都是先执行select,然后再根据limi原创 2022-04-19 15:37:44 · 209 阅读 · 0 评论 -
8-MySQL(库操作、表操作、CRUD操作)
SQLSQL是结构化查询语言(Structure Query Language),它是关系型数据库的通用语言。SQL主要可以划分为以下 3 个类别:DDL(Data Definition Languages)语句数据定义语言,这些语句定义了不同的数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。DML(Data Manipulation Language)语句数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用的语句关原创 2022-04-19 15:36:10 · 107 阅读 · 0 评论 -
7-MySQL(表设计,范式)
1、关系型数据库表设计每个表代表一个实体,每一个实体代表一张表,表与表的关系对应实体与实体的关系。表与表的关系分为:一对一一对多多对多1.1、一对一的关系假设我们有2张表:1个用户对应1个身份信息,1个身份信息对应1个用户。但是这样设计表,并不能获取uid为1000的zhang同学的身份信息。因为目前没有关联。然后我们这么做,在身份信息表增加1列 uid,这样就有关联了。我们把依赖的称为子表,被依赖的称为父表。查wang同学的身份信息:子表添加的uid相当于外键,关联了原创 2022-04-19 15:32:37 · 1097 阅读 · 0 评论 -
6-MySQL(介绍,数据类型,运算符,函数,完整性约束)
1、MySQL的介绍1.1、关系型数据库微软的sqlserver【收费】甲骨文的oracle【收费】SQLite(是进程内的数据库,即不同进程写不同的SQLite,只能访问本进程的DB数据,不涉及开server这个操作)1.2、非关系型数据库键值对存储;NoSQL(不支持SQL的数据库,key-val存储的,键值对存储的,而关系型- 数据库是二维表存储的,有行有列);redis,leveldb,rocksdb,mongodb(都是存储key-value)大数据分析的列式数据库Hbas原创 2022-04-19 14:12:23 · 93 阅读 · 0 评论 -
0-学习环境搭建:Centos7系统安装与Win10和Centos7安装MySQL
1、Centos7系统安装参考链接文档,在虚拟机中安装好Centos7。链接:https://pan.baidu.com/s/17tXFC7x1wojrS1OgsFHYeg 提取码:6666 2、Win10安装MySQL3、CentOS 7安装MySQL-server1、下载rpm安装包[admin@localhost Downloads]$ wget http://repo.mysql.com/mysql57-communityrelease-el7.rpmhttp://repo.my原创 2022-04-18 10:35:53 · 496 阅读 · 0 评论