MySQL学习笔记2.0

【漏洞修复】Diffie-Hellman Key Agreement Protocol 资源管理错误漏洞(CVE-2002-20001) Diffie-Hellman Key Agreement Protocol 存在安全漏洞,远程攻击者可以发送实际上不是公钥的任意数字,并触发服务器端DHE模幂计算。 阅读详情

1.主备延迟

来源:

  • 有些部署条件下,备库所在机器的性能要比主库所在的机器性能差。
  • 备库的压力大。
  • 大事务。

由于主备延迟的存在,所以在主备切换的时候,就相应的有不同的策略:可靠性优先策略和可用性优先策略。

2.读写分离

    客户端直连方案,因为少了一层 proxy 转发,所以查询性能稍微好一点儿,并且整体架构简单,排查问题更方便。但是这种方案,由于要了解后端部署细节,所以在出现主备切换、库迁移等操作的时候,客户端都会感知到,并且需要调整数据库连接信息。
    带 proxy 的架构,对客户端比较友好。客户端不需要关注后端细节,连接维护、后端信息维护等工作,都是由 proxy 完成的。但这样的话,对后端维护团队的要求会更高。而且,proxy 也需要有高可用架构。因此,带 proxy 架构的整体就相对比较复杂。

3.数据恢复

不同情况:
1.使用 delete 语句误删数据行;

    Flashback 恢复数据的原理,是修改 binlog 的内容,拿回原库重放。而能够使用这个方案的前提是,需要确保 binlog_format=row 和 binlog_row_image=FULL。
具体恢复数据时,对单个事务做如下处理:
    对于 insert 语句,对应的 binlog event 类型是 Write_rows event,把它改成 Delete_rows event 即可;
    对于 delete 语句,也是将 Delete_rows event 改为 Write_rows event;
    如果是 Update_rows 的话,binlog 里面记录了数据行修改前和修改后的值,对调这两行的位置即可。

2.使用 drop table 或者 truncate table 语句误删数据表;
3.使用 drop database 语句误删数据库;
    需要使用全量备份,加增量日志的方式。这个方案要求线上有定期的全量备份,并且实时备份 binlog。

4.使用 rm 命令误删整个 MySQL 实例。
    系统就会开始工作,选出一个新的主库,从而保证整个集群的正常工作。

4.大数据量查询

    由于 MySQL 采用的是边算边发的逻辑,因此对于数据量很大的查询结果来说,不会在 server 端保存完整的结果集。所以,如果客户端读结果不及时,会堵住 MySQL 的查询过程,但是不会把内存打爆。
    而对于 InnoDB 引擎内部,由于有淘汰策略,大查询也不会导致内存暴涨。并且,由于 InnoDB 对 LRU 算法做了改进,冷数据的全表扫描,对 Buffer Pool 的影响也能做到可控。

5.连接

    在join 语句执行过程中,驱动表是走全表扫描,而被驱动表是走树搜索。如果可以使用被驱动表的索引,join 语句还是有其优势的;不能使用被驱动表的索引,这样的语句就尽量不要使用join;在使用 join 的时候,应该让小表做驱动表。

    在决定哪个表做驱动表的时候,应该是两个表按照各自的条件过滤,过滤完成之后,计算参与 join 的各个字段的总数据量,数据量小的那个表,就是“小表”,应该作为驱动表。

6.临时表

临时表在使用上有以下几个特点:

  • 建表语法是 create temporary table …。
  • 一个临时表只能被创建它的 session 访问,对其他线程不可见。
  • 临时表可以与普通表同名。
  • session 内有同名的临时表和普通表的时候,show create 语句,以及增删改查语句访问的是临时表。
  • show tables 命令不显示临时表。由于临时表只能被创建它的 session 访问,所以在这个 session 结束的时候,会自动删除临时表。

7.group by

    1.如果对 group by 语句的结果没有排序要求,要在语句后面加 order by null;
    2.尽量让 group by 过程用上表的索引,确认方法是 explain 结果里没有 Using temporary 和 Using filesort;
    3.如果 group by 需要统计的数据量不大,尽量只使用内存临时表;也可以通过适当调大 tmp_table_size 参数,来避免用到磁盘临时表;
    4.如果数据量实在太大,使用 SQL_BIG_RESULT 这个提示,来告诉优化器直接使用排序算法得到 group by 的结果。

