InnoDB

mysql5.7.21源码安装

江枫思渺然 提交于 2021-01-02 22:53:30
1.下载安装包 MySQL 官方下载地址: https://dev.mysql.com/downloads/mysql/ MySQL 5.7官方安装文档: https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html 2.安装依赖包 MySQL依赖于libaio 库。如果这个库没有在本地安装,数据目录初始化和后续的服务器启动步骤将会失败。请使用适当的软件包管理器进行安装。例如,在基于Yum的系统上: shell> yum search libaio shell> yum install libaio 3.创建一个mysql用户和组 shell> groupadd mysql shell> useradd -r -g mysql -s /bin/false mysql 4.解压到指定目录 shell> tar -zxvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz -C /usr/local shell> cd /usr/local shell> mv mysql-5.7.21-linux-glibc2.12-x86_64 mysql 5.配置数据库目录 数据目录:/usr/local/mysql/data 参数文件my.cnf:/usr/local/mysql/etc/my

Python day7之mysql

夙愿已清 提交于 2021-01-02 19:16:35
写在前面:   由于毕业论文撰写和答辩耽搁了几个月,但是在这几个月没有放弃学习Python,就是没有时间写博客。进行我们主要对数据库mysql的操作指令集的学习。 一、mysql术语   Mysql是最流行的关系型数据库管理系统,接下来介绍术语。 数据库: 数据库是一些关联表的集合。. 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。 行: 一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。 冗余 :存储两倍数据,冗余可以使系统速度更快。(表的规范化程度越高,表与表之间的关系就越多;查询时可能经常需要在多个表之间进行连接查询;而进行连接操作会降低查询速度。例如,学生的信息存储在student表中,院系信息存储在department表中。通过student表中的dept_id字段与department表建立关联关系。如果要查询一个学生所在系的名称,必须从student表中查找学生所在院系的编号(dept_id),然后根据这个编号去department查找系的名称。如果经常需要进行这个操作时,连接查询会浪费很多的时间。因此可以在student表中增加一个冗余字段dept_name,该字段用来存储学生所在院系的名称。这样就不用每次都进行连接操作了。) 主键 :主键是唯一的

Mysql临时表突增问题定位与分析

蹲街弑〆低调 提交于 2021-01-02 16:39:38
一、问题现象 数据展示系统出现异常,首页刷不出数据,查看日志后发现模块无法连接数据库(从库,以下数据库都表示从库),紧接着数据分析模块出现报警,服务器出现磁盘空间不足报警。 查看AWS RDS监控发现,在时间段 ‘08.31 19:15:00 - 09.01 01:19:00’ 内,数据库实例存储空间急剧下降 监控显示,数据库连接数量没有明显增加,但在该时间段内磁盘IO明显增大 磁盘IO 数据库连接数量 通过查看实例上磁盘的占用情况,发现磁盘临时表占用了大量空间(420G/500G),于是我们开始定位为何会有大量的临时表被持久化到磁盘上 二、问题分析与复现 2.1 临时表 MySQL中有两种临时表:外部临时表和内部临时表。其中外部临时表可有用户查询时手动创建保存一些中间数据,提升查询效率等; 内部临时表会在查询过程中由Mysql自动创建并存储某些中间操作的结果,这种操作可能出现在优化阶段或者执行阶段,所以这种临时表对用户不可见,一般通过EXPLAIN可以查看查询语句是否用到了内部临时表。 而内部临时表又可以被分为磁盘临时表和内存临时表,Mysql在使用内部临时表时会优先使用内存临时表,即将临时表存放在内存里,当临时表过大或内存不够用时,就会转化成磁盘临时表,存放在ibtmp1文件中。 在Mysql5.7中,内存临时表在查询结束后会被释放,而文件ibtmp1占用的空间不会被自动释放

mysql事务ACID原理MVCC 幻读

半腔热情 提交于 2021-01-01 19:35:55
文章目录 mysql事务原理MVCC 1存储引擎 1.InnoDB存储引擎 2.MyISAM存储引擎 2.undo和redo的功能 undo: redo: 3.mysql锁 3.1表级锁 3.2行级锁 3.3全局锁 3.4避免阻塞与死锁 阻塞:食堂排队 3.5.mysql死锁 不同表 同一个表 避免死锁 4.MVCC多版本并发控制 mvcc如何解决隔离性 隐式字段 Read View 读已提交RC read-commited 解决不可重复读RR read-repeatable 解决不了幻读 5.总结 mysql事务原理MVCC 书籍推荐:mysql必知必会 ​ 深入浅出mysql ​ mysql高性能(偏DBA) 数据量较小:索引(一个库) 数据量较大:分库分表,读写分离 mysql优化是一个大的范围,需要丰富的经验,课程中会把作为一个java程序员(非DBA)基本的、常用的一一列举出来,希望大家尽可能多的掌握,因为太多了,而我们重点在java,所以每个知识点都只会抽取重点来学习。如果以后大家项目中需要这方面的,大家以这个为基础,再去深入学习,也是没有问题的。 select * from xxx where id=1 ①建立连接1.1(Connectors&Connection Pool),通过客户端/服务器通信协议与MySQL建立连 接。 MySQL 客户端与服务端的通信方式是

