MySQL
文章平均质量分 90
MySQL索引、调优、主从同步和分库分表
Java架构何哥
从事政务信息化、大数据治理、智慧党建相关工作
展开
-
【线上故障记录】MySQLTransactionRollbackException: Lock wait timeout exceeded
当表是Innodb表,当表上有慢查询,不阻塞Select 和DML,其他的DDL操作都会被阻塞,比如出现waiting for table metadata lock。原创 2023-01-04 10:21:51 · 3026 阅读 · 0 评论 -
MySQL百万级数据大分页查询优化
前言:在数据库开发过程中我们经常会使用分页,核心技术是使用limit进行数据的读取。在使用limit进行分页的测试过程中,得到以下数据:一、MySQL分页起点越大查询速度越慢直接用limit start, count分页语句, 也是我程序中用的方法:select * from product limit start, count当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条)。select * from pr原创 2022-01-09 22:18:10 · 8189 阅读 · 2 评论 -
MySQL面试夺命连环27问
1、MySQL 逻辑架构分层把 MySQL 分成三层,跟客户端对接的连接层,真正执行操作的服务层,和跟硬件打交道的存储引擎层。Mysql逻辑架构图主要分三层:(1)第一层负责连接处理,授权认证,安全等等(2)第二层负责编译并优化SQL(3)第三层是存储引擎。连接层我们的客户端要连接到 MySQL 服务器 3306 端口,必须要跟服务端建立连接,那么管理所有的连接,验证客户端的身份和权限,这些功能就在连接层完成。服务层连接层会把 SQL 语句交给服务层,这里面又包...原创 2021-10-25 12:02:48 · 16231 阅读 · 12 评论 -
Sharding-JDBC自动实现MySQL读写分离
前言:上一篇博客我用AOP+AbstractRoutingDataSource实现了MySQL读写分离,自己写代码实现判断该使用哪个数据源挺麻烦的。Sharding-JDBC 是 Apache 旗下的 ShardingSphere 中的一款轻量级产品,引入 jar 即可完成读写分离的需求,可以理解为增强版的 JDBC,现在被使用的较多。使用Sharding-JDBC配置MySQL读写分离,优点在于数据源完全有Sharding-JDBC托管,写操作自动执行master库,读操作自动执行slave库。不需要程序原创 2021-10-24 00:16:25 · 3437 阅读 · 3 评论 -
SpringBoot+MyBatis+AOP实现读写分离
前言:高并发这个阶段,肯定是需要做MySQL读写分离的。实际上大部分的互联网网站或者App,其实都是读多写少。所以针对这个情况,就是写一个主库,但是主库挂多个从库,然后从多个从库来读,那不就可以支撑更高的读并发压力了吗?一、 MySQL 读写分离1.1、如何实现 MySQL 的读写分离?其实很简单,就是基于主从复制架构。简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从去,多个从库用于读。读写分离就是对于一条SQL该选择哪一个数据库去执行,至于谁来做原创 2021-10-22 01:36:35 · 1946 阅读 · 1 评论 -
MySQL主从复制配置总结
一、MySQL主从复制1.1、MySQL主从复制简介MySQL Replication (MySQL 主从复制) 是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式(一级主从大概50~100 us),这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。横向扩展解决方案在多个从库之间扩展负载以提高性能。在这种环境中,所有写入和更新在主库上进行。原创 2021-10-21 22:14:25 · 5005 阅读 · 1 评论 -
MySQL慢查询优化
前言:在应用开发的早期,数据量少,程序猿开发功能时更重视功能上的实现,随着生产数据的增长,很多SQL语句开始暴露出性能问题,对生产的影响也越来越大,有时候这些有问题的SQL慢查询就是整个系统性能的瓶颈。一、SQL慢查询简介1.1、什么是SQL慢查询?这里指的是MySQL慢查询,具体指运行时间超过long_query_time值的SQL。我们常听常见的MySQL中有二进制日志binlog、中继日志relaylog、重做回滚日志redolog、undolog等。针对慢查询,还有一种慢查询日.原创 2021-10-11 23:51:46 · 1753 阅读 · 0 评论 -
MySQL索引优化总结
前言:相信大家都知道索引可以大大提高MySQL的检索速度,但是真正在平时工作中写SQL,真的会考虑到这条SQL如何能够用上索引提升执行效率?本篇博客详细的介绍了索引优化的20个原则,只要在工作中能够随时应用到,相信你写出的SQL能够命中索引,效率杠杠的。一、索引的分类1.1、普通索引、主键索引和唯一索引1.2、聚集索引和非聚集索引1.3、联合索引最左匹配原则1.4、索引覆盖和回表1.5、前缀索引1.6、索引合并1.7、索引下推二、索引优化规则查询的条...原创 2021-09-30 01:39:43 · 7910 阅读 · 0 评论 -
日常工作中如何做MySQL优化?
前提:当有人问你如何对数据库进行优化时,很多人第一反应想到的就是SQL优化,如何创建索引,如何改写SQL,他们把数据库优化与SQL优化划上了等号。当然这不能算是完全错误的回答,只不过思考的角度稍微片面了些,太“程序员思维”化了,没有站在更高层次来思考回答。那今天我们就将视角拔高,站在架构的角度来聊聊这一问题,数据库优化可以从哪些维度入手?正如上图所示,数据库优化可以从架构优化,硬件优化,DB优化,SQL优化四个维度入手。此上而下,位置越靠前优化越明显,对数据库的性能提升越高。我们常说的SQL优化反而原创 2021-09-29 01:30:07 · 676 阅读 · 1 评论 -
Mysql集群方案:主从复制
1、什么是mysql主从同步?当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库。2、主从同步有什么好处? 水平扩展数据库的负载能力。 容错,高可用。Failover(失败切换)/High Availability 数据备份。 3、主从同步的原理是什么?首先我们来了解master-slave的体系结构。如下图:不管是delete、update、insert,还是创建函数、存储过程,所有的操作都在master上。当master原创 2020-06-22 17:28:08 · 1379 阅读 · 1 评论 -
Mysql数据库备份和恢复总结
前言:数据库备份是我们服务端开发经常遇到的问题。为了用户体验,我们要尽量减少服务器备份时的损失。所以备份时间尽量选在半夜,而且要尽量减少备份所用的时间。一、数据库备份的目的做灾难恢复:对损坏的数据进行恢复和还原需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用二、备份需要考虑的问题可以容忍丢失多长时间的数据;恢复数据要在多长时间内完;恢复的时候是否需要持续提供服务;恢复的对象,是整个库,多个表,还是单个库,单个表。三、备份的类型1、根据是否需要数据库离线冷备原创 2020-06-22 15:43:28 · 3160 阅读 · 0 评论 -
Mysql创建索引
一、MySQL 索引1、MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢。比如以WordPres...原创 2019-02-14 09:38:47 · 935 阅读 · 0 评论 -
深入理解数据库索引
前言:数据库和数据库索引这两个东西是在服务器端开发领域应用最为广泛的两个概念,熟练使用数据库和数据库索引是后端开发人员在行业内生存的必备技能。数据库索引是用来提高数据库表的数据查询速度的。一、索引出现背景在数据库系统的使用过程当中,数据的查询是使用最频繁的一种数据操作。最基本的查询算法当然是顺序查找(linear search),遍历表然后逐行匹配行值是否等于待查找的关键字,其时间复杂度为...原创 2019-02-14 07:19:17 · 3052 阅读 · 0 评论 -
Mysql最常用的Innodb和MyISAM存储引擎
前言:在MySQL数据库中,常用的存储引擎主要就是2个:Innodb和MyISAM。一、为什么要合理选择数据库存储引擎?MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。这些不同的技术以及配套的相关功能在MyS...原创 2019-02-14 08:38:49 · 774 阅读 · 0 评论 -
Mysql 循环插入10000条数据
前言:因为项目用user和data两张表,把user中的部分字段拆分到data中,这样两表都要通过user_id关联起来(作为两表主键),当注册新用户时只往use表写入了user_id,data表无法同时写入user_id,这样会导致用户无法修改资料。1、所以,按自己想法,写个循环1W次随便插入数据测试DROP PROCEDURE IF EXISTS proc_initData;--如果...原创 2018-02-05 00:17:40 · 47128 阅读 · 3 评论 -
Mysql数据库物理备份和迁移
前言: 数据库迁移是我们服务端开发经常遇到的问题。为了用户体验,我们要尽量减少服务器迁移时的损失。所以迁移时间尽量选在半夜,而且要尽量减少迁移所用的时间。1、Mysql数据库备份把你自己建的数据库mengtu库表结构文件、数据文件和mysql一起拷贝存储即可。Mysql安装目录下的data文件夹文件列表如下:注意:在Mysql中提供了一个专门用于备份SQL的客户...原创 2017-12-11 23:33:27 · 1729 阅读 · 0 评论 -
玩转Mysql命令行
前言:Mysql命令行下,从数据库的建立到表的建立、插入、更新、查询、删除全过程,还包括Mysql数据库备份和恢复。注意:mysql的所有命令都以";"或者\g为结束符。一、基本命令1.登陆mysql打开cmd终端,mysql -uroot ,输入密码后按回车键。2.设置字符集为utf8,防止中文乱码 set names utf8;3.新建数据库 cre...原创 2016-05-01 00:46:27 · 942 阅读 · 0 评论 -
数据库SQL语言最常用的数字函数
oracle、mysql中Round、Trunc、Cell、Floor函数的用法原创 2015-12-13 19:53:29 · 1081 阅读 · 0 评论 -
数据库SQl语言最常用的字符串函数
在Oracle,SQL Srever ,Mysql等主流数据库中最常用的字符串函数:一.substr函数:取得字符串中指定起始位置和长度的字符串默认是从起始位置到结束的子串。substr( string,start_position,[length]) substr('目标字符串',开始位置,长度)如: substr('This is a test',原创 2015-11-27 23:27:03 · 4758 阅读 · 0 评论