8.Memory 引擎

InnoDB 和 Memory 引擎的数据组织方式是不同的:

  • InnoDB 引擎把数据放在主键索引上,其他索引上保存的是主键 id。这种方式,我们称之为索引组织表(Index Organizied Table)。
  • 而 Memory 引擎采用的是把数据单独存放,索引上保存数据位置的数据组织形式,我们称之为堆组织表(Heap Organizied Table)。

从中可以看出,这两个引擎的一些典型不同:

  • InnoDB 表的数据总是有序存放的,而内存表的数据就是按照写入顺序存放的;
  • 当数据文件有空洞的时候,InnoDB 表在插入新数据的时候,为了保证数据有序性,只能在固定的位置写入新值,而内存表找到空位就可以插入新值;
  • 数据位置发生变化的时候,InnoDB 表只需要修改主键索引,而内存表需要修改所有索引;
  • InnoDB 表用主键索引查询时需要走一次索引查找,用普通索引查询的时候,需要走两次索引查找。而内存表没有这个区别,所有索引的“地位”都是相同的。InnoDB 支持变长数据类型,不同记录的长度可能不同;
  • 内存表不支持 Blob 和 Text 字段,并且即使定义了 varchar(N),实际也当作 char(N),也就是固定长度字符串来存储,因此内存表的每行数据长度相同。

9.自增值不连续

在 MySQL 里面,如果字段 id 被定义为 AUTO_INCREMENT,在插入一行数据的时候,自增值的行为如下:

  • 如果插入数据时 id 字段指定为 null 或未指定值,那么就把这个表当前的 AUTO_INCREMENT 值填到自增字段;
  • 如果插入数据时 id 字段指定了具体的值,就直接使用语句里指定的值。根据要插入的值和当前自增值的大小关系,自增值的变更结果也会有所不同。

假设,某次要插入的值是 X,当前的自增值是 Y。如果 X插入的值是 X,当前的自增值是 Y。如果X<Y,那么这个表的自增值不变;如果X≥Y,就需要把当前自增值修改为新的自增值。

唯一键冲突是导致自增主键 id 不连续的第一种原因。事务回滚就是第二种原因。

10.特殊情况下的insert语句

     insert … select 是很常见的在两个表之间拷贝数据的方法。在可重复读隔离级别下,这个语句会给 select 的表里扫描到的记录和间隙加读锁。而如果 insert 和 select 的对象是同一个表,则有可能会造成循环写入。这种情况下,需要引入用户临时表来做优化。insert 语句如果出现唯一键冲突,会在冲突的唯一值上加共享的 next-key lock(S 锁)。因此,碰到由于唯一键约束导致报错后,要尽快提交或回滚事务,避免加锁时间过长。

11.复制表

  • 物理拷贝的方式速度最快,尤其对于大表拷贝来说是最快的方法。如果出现误删表的情况,用备份恢复出误删之前的临时库,然后再把临时库中的表拷贝到生产库上,是恢复数据最快的方法。但是,这种方法的使用也有一定的局限性:必须是全表拷贝,不能只拷贝部分数据;需要到服务器上拷贝数据,在用户无法登录数据库主机的场景下无法使用;由于是通过拷贝物理文件实现的,源表和目标表都是使用 InnoDB 引擎时才能使用。
  • 用 mysqldump 生成包含 INSERT 语句文件的方法,可以在 where 参数增加过滤条件,来实现只导出部分数据。这个方式的不足之一是,不能使用 join 这种比较复杂的 where 条件写法。
  • 用 select … into outfile 的方法是最灵活的,支持所有的 SQL 写法。但,这个方法的缺点之一就是,每次只能导出一张表的数据,而且表结构也需要另外的语句单独备份。

12.分区表

    分区表跟用户分表比起来,有两个绕不开的问题:一个是第一次访问的时候需要访问所有分区,另一个是共用 MDL 锁。因此,如果要使用分区表,就不要创建太多的分区。
    有两个问题需要注意:分区并不是越细越好。实际上,单表或者单分区的数据一千万行,只要没有特别大的索引,对于现在的硬件能力来说都已经是小表了。分区也不要提前预留太多,在使用之前预先创建即可。比如,如果是按月分区,每年年底时再把下一年度的 12 个新分区创建上即可。对于没有数据的历史分区,要及时的 drop 掉。至于分区表的其他问题,比如查询需要跨多个分区取数据,查询性能就会比较慢,基本上就不是分区表本身的问题,而是数据量的问题或者说是使用方式的问题了。