Zabbix监控搭建

心已入冬 提交于 2021-01-01 07:48:08
[toc] Zabbix概述 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 ( 基于 GPL V2 )zabbix由 2 部分构成,zabbix server与可选组件zabbix agent ####进程构成 zabbix 安装完成后会产生 5 个程序:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,zabbix_java_gateway是可选,这个需要另外安装 <1> zabbix_agentd 客户端守护进程,此进程收集客户端数据,例如 cpu负载、内存、硬盘使用情况等 <2> zabbix_get zabbix工具,单独使用的命令,通常用于排错 <3> zabbix_sender zabbix工具,用于发送数据给 server 或者 proxy ,在脚本完成之后使用 sender 主动将数据提交 <4> zabbix_server zabbix 服务端守护进程,所有的数据都是被提交或主动提交到 zabbix_server 端 <5> zabbix_proxy zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到server里 <6> zabbix_java_gateway zabbix2

数据库是如何分库,如何分表的?

依然范特西╮ 提交于 2020-12-31 11:07:21
点击上方“ 猿程之家 ”,选择“置顶公众号” 关键时刻,第一时间送达! 阅读本文需要5分钟 一. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。 数据库分布式核心内容无非就是数据切分(Sharding) ,以及切分后对数据的定位、整合。数据切分就是将数据分散存储到多个数据库中,使得单一数据库中的数据量变小,通过扩充主机的数量缓解单一数据库的性能问题,从而达到提升数据库操作性能的目的。 数据切分根据其切分类型,可以分为两种方式:垂直(纵向)切分和水平(横向)切分 1、垂直(纵向)切分 垂直切分常见有垂直分库和垂直分表两种。 垂直分库 就是根据业务耦合性,将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似,按业务分类进行独立划分。与"微服务治理"的做法相似,每个微服务使用单独的一个数据库。如图: 垂直分表 是基于数据库中的"列"进行,某个表字段较多,可以新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中。在字段很多的情况下(例如一个大表有100多个字段),通过"大表拆小表",更便于开发与维护,也能避免跨页问题

浅谈MySQL架构体系

别说谁变了你拦得住时间么 提交于 2020-12-31 10:35:22
一 数据库和数据库实例 在MySQL的学习研究中,存在两个非常容易混淆的概念,即数据库和数据库实例。在MySQL中,数据库和数据库实例定义如下: 数据库:存储数据的集合; 数据库实例:操作数据库的集合。 如上定义很清楚了,数据库是用来存储数据的,数据库实例是用来操作数据的,从操作系统的角度,数据库实例表现为一个进程,对应多个线程, 在非集群数据库架构中,数据库与数据库实例存在一 一对应关系,在数据库集群中,可能存在多个数据库实例操作一个数据库情况,即多对一关系。 二 MySQL基架 对于MySQL来说,虽然经历了多个版本迭代(MySQL5.5,MySQL 5.6,MySQL 5.7,MySQL 8),但每次的迭代,都是基于MySQL 基架的,MySQL基架大致包括如下几大模块组件: (1)MySQL向外提供的交互接口(Connectors) (2)管理服务组件和工具组件(Management Service & Utilities) (3)连接池组件(Connection Pool) (4)SQL接口组件(SQL Interface) (5)查询分析器组件(Parser) (6)优化器组件(Optimizer) (7)缓存主件(Caches & Buffers) (8)插件式存储引擎(Pluggable Storage Engines) (9)物理文件(File System)

PHP/MySQL Critical section

六月ゝ 毕业季﹏ 提交于 2020-12-31 04:52:39
问题 I'm using PHP with PDO and InnoDB tables. I only want the code to allow one user-submitted operation to complete, the user can either cancel or complete. But in the case that the user posts both operations, I want one of the requests to fail and rollback, which isn't happening right now, both are completing without exception/error . I thought deleting the row after checking it exists would be enough. $pdo = new PDO(); try { $pdo->beginTransaction(); $rowCheck = $pdo->query("SELECT * FROM

PHP/MySQL Critical section

℡╲_俬逩灬. 提交于 2020-12-31 04:52:35
问题 I'm using PHP with PDO and InnoDB tables. I only want the code to allow one user-submitted operation to complete, the user can either cancel or complete. But in the case that the user posts both operations, I want one of the requests to fail and rollback, which isn't happening right now, both are completing without exception/error . I thought deleting the row after checking it exists would be enough. $pdo = new PDO(); try { $pdo->beginTransaction(); $rowCheck = $pdo->query("SELECT * FROM

PHP/MySQL Critical section

北战南征 提交于 2020-12-31 04:52:25
问题 I'm using PHP with PDO and InnoDB tables. I only want the code to allow one user-submitted operation to complete, the user can either cancel or complete. But in the case that the user posts both operations, I want one of the requests to fail and rollback, which isn't happening right now, both are completing without exception/error . I thought deleting the row after checking it exists would be enough. $pdo = new PDO(); try { $pdo->beginTransaction(); $rowCheck = $pdo->query("SELECT * FROM