不死鸟.亚历山大.狼崽子
太极计算机股份有限公司系统架构师,从事ios、.net、flex、java等开发
展开
-
MySQL:某个ip连接mysql失败次数过多,导致ip锁定
某个ip连接mysql失败次数过多,然后mysql这边自带的保护机制就将ip进行了封禁。这个时候有两个解决方法(1)修改配置文件,重启服务(2)使用命令手动解锁。原创 2024-06-26 14:31:42 · 844 阅读 · 1 评论 -
MySQL:MySQL执行一条SQL查询语句的执行过程
如果一个查询请求被执行过,MySQL会把执行结果存入查询缓存,如果后面又查询了同样的语句,则会直接返回结果。MySQL的基本架构整体也大致如此,不过要比这个要复杂很多,SQL执行、数据存储引擎层面,还有诸多优秀的细节,比如binlog机制、InnoDB存储引擎的锁、事务机制等,共同成就了卓越的MySQL。查询执行引擎根据优化后的执行计划,调用存储引擎的API 执行实际的数据读取或修改操作,包括主键索引查询,索引下推等。如果查询涉及多个表,MySQL会使用相应的算法(如嵌套循环、哈希连接)进行表的连接操作。原创 2024-05-30 15:59:39 · 136 阅读 · 0 评论 -
MySQL全文索引实现简单版搜索引擎
只有Innodb和myisam存储引擎能用全文索引(innodb支持全文索引是从mysql5.6开始的)char、varchar、text类型字段能创建全文索引(fulltext index type)全文索引的基于关键词的,如何区分不同的关键词了,就要用到分词(stopword)英文单词用空格,逗号进行分词;中文分词不方便(一个句子不知道怎样区分不同的关键词)内置分词解析器ngram支持中文,日文,韩文(将句子分成固定数字的短语)原创 2024-05-27 22:34:10 · 281 阅读 · 0 评论 -
Mysql锁(2):表级锁
表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中。表锁元数据锁(meta data lock,MDL)意向锁。原创 2024-05-20 23:02:37 · 37 阅读 · 0 评论 -
Mysql锁(1):锁概述和全局锁的介绍
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。全局锁:锁定数据库中的所有表。表级锁:每次操作锁住整张表。行级锁:每次操作锁住对应的行数据。原创 2024-05-20 14:53:39 · 31 阅读 · 0 评论 -
Mysql存储引擎(2):存储引擎特点
InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB是默认的MySQL 存储引擎。原创 2024-05-20 10:59:58 · 35 阅读 · 0 评论 -
Mysql存储引擎(1):存储引擎体系结构和介绍
大家可能没有听说过存储引擎,但是一定听过引擎这个词,引擎就是发动机,是一个机器的核心组件。比如,对于舰载机、直升机、火箭来说,他们都有各自的引擎,是他们最为核心的组件。而我们在选择 引擎的时候,需要在合适的场景,选择合适的存储引擎,就像在直升机上,我们不能选择舰载机的引擎 一样。而对于存储引擎,也是一样,他是mysql数据库的核心,我们也需要在合适的场景选择合适的存储引 擎。接下来就来介绍一下存储引擎。存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。原创 2024-05-20 10:07:30 · 118 阅读 · 0 评论 -
MySQL:什么样的字段适合加索引?什么样的字段不适合加索引
(8)经常用于排序(order by )和分组(group by)的字段:如果某个字段经常用于排序(order by )和分组(group by)操作,例如文章的发布时间或销售订单的日期,为该字段添加索引可以加快排序和分组操作的速度。(1)低选择性的列:低选择性的列指的是具有很少不同值的列。(7)经常用于查询条件的字段(select、update、delete语句中的where条件):如果某个字段经常被用于where查询条件,例如用户的用户名、邮箱或订单的编号,那么为该字段添加索引可以提高查询性能。原创 2024-05-15 10:11:06 · 228 阅读 · 1 评论 -
Mysql报错:too many connections
(2)max_connections值过小:默认情况下,MySQL的最大连接数是100个,如果这个值过低,则会导致在达到这个限制后,任何新的连接请求都无法得到响应,从而提示“too many connections”的错误。wait_timeout 过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放,拖累系统性能,不过也不能把这个指设置的过小,否则你可能会遭遇到“MySQL has gone away”之类的问题。以上步骤修改后虽然能登录,但仍有隐患,我们应该把那些sleep的连接杀掉。原创 2024-02-06 23:59:26 · 849 阅读 · 0 评论 -
MySQL:索引失效场景总结
where语句中使用了IS NOT NULL,索引失效。有类型转换时索引失效,例如:字符串不加单引号,索引失效。where语句中使用 like 查询时,索引失效。where语句中使用 OR 查询时,索引失效。where语句中使用了计算表达式,索引失效。where语句中使用!where语句中使用了函数,索引失效。原创 2024-01-10 10:09:14 · 522 阅读 · 0 评论 -
mysql:SQL按时间查询方法总结
【代码】MYSQL:SQL按时间查询方法总结。原创 2024-01-04 15:38:23 · 956 阅读 · 0 评论 -
sql语句:sum函数为空时返回0
使用COALESCE(sum(字段名),0)可以使返回值为0(也可以指定其他返回值),利于数据处理。当sum(字段名)为空时,函数返回的是null,不利于处理。原创 2024-01-03 18:21:44 · 678 阅读 · 0 评论 -
Mysql:SQL性能分析
通过上述指令,我们可以查看到当前数据库到底是以查询为主,还是以增删改为主,从而为数据库优化提供参考依据。如果是以增删改为主,我们可以考虑不对其进行索引的优化。如果是以查询为主,那么就要考虑对数据库的索引进行优化了。那么通过查询SQL的执行频次,我们就能够知道当前数据库到底是增删改为主,还是查询为主。那假如说是以查询为主,我们又该如何定位针对于那些查询语句进行优化呢?我们可以在当前数据库再执行几次查询操作,然后再次查看执行频次,看看 Com_select 参数会不会变化。Com_select: 查询次数。原创 2023-06-02 22:31:39 · 1104 阅读 · 0 评论 -
Mysql索引(4):索引语法
(2)phone手机号字段的值,是非空,且唯一的,为该字段创建唯一索引。(1)name字段为姓名字段,该字段的值可能会重复,为该字段创建索引。(3)为profession、age、status创建联合索引。完成上述的需求之后,我们再查看tb_user表的所有的索引数据。先来创建一张表 tb_user,并且查询测试数据。(4)为email建立合适的索引来提升查询效率。原创 2023-05-07 15:00:48 · 103 阅读 · 0 评论 -
Mysql索引(3):索引分类
而B语句需要先查询name字段的二级索引,然后再查询聚集索引,也就是需要进行回表查询。回表查询: 这种先到二级索引中查找数据,找到主键值,然后再到聚集索引中根据主键值,获取数据的方式,就称之为回表查询。在MySQL数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。接下来,我们来分析一下,当我们执行如下的SQL语句时,具体的查找过程是什么样子的。将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键。全文索引查找的是文本中的关键词,而不是比较索引中的值。原创 2023-05-07 01:54:51 · 685 阅读 · 0 评论 -
Mysql索引(2):索引结构
索引结构描述B+Tree索最常见的索引类型,大部分引擎都支持 B+ 树索引Hash索引底层数据结构是用哈希表实现的, 只有精确匹配索引列的查询才有效, 不支持范围查询R-tree(空间索引)空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,通常使用较少Full-text(全文索引)是一种通过建立倒排索引,快速匹配文档的方式。类似于Lucene,Solr,ES上述是MySQL中所支持的所有的索引结构,接下来,我们再来看看不同的存储引擎对于索引结构的支持情况。索引。原创 2023-05-06 13:21:49 · 777 阅读 · 0 评论 -
Mysql索引(1):索引概述
索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。一提到数据结构,大家都会有所担心,担心自己不能理解,跟不上节奏。不过在这里大家完全不用担心,我们后面在讲解时,会详细介绍。原创 2023-05-06 12:17:06 · 890 阅读 · 0 评论 -
SQL优化(7):update优化
注意:InnoDB的行锁是针对索引加的锁,不是针对记录加的锁 ,并且该索引不能失效,否则会从行锁升级为表锁。当我们开启多个事务,在执行上述的SQL时,我们发现行锁升级为了表锁。导致该update语句的性能大大降低。当我们在执行删除的SQL语句时,会锁定id为1这一行的数据,然后事务提交之后,行锁释放。我们主要需要注意一下update语句执行时的注意事项。但是当我们在执行如下SQL时。原创 2023-04-25 22:52:09 · 57 阅读 · 0 评论 -
SQL优化(6):count优化
在之前的测试中,我们发现,如果数据量很大,在执行count操作时,是非常耗时的。MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高;但是如果是带条件的count,MyISAM也慢。InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数。原创 2023-04-25 22:09:58 · 801 阅读 · 0 评论 -
SQL优化(5):limit优化
因为,当在进行分页查询时,如果执行 limit 2000000,10 ,此时需要MySQL排序前2000010 记录,仅仅返回 2000000 - 2000010 的记录,其他记录丢弃,查询排序的代价非常大。优化思路: 一般分页查询时,通过创建 覆盖索引 能够比较好地提高性能,可以通过覆盖索引加子查询形式进行优化。在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低。通过测试我们会看到,越往后,分页查询效率越低,这就是分页查询的问题所在。查询前10条数据分页,耗时0.03秒。原创 2023-04-25 22:04:48 · 217 阅读 · 0 评论 -
SQL优化(4):group by优化
我们发现,如果仅仅根据age分组,就会出现 Using temporary;而如果是 根据profession,age两个字段同时分组,则不会出现 Using temporary。原因是因为对于分组操作,在联合索引中,也是符合最左前缀法则的。然后,我们在针对于 profession , age, status 创建一个联合索引。分组操作,我们主要来看看索引对于分组操作的影响。紧接着,再执行前面相同的SQL查看执行计划。原创 2023-04-25 17:39:22 · 470 阅读 · 0 评论 -
SQL优化(3):order by优化
也出现 Using index, 但是此时Extra中出现了 Backward index scan,这个代表反向扫描索引,因为在MySQL中我们创建的索引,默认索引的叶子节点是从小到大排序的,而此时我们查询排序时,是从大到小,所以,在扫描时,就是反向扫描,就会出现 Backward index scan。在MySQL8版本中,支持降序索引,我们也可以创建降序索引。因为创建索引时,如果未指定顺序,默认都是按照升序排序的,而查询时,一个升序,一个降序,此时就会出现Using filesort。原创 2023-04-25 17:12:05 · 737 阅读 · 0 评论 -
SQL优化(2):主键优化
在上一小节,我们提到,主键顺序插入的性能是要高于乱序插入的。这一小节,就来介绍一下具体的原因,然后再分析一下主键又该如何设计。原创 2023-04-25 16:41:54 · 670 阅读 · 0 评论 -
SQL优化(1):插入数据
如果一次性需要插入大批量数据(比如: 几百万的记录),使用insert语句插入性能较低,此时可以使。如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。用MySQL数据库提供的load指令进行插入。主键顺序插入,性能要高于乱序插入。原创 2023-04-25 09:54:44 · 71 阅读 · 0 评论 -
Mysql:mysql 5.X 报错 ERROR 1193 (HY000): Unknown system variable ‘validate_password_length‘
最后进入mysql重新输入就可以了。修改配置my.conf文件。原创 2023-04-17 00:03:20 · 556 阅读 · 0 评论 -
Mysql:避免重复的插入数据方法汇总
当插入本条数据时,MySQL数据库会首先检索已有数据(也就是idx_username索引),如果存在,则忽略本次插入,如果不存在,则正常插入数据。即插入数据时,如果数据存在,则忽略此次插入,该方法有前提条件:插入的数据字段设置了主键或唯一索引。即插入数据时,如果数据存在,则执行更新操作,该方法有前提条件:插入的数据字段设置了主键或唯一索引。第二次插入,由于该数据表中已经存在该数据,可以看到,插入失败。由于数据表中没有数据,插入成功。原创 2023-02-10 11:13:29 · 1518 阅读 · 0 评论 -
MySQL集群解决方案(5):PXC集群
Percona XtraDB Cluster(简称PXC)是针对MySQL用户的高可用性和扩展性解决方案,基于Percona Server。其包括了Write Set REPlication补丁,使用Galera 2.0库,这是一个针对事务性应用程序的同步多主机复制插件。原创 2022-12-23 13:22:01 · 256 阅读 · 0 评论 -
MySQL集群解决方案(4):负载均衡
关于并发性能,haproxy可以做到千万级的并发。(当然了,运行环境不同,测试结果也不相同的)原创 2022-12-21 14:22:48 · 2036 阅读 · 1 评论 -
MySQL集群解决方案(2):主从复制架构
下面我们来讲解一下主从复制模型:在查看二进制日志相关参数内容中,会发现默认的模式为ROW,其实在MySQL中提供了有3种模式,基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复制(mixed-based replication, MBR)。对应的,binlog的格式也有三种:STATEMENT,ROW,MIXED。原创 2022-12-12 16:54:33 · 125 阅读 · 0 评论 -
MySQL集群解决方案(1):MySQL数据库的集群方案
在我们的系统架构中,DBserver方面我们只是使用了单节点服务,如果面对大并发,海量数据的存储,显然单节点的系统架构将存在很严重的问题,所以接下来,我们将实现MySQL的集群,来应对大并发、海量数据存储等问题。在前面的架构中,都是基于MySQL主从的架构,那么在主从架构中,弱一致性问题依然没有解决,如果在需要强一致性的需求中,显然这种架构是不能应对的,比如:交易数据。这样的话,中间件的可靠性得到了保证,但是也带来了新的问题,应用系统依然是需要连接到2个中间件,又为应用系统带来了复杂度。原创 2022-12-12 16:07:54 · 1973 阅读 · 0 评论 -
MySQL 为什么需要两阶段提交?
1.1 binlog 与 redologbinlogbinlog 我们中文一般称作归档日志,如果大家看过松哥之前发的 MySQL 主从搭建,应该对这个日志有印象,当我们搭建 MySQL 主从的时候就离不开 binlog。binlog 是一种逻辑日志,他里边所记录的是一条 SQL 语句的原始逻辑,例如给某一个字段 +1,注意这个区别于 redo log 的物理日志(在某个数据页上做了什么修改)。转载 2022-10-31 17:43:03 · 642 阅读 · 0 评论 -
Mysql性能优化(6):读写分离
1 原理图一个连接池只能操作一个数据库,现在我们项目有多个数据库,就必须为每一个数据库配置对应的连接池 在执行SQL语句的使用,根据执行的操作来选择使用哪个连接池进行操作,如:执行DML就必须是选MasterDataSource来操作,执行DQL操作就选择SlaveDataSource来操作 此时应当再有一个对象,该对象拥有管理所有连接池和选择连接池的来使用的功能,该对象就是具有路由功能的连接池 当调用者需要进行数据库操作时,再告诉路由连接池我需要你帮我选择哪个连接池进行操作数据库即可2原创 2022-05-26 16:19:22 · 224 阅读 · 1 评论 -
Mysql性能优化(5):主从同步原理与实现
1 什么是主从同步MySQL 主从同步是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。2 应用场景2.1 读写分离在开发工作中,有时候会遇见某个sql 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这...原创 2022-05-26 16:02:26 · 486 阅读 · 0 评论 -
Mysql性能优化(4):优化的注意事项
1 建立索引的原则1. 较频繁的作为查询条件的字段应该创建索引,如:登录操作2. 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件 作为索引的列,如果不能有效的区分数据,那么这个列就不适合作为索引列;比如(性别,状态不多的状态列)3. 更新非常频繁的字段不适合创建索引,原因:索引有维护成本4. 不会出现在where 子句中的字段不该创建索引5. 索引不是越多越好;(只为必要的列创建索引)2 join的原则注意:不要使用隐式连接,原因在于SQL的执行顺序1. 数据量原创 2022-05-12 13:40:08 · 356 阅读 · 0 评论 -
Mysql性能优化(3):分析执行计划
1 查看SQL执行计划强调: 在SQL语句执行之前,会专门有个叫查询优化器的组件对我们写的SQL进行优化和调整,然后生成执行计划,也就是说,最终执行的SQL不一定是我们当初自己写的SQL,如果出现这个情况大家不要惊讶使用之前的rbac数据库做演示语法:explain 查询语句;//explain select * from tablename下面对各个属性进行了解:1、id:这是SELECT的查询序列号2、select_type:select_type就是..原创 2022-05-10 09:14:34 · 345 阅读 · 0 评论 -
Mysql性能优化(2):数据库索引
1 索引的数据结构1.1 什么是索引?索引是一种帮助数据库获得高效查询效率的数据库对象,该数据库对象使用了特殊的数据结构,以B树和Hash树最为常见,MySQL中索引默认使用的是B树通俗来讲可以这样理解,索引好比是字典的目录,我们在查询某个字时,可以先从目录中查找,看看我们需要的找字在字典中具体页码是多少,然后再直接翻到对应的页码,从而快速的找我们需要的内容,如果没有这个目录,我们就只能从字典的第一页开始,一页一页的往下翻,直到找到我们需要的内容,从这里我们不难看出目录对查询数据的所提高的性能之原创 2022-05-09 13:05:27 · 110 阅读 · 0 评论 -
Mysql性能优化(1):SQL的执行过程
1 为什么SQL需要优化1. 查询性能低2. 执行时间过长3. 等待时间过长4. SQL写的太差(尤其体现在多表查询上) 5. 索引失效6. 服务器参数(缓存,线程数)设置不合理7. 项目需求不合理8. ...等等我们程序员写代码时能做的只有对写SQL尽可能的做出优化,执行效率更高,有效的使用索引,重点放在写SQL上2 SQL的执行过程MySQL在接收到客户端传入的SQL语句后并不能马上对该SQL进行执行,是需要经过一系列复杂的流程,最终转变成二进制的机器码,才能原创 2022-05-08 10:59:16 · 198 阅读 · 0 评论 -
Mysql定时备份脚本
#!/bin/bashmysql_user="root" #MySQL备份用户mysql_password="123456" #MySQL备份用户的密码mysql_host="222.74.0.138"mysql_port="3306"mysql_charset="utf8"backup_db_arr=("workport" "jeecms20201201") backup_location=/home/mysqlback expire_backup_delete="ON" ...原创 2021-10-20 09:59:19 · 1021 阅读 · 0 评论 -
mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
今天在生产环境使用 mysqldump 命令报错,如下:mysqldump: Got error: 1044: Access denied for user ‘xxx’@’xxx’ to database ‘xxx’ when using LOCK TABLES这主要是因为备份用户的权限不足导致的。经过研究对比,给出以下三种解决方案:1、skip-lock-tablesmysqldump -u用户名 -p --skip-lock-tables 数据库名称> ***.sql原创 2021-10-13 19:53:07 · 2155 阅读 · 0 评论 -
Linux下mysql常用操作命令
1.linux下启动mysql的命令:mysqladmin start/ect/init.d/mysql start (前面为mysql的安装路径)2.linux下重启mysql的命令:mysqladmin restart/ect/init.d/mysql restart (前面为mysql的安装路径)3.linux下关闭mysql的命令:mysqladmin shutdown/ect/init.d/mysql shutdown (前面为mysql的安装路径)..原创 2020-10-25 16:51:23 · 451 阅读 · 0 评论