DSP复习笔记(5)——外部接口模块XINTF 【注意】 1. 芯片型号:TMS320F28335 2. 适用于NJUSTEO李彧晟老师课程 3. 参考资料:《TMS320F28335 DSP原理、开发及应用》 4. 对应PPT第二章 5. 本章内容较多而且较为重要,请结合PPT一起复习 阅读详情

相关推荐

云漾AI创作平台实战:如何用GPT4.0+Midjourney快速生成商业级插画(附Prompt模板)

本文详细介绍了如何利用云漾AI创作平台结合GPT4.0和Midjourney快速生成商业级插画。通过智能文案生成与视觉化工作流,大幅提升创作效率,适用于电商、社交媒体等多种场景。文章包含实用Prompt模板和参数调整技巧,帮助设计师和内容创作者高效产出专业插画。

weixin_29251567的博客 218

MySQL 中事务以及事务隔离级别的详解

一、MySQL 中事务的理解 二、演示事务的基本使用 DROP TABLE t27; -- 1.创建一张测试表 CREATE TABLE t27( id INT, `name` VARCHAR(32) ); -- 2.开启事务 START TRANSACTION -- 3.设置保存点 SAVEPOINT a -- 执行DML操作 INSERT INTO t27 VALUES(100,'tom'); SELECT * FROM t27; SAVEPOINT b -- 执行DML操作 INSERT I

路宇的博客 1024

ISO15118-20协议测试实战:用Efficient XML库验证26条命令编解码(附完整代码)

本文分享了ISO15118-20协议测试实战经验,重点探讨了使用Efficient XML库对26条命令进行EXI编解码验证的过程。通过搭建测试环境、编写自动化程序并与官方工具链进行交叉比对,文章深入分析了4条命令编码结果不一致的原因,并提供了完整的排查思路与C代码示例,旨在帮助开发者确保电动汽车充电通信的协议一致性。

weixin_29284657的博客 108

【mysql】insert select 同一个表

最近遇到的一个mysql的问题,记录下来分享给大家~ 建一个测试表,并插入数据 # 建表语句 mysql> show create table test; +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------

大菜菜的博客 2019

Python爬虫实战:5分钟搞定Web of Science文献批量导出与解析(附完整代码)

本文提供了一套利用Python爬虫技术,快速实现Web of Science文献批量提取与解析的完整方案。通过解析官方导出的HTML文件,结合BeautifulSoup和pandas库,可将文献数据自动转换为结构化的Excel/CSV表格,帮助科研人员高效管理文献信息,节省大量手动整理时间。

weixin_29050513的博客 1164

W5500+STM32F103C8T6进行TCP通信(modbus)

一路生花一、w5500资料二、modbus通信三、从机代码四、总结五、参考 一、w5500资料 w5500的资料就放在下面了,单纯的客户端和其他模式上面有教程 https://www.aliyundrive.com/s/enPnnZgNtpE 二、modbus通信 Modbus RTU通信时使用的数据帧结构如下图,而Moubus TCP通信的数据帧和这个稍微不一样,没有crc检验,因为tcp本就是一种可靠传输协议 这里是Modbus TCP数据帧 公共功能码定义 三、从机代码

junseven164的博客 5777

MYSQL用法(十三) MySQL中INSERT INTO SELECT 的使用详解

1. 语法介绍       有三张表a、b、c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段。对于这种情况,可以使用如下的语句来实现:       INSERT INTO db1_name (field1,field2) SELECT field1,field2 FROM db2_name       上面的语句比较适合两个表的数据互插,如果多个表就不适应了。对

babyZeng 8901

力扣(Leetcode)第1题:两数之和(C语言版本)

题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 输入:nums = [3,2,4], target = 6

qq_39855356的博客 3307

储存过程insert into 表 select_表基本操作/事务

1.数据库类型number(x,y):数值型最长是x位,y位小数varchar2(maxlength):变长字符串,maxlength这个参数的上限是32767字节char(max_length):定长字符串最大2000字节 Date:日期时间只能精确到秒。timestamp:时间戳精确到微秒long:长字符串最大支持2GB其他类型:CLOB:最大长度4G -->大对象很少使用:如果存在大...

weixin_39764379的博客 1209

基于STM32F407标准库与SimpleFOC实现无刷电机2804位置闭环控制的实战解析

本文详细解析了基于STM32F407标准库与SimpleFOC算法实现2804无刷电机位置闭环控制的实战过程。通过硬件选型、速度闭环调试到位置环PID参数整定,提供了完整的工程实现方案和抗饱和策略,帮助开发者掌握高精度电机控制技术。

oauth7security的博客 917

使用光流进行 Warp 的流程

光流描述了图像帧中每个像素的运动。前向光流:描述了帧中每个像素在帧中的移动位置。后向光流:描述了帧中每个像素在帧​ 中的移动位置。水平方向的位移(x 方向),即每个像素水平移动了多少像素。垂直方向的位移(y 方向),即每个像素垂直移动了多少像素。使用光流进行 Warp 的流程Warp 是通过光流对图像进行变换的操作,旨在将前一帧的像素根据光流场映射到下一帧的对应位置。Step 1: 计算光流我们首先需要通过光流网络(如 RAFT)来估算两帧之间的光流。我们可以获得前向光流(从帧​ 到帧。

qq_44199605的博客 2108

mysql事物into,记mysql Insert into select语句问题

问题:由于数据数据库中 order_today 数据量过大,当时好像有 700W 了,并且每天在以 30W 的速度增加。所以要 将 order_today 内的部分数据迁移到 order_record 中,并将 order_today 中的数据删除,这样来降低 order_today 表中的数据量。错误操作:在默认的事务隔离级别下:insert into order_record select *...

weixin_27013291的博客 389

【Python搞定车载自动化测试】——Python实现车载以太网DoIP刷写(含Python源码)

随着智能电动汽车行业的发展,汽车=智能终端+四个轮子,而人工智能也发展越来越快,Python语言使用越来越广,本章节主要介绍如何使用Python语言基于Pytest自动化框架来实现DoIP诊断自动化测试。首先回顾一下DoIP诊断基础知识:DoIP(Diagnosis over Internet Protocol)是一种用于车辆诊断的网络通信协议。它基于现代互联网技术,允许通过以太网或IP网络进行车辆诊断和通信。

测试领域技术分享 3795

Flink2.0学习笔记:stream-api source源:jdbc 流式处理(自定义支持多数库的连接池)和批次处理(使用mysql-flax 预加载数据)

Flink2.0学习笔记:stream-api:jdbc 流式处理(自定义支持多数库的连接池)和批次处理(使用mysql-flax 预加载数据)

livemegoodboy的博客 470

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

B站MySQL8.0学习笔记(2)函数、约束

B站黑马程序员视频 MySQL8.0 的学习笔记2

ZANLI的专栏 155

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Mysql8.0学习笔记(2)—— inner join,outer join,union

join 用于将多个表联合显示出来 除了之前的customers表来表示客户,同样有一张order表示客户订单,如下: 以某一列为值联合 select * from orders inner join customers //为内部联合,inner关键字可省略 on orders.customer_id = customers.customer_id //只联合customer_i...

qq_37863891的博客 1382

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【Django2.0学习笔记】36.部署准备(二):MySQL

36、部署准备(二):MySQL B站教程视频链接:36.部署准备(二):MySQL 1、什么是MySQL MySQL是一款跨平台的开源的关系型数据库 2、为什么使用MySQL - MySQL SQLite 特点 为服务器端而设计 轻量级、可嵌入 高并发访问 能 不能 占用内存 比SQLite大 小 适用性 服务器 适合桌面应用和手机应用 3、如何使用MySQL 1、安装MySQL 1)下载MySQL 2)路径加入系统环境 3)配置MySQL 4)启动服务 5)设置r

qq_42851418的博客 460

一起学ASP.NET Core 2.0学习笔记(一)- CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建

作为.neter,看到.net core 2.0的正式发布,心里是有点小激动的,迫不及待的体验了一把,发现速度确实是快了很多,其中也遇到一些小问题,所以整理了一些学习笔记: 阅读目录 环境说明 安装CentOS7 安装.NET Core SDK for CentOS7 搭建ftp服务器 安装mysql 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(Supervis

bieguolaia的博客 1752

u3d mysql_学习笔记(1) mysql + kbengine-0.8.2+U3D_demo详细搭建过程个人记录_mysql

学习笔记(一) mysql + kbengine-0.8.2+U3D_demo详细搭建过程个人记录最近在无意间得知KBEngine是一个开源以及可以支持U3D的一个服务,萌新我屁颠屁颠的跑去KBengine.org官方网站看怎么搭建一个服务器出来,由于我没有学习过mysql,所以花了很多时间才正确的搭建好mysql环境,在此记录下mysql+KBengine+U3D_Demo详细搭建过程。mysq...

weixin_39608300的博客 255

centos mysql 开发包_一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建...

作为.neter,看到.net core 2.0的正式发布,心里是有点小激动的,迫不及待的体验了一把,发现速度确实是快了很多,其中也遇到一些小问题,所以整理了一些学习笔记:环境说明服务器系统:CentOS 7.3 64位相关工具:putty、Xftp服务器软件软件:.netcore、nginx、supervisor、mysql安装CentOS7这个就不细说了,网上教程很多,我这边是阿里云的ecs服...

weixin_28974337的博客 213

Flink2.0学习笔记:Table API & SQL

Flink2.0:Table API & SQL

livemegoodboy的博客 853

一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移...

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建搭建好了.net core linux的相关环境,今天就来说说ef core相关的配置及迁移: 简介: Entity Framework(以下简称EF) 是微软以...

weixin_30386713的博客 268

django2.0学习

django2.0 笔记1 前言 本着学习django机制的想法,暂时忽略对于前段页面的美化,只是达到了解django的目的,为此学习了一些时间。下面是对基于django2.0做的一个非常小型的管理系统,自我认为可以作为初学者的引路篇。 应用工具: 语言:python3.6,简单的html+css 数据库:mysql5.7 软件:Pycharm,Navicat 所用到的python库: 4...

qq_33694648的博客 482

一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx、supervisor、mysql环境搭建...

作为.neter,看到.net core 2.0的正式发布,心里是有点小激动的,迫不及待的体验了一把,发现速度确实是快了很多,其中也遇到一些小问题,所以整理了一些学习笔记: 阅读目录 环境说明 安装CentOS7 安装.NET Core SDK for CentOS7 搭建ftp服务器 安装mysql 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(S...

weixin_30535913的博客 271

Qt+数据库学习笔记(五)win10+Qt5.15.2+mingw81_x64编译mysql8.0驱动插件

前言: 不少读者仍然在使用Qt5.15.2,仍然使用mingw,连接mysql数据库。笔者本次尝试编译mingw7.3 64位的驱动插件,在此记录下本次编译过程 一、安装mysql8.0 注:若读者使用的是win7系统,请提前安装.net4.5,否则可能无法运行或安装失败 到官网下载mysql8.0 下载地址:MySQL :: MySQL Community Downloads ​ 下载安装包 ​ 安装过程比较简单, ​ 选择自定义安装 ​ 一定要安装数据库! 最新的程序中,已.

aggs1990的专栏 984

Qt+数据库学习笔记(五)win10+Qt5.15.2+VS2019_x64编译mysql8.0驱动插件

前言: 上篇介绍的是使用mingw,本篇介绍使用VS2019连接mysql数据库,在此记录下本次编译过程 一、安装mysql8.0 注:若读者使用的是win7系统,请提前安装.net4.5,否则可能无法运行或安装失败 到官网下载mysql8.0 下载地址:MySQL :: MySQL Community Downloads ​ 下载安装包 ​ 安装过程比较简单, ​ 选择自定义安装 ​ 一定要安装数据库! 最新的程序中,已无法单独选择C连接接口,但会包含在数据库中,所以必须选中.

aggs1990的专栏 1022
上一篇: MySQL学习笔记1.0
下一篇: JVM学习笔记2.0
过河的小卒子
博客等级 码龄10年 39粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值