MySQL 8.0 OCP认证精讲视频、环境和题库之五 事务、缓存

 redo log buffer:


   缓存与事务有关的redo log ,用来对mysql进行crash恢复,不可禁用;
   日志缓冲区是存储要写入磁盘上日志文件的数据的内存区域。日志缓冲区大小由innodb_Log_buffer_size变量定义。
   默认大小为16MB。日志缓冲区的内容会定期刷新到磁盘。大型日志缓冲区使大型事务能够运行,
   而无需在事务提交之前将重做日志数据写入磁盘。因此,如果您有更新、插入或删除许多行的事务,
   那么增加日志缓冲区的大小可以节省磁盘I/O
变量innodb_log_buffer_size:
    指定redo log buffer的大小;
变量innodb_log_group_home_dir:
    指定redo log file的路径
变量innodb_log_files_in_group :
    每组日志组中包含的日志文件个数;

    mysql> show variables like 'innodb_log_group_home_dir';
    +---------------------------+-------+
    | Variable_name             | Value |
    +---------------------------+-------+
    | innodb_log_group_home_dir | ./    |
    +---------------------------+-------+
    1 row in set (0.00 sec)    
    mysql> show variables like 'innodb_log_files_in_group';
    +---------------------------+-------+
    | Variable_name             | Value |
    +---------------------------+-------+
    | innodb_log_files_in_group | 2     |
    +---------------------------+-------+
    1 row in set (0.00 sec)

    mysql> show variables like 'datadir';
    +---------------+-------------------+
    | Variable_name | Value             |
    +---------------+-------------------+
    | datadir       | /data/mysql/data/ |
    +---------------+-------------------+
    1 row in set (0.00 sec)

    mysql> 
    [root@student ~]# ls  /data/mysql/data/*logfile*
    /data/mysql/data/ib_logfile0  /data/mysql/data/ib_logfile1
    组中共有两个logfile
    [root@student ~]# du -m  /data/mysql/data/*logfile*     #48MB
    48    /data/mysql/data/ib_logfile0
    48    /data/mysql/data/ib_logfile1
    [root@student ~]# 
    mysql> show variables like 'innodb_log_file_size';  #日志大小
    +----------------------+----------+
    | Variable_name        | Value    |
    +----------------------+----------+
    | innodb_log_file_size | 50331648 |
    +----------------------+----------+
    1 row in set (0.01 sec)
    mysql> select 50331648/1024/1024;
    +--------------------+
    | 50331648/1024/1024 |
    +--------------------+
    |        48.00000000 |
    +--------------------+
    1 row in set (0.00 sec)

    mysql> 
  修改日志组和日志文件大小
    [root@student ~]# systemctl stop mysql
    [root@student ~]# cat  /etc/my.cnf
    [mysqld]
    datadir=/data/mysql/data/
    socket=/data/mysql/mysql.sock

    innodb_buffer_pool_chunk_size=64M
    innodb_buffer_pool_size=256M

    innodb_log_file_size=100M
    innodb_log_files_in_group=4
    
   [root@student ~]# systemctl start mysql
    mysql> show variables like '%innodb_log%';
    +------------------------------------+-----------+
    | Variable_name                      | Value     |
    +------------------------------------+-----------+
    | innodb_log_buffer_size             | 16777216  |
    | innodb_log_checksums               | ON        |
    | innodb_log_compressed_pages        | ON        |
    | innodb_log_file_size               | 104857600 |   #100MB 
    | innodb_log_files_in_group          | 4         |   #4个logfile 
    | innodb_log_group_home_dir          | ./        |
    | innodb_log_spin_cpu_abs_lwm        | 80        |
    | innodb_log_spin_cpu_pct_hwm        | 50        |
    | innodb_log_wait_for_flush_spin_hwm | 400       |
    | innodb_log_write_ahead_size        | 8192      |
    +------------------------------------+-----------+
    [root@student ~]# du -m  /data/mysql/data/ib_logfile*
    100    /data/mysql/data/ib_logfile0
    100    /data/mysql/data/ib_logfile1
    100    /data/mysql/data/ib_logfile2
    100    /data/mysql/data/ib_logfile3
    [root@student ~]# 
    
    redo log buffer:缓存与事务有关的redo log,用来对mysqldi进行crash恢复,不可禁用
    变量innodb log buffer size:指定redo log buffer的大小
    变量innodb_log_group_home_dir:指定redo log文件的路径
    变量innodb_log_files_in_group:指定Redo log.文件的数量
    变量innodb_log_file_size:指定每个redo log文件的大小
    实验:redo log的设置:
    1、查看上述变量I
    2、通过set命令指定redo log buffer的大小为32M
    3、在选项文件中指定相关变量,设置redo log buffer的大小为32M,设置redo log.文件为4个,每个文件100M
    重新启动mysqld服务,再此查看上述变量

存储引擎

列出 mysql所支持的存储引擎
mysql>show engines;

默认存储引擎为innoDB,不可禁用

mysql> show engines;

只有InnoDB  和DBcluster支持事务acid

mysql> use testdb
mysql> create table t1(id integer);
mysql> start transaction;
mysql> insert into t1 values(1);
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql> insert into t1 values('xyz');
ERROR 1366 (HY000): Incorrect integer value: 'xyz' for column 'id' at row 1
mysql> rollback;
mysql> select * from t1;
Empty set (0.00 sec)

#体现要么全部成功,要么全部失败

LAMP:Linux Apache mysql PHP


加锁的级别:


    InnoDB:行级锁
    MyISAM:表级锁
数据字典:系统表
表空间:一种逻辑结构,用于组织表和索引,位于表和数据文件之间

实验1:存储引擎


1、创建数据库testdb,进入数据库
    create databases testdb;
    use testdb;
2、 创建表t1,存储引擎为myisam
    create table t1(id integer) engine=myisam
3、在表上执行事务,观察事务的rollback
    start transaction;
    insert into t1 values(100);
    insert into t1 values('xyz');#观赛错误信息;
    rollback ;
    mysql> rollback ; #回滚之后数据还在,因为mysql 不支持ACID
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    mysql> select * from t1;
    +------+
    | id   |
    +------+
    |  100 |
    +------+
    1 row in set (0.00 sec)


4、创建表t2 存储引擎为innodb,在表上执行事务,观察事务的rollback
    create table t2(id integer) engine=innodb;
    start transaction;
    insert into  t2 values(100);
    insert into  t2 values('xyz');#观赛错误信息;
    rollback;                     #rollback 之后,刚插入的数据全部回滚
    
    mysql> select * from t2;
    Empty set (0.00 sec)

5、 把t1表的存储引擎改为innnodb;
    alter table t1 engine innodb;
    mysql> start transaction;
    Query OK, 0 rows affected (0.00 sec)

    mysql> insert into t1 values(22);
    Query OK, 1 row affected (0.00 sec)

    mysql>  insert into  t2 values('xyz');
    ERROR 1366 (HY000): Incorrect integer value: 'xyz' for column 'id' at row 1
    mysql> rollback;
    Query OK, 0 rows affected (0.02 sec)

    mysql> select * from t1;
    +------+
    | id   |
    +------+
    |  100 |
    +------+
    1 row in set (0.00 sec)

    mysql> 
 

表空间

表空间的类型

  1.     System Tablespace
  2.     Undo Tablespaces
  3.     General Tablespaces
  4.     File-Per-Table Tablespaces
  5.     Temporary Tablespace

   System Tablespace

 在MySQL 8.0中,InnoDB将元数据存储在MySQL数据字典中.在以前的MySQL版本中,系统表空间也包含双写缓冲区存储(Doublewrite Buffer)区域。从MySQL 8.0.20开始,此存储区域位于单独的双写文件中.

系统表空间可以有一个或多个数据文件。默认情况下,在数据目录中创建一个名为ibdata1的系统表空间数据文件。

与系统表空间有关的变量:

        innodb_data_file_path:系统表空间数据文件的名称、初始大小和数量,是否自动扩展;

         innodb_data_home_dir   :系统表空间数据文件的路径,如果为空,则是数据文件路径 

        innodb_autoextend_increment:每次扩展系统表空间时的自动扩展量

mysql> show variables like '%innodb_data%';
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
| innodb_data_home_dir  |                        |
+-----------------------+------------------------+
2 rows in set (0.00 sec)

[root@student ~]# du -m  /data/mysql/data/ibdata1;
12    /data/mysql/data/ibdata1

mysql> show variables like 'innodb_autoextend_increment';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| innodb_autoextend_increment | 64    |
+-----------------------------+-------+
1 row in set (0.01 sec)

扩展系统表空间

需要在配置文件中更改

扩容:

[mysqld]
datadir=/data/mysql/data/
socket=/data/mysql/mysql.sock

innodb_buffer_pool_chunk_size=64M
innodb_buffer_pool_size=256M

innodb_log_file_size=100M
innodb_log_files_in_group=4

#innodb_data_file_path=ibdata1:10M:autoextend
innodb_data_home_dir=
innodb_data_file_path=/data/mysql/data/ibdata1:12M;/data/mysql/data/ibdata2:480M:autoextend:max:960M
不能通过更改现有系统表空间数据文件的大小属性来增加其大小。例如,在启动服务器时,将innodb_data_file_path设置从ibdata1:12M:autoextend更改为ibdata1:120M:autoextend会生以下 类似错误:

[ERROR] [MY-012263] [InnoDB] The Auto-extending innodb_system data file './ibdata1' is of a different size 640 pages (rounded down to MB) than specified in the .cnf file: initial 768 pages, max 0 (relevant if non-zero) pages!
###只有最后一个文件才可以自动扩展

验证

mysql> show variables like '%innodb_data%';
+-----------------------+--------------------------------------------------------------------------------+
| Variable_name         | Value                                                                          |
+-----------------------+--------------------------------------------------------------------------------+
| innodb_data_file_path | /data/mysql/data/ibdata1:12M;/data/mysql/data/ibdata2:480M:autoextend:max:960M |
| innodb_data_home_dir  |                                                                                |
+-----------------------+--------------------------------------------------------------------------------+
2 rows in set (0.01 sec)

mysql> 
 

缩容

不支持减小现有系统表空间的大小。实现较小系统表空间的唯一选择是将数据从备份恢复到使用所需系统表空间大小配置创建的新MySQL实例。

为系统表空间使用原始磁盘分区

MySQL :: MySQL 8.0 Reference Manual :: 15.6.3.1 The System Tablespace

Temporary Tablespaces

 

session temporary tablespaces 

 InnoDB:
会话临时表空间存储用户创建的临时表和优化器创建的内部临时表。从MySQL 8.0.16开始,用于磁盘内部临时表的存储引擎是InnoDB。(以前,存储引擎由internal_tmp_disk_storage_engine的值决定。)

会话临时表空间文件创建时大小为五页,文件扩展名为.ibt。

[root@student ~]# du -m  /data/mysql/data/ibtmp1
12    /data/mysql/data/ibtmp1
innodb_tmp_tablespaces_dir:变量定义了创建会话临时表空间的位置。默认位置是数据目录中的#innodb_temp目录。

INNODB_SESSION_TEMP_TABLESPACES:表提供有关会话临时表空间的元数据。

Information Schema INNODB_TEMP_TABLE_INFO:表提供了关于用户创建的临时表的元数据,这些临时表在INNODB实例中处于活动状态。


global temporary tablespace.

全局临时表空间(ibtmp1)存储对用户创建的临时表所做更改的回滚段。

innodb_temp_data_file_path 

innodb_temp_data_file_path 变量定义全局临时表空间数据文件的相对路径、名称、大小和属性。如果没有为innodb_temp_data_file_path指定值,则默认行为是在innodb_data_home_dir目录中创建一个名为ibtmp1的自动扩展数据文件。初始文件大小略大于12MB。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/109793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023-10-17 mysql-从库从binlog回放事件-分析

摘要: 2023-10-17 mysql-从库从binlog回放事件-分析 上下文: 2023-10-17 mysql-配置主从-记录-CSDN博客 场景: 两个机器上分别装mysql一个mysql配置成master,另外一个配置成slave, 并建立主从关系配置binlog为row格式在master上insert一条数据在slave的handler接口ha_write…

微信小程序-4

一、使用scss编译wxss文件 1.vscode安装easysass扩展 vscode插件 - - - easysass - - - 安装 2.微信小程序 导入vscode扩展 开发者工具 - - - 视图 - - - 扩展 - - - 右侧三个点 - - - 导入已安装的vscode扩展 3.编辑 打开编辑器扩展目录,找到easysass文件夹&…

spring-statemachine 状态机自定义持久化入库

使用 spring-statemachine 状态机持久化时,可以通过内存、spring-statemachine-redis 或 spring-statemachine-data-jpa 现有方式持久化处理。 因项目审核操作记录频繁,数据量大,使用 内存 或 spring-statemachine-redis 模式不可取&#xf…

QTday02(常用类、UI界面下的开发、信号与槽)

今日任务 1. 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin"&#x…

v-model表单数据双向绑定-表单提交示例

示例如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>v-model表单数据双向绑定<…

354 俄罗斯套娃信封问题(贪心+二分)

题目 链接 给你一个二维整数数组 envelopes &#xff0c;其中 envelopes[i] [wi, hi] &#xff0c;表示第 i 个信封的宽度和高度。 当另一个信封的宽度和高度都比这个信封大的时候&#xff0c;这个信封就可以放进另一个信封里&#xff0c;如同俄罗斯套娃一样。 请计算 最多…

【17.19消失的两个数字】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:vector<int> missingTwo(vector<int>& nums) {//找到a^bint temp0;for(auto num:nums){temp^num;}for(int i1;i<nums.size()2;i){temp^i;}//找…

Flink测试利器之DataGen初探 | 京东云技术团队

什么是 Flinksql Flink SQL 是基于 Apache Calcite 的 SQL 解析器和优化器构建的&#xff0c;支持ANSI SQL 标准&#xff0c;允许使用标准的 SQL 语句来处理流式和批处理数据。通过 Flink SQL&#xff0c;可以以声明式的方式描述数据处理逻辑&#xff0c;而无需编写显式的代码…

React 路由总结 react-router-dom6+react-router-dom5

开题 单页面应用和多页面应用 SPA&#xff1a;单页面应用程序&#xff0c;整个应用中只有一个页面(index.html) MPA&#xff1a;多页面应用程序&#xff0c;整个应用中有很多页面(*.html) react路由 现在的前端应用大多都是SPA单页面应用程序&#xff0c;也就是一个HTML页面的…

百度OCR识别图片文本字符串——物联网上位机软件

一、开发背景 根据项目需求&#xff0c;我们需要完成LED显示屏实时显示歌词的效果。最优的方法是调用歌曲播放器的API获取歌词&#xff0c;但是由于这个开发资格不是很好申请&#xff0c;因此我们采用其他方案&#xff0c;即通过OCR识别获取歌词&#xff0c;并投射到LED显示屏上…

二、电脑装机实践

计算机装机实践 一、零部件组装与启动二、操作系统安装与使用2.0 先导内容&#xff1a;BIOS引导模式、Boot Loader-引导加载程序、硬盘分区模式2.1 Win11安装2.2 Ubuntu22.042.2.0 Ubuntu简介2.2.1 Ubuntu22.04安装2.2.2 Ubuntu22.04使用2.2.2.1 新建文件模版2.2.2.2 给新安装应…

ExposureDiffusion: Learning to Expose for Low-light Image Enhancement论文阅读笔记

南洋理工大学、鹏城实验室、香港理工大学在ICCV2023发表的暗图增强论文。用diffusion模型来进行raw图像暗图增强&#xff0c;同时提出了一个自适应的残差层用来对具有不同信噪比的不同区域采取不同的去噪策略。 方法的框图如下所示&#xff1a; 一张raw图片可以由信号和噪声…

如何解决idea运行出现java: 程序包XX不存在

原因一&#xff1a;pom.xml没有将程序包XXX的<dependency>配置 直接将程序包的<dependency>配置写上即可 原因二&#xff1a;maven配置问题 打开idea的Settings, 进入Build Execution Deployment/Build Tools/Maven/Runner,将Delegate IDE勾上就可以了。(将idea…

Maven 基础教程系列

Maven是一个项目开发管理和理解工具。基于项目对象模型的概念&#xff1a;构建、依赖关系管理、文档创建、站点发布和分发发布都由pom.xml声明性文件控制。Maven可以通过插件进行扩展&#xff0c;以使用许多其他开发工具来报告或构建过程。 一、Maven 使用教程-CSDN博客 二、…

Eclipse Xtext 实现PLC ST 语言到C的转换

Eclipse Xtext 是开发领域专用语言&#xff08;DSL&#xff09;的工具。例如数据库的SQL 语言&#xff0c;PLC 的ST 语言都是一种领域专用语言。在开放自动化领域&#xff0c;提倡基于模型的设计方法。DSL 是描述模型的强有力工具。 在开发PLC 程序IDE时&#xff0c;开发ST编译…

网络安全内网渗透之信息收集--systeminfo查看电脑有无加域

systeminfo输出的内容很多&#xff0c;包括主机名、OS名称、OS版本、域信息、打的补丁程序等。 其中&#xff0c;查看电脑有无加域可以快速搜索&#xff1a; systeminfo|findstr "域:" 输出结果为WORKGROUP&#xff0c;可见该机器没有加域&#xff1a; systeminfo…

LeetCode【17】电话号码的字母组合

题目&#xff1a; 思路&#xff1a; 参考&#xff1a;https://blog.csdn.net/weixin_46429290/article/details/121888154 和上一个题《子集》的思路一样&#xff0c;先画出树结构&#xff0c;看树的深度&#xff08;遍历层级&#xff09;&#xff0c;树的宽度&#xff08;横向…

10.18作业

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为…

IntelliJ IDEA中使用“Generate equals() and hashCode()“提供不同模板的区别

当在IntelliJ IDEA中使用"Generate equals() and hashCode()"功能时&#xff0c;它提供了几个模板选项来生成equals()和hashCode()方法的代码。以下是这些模板的一些区别&#xff1a; IntelliJ Default&#xff08;IntelliJ 默认&#xff09;&#xff1a;这是Intelli…

Java文件前后端上传下载工具类

任何非压缩格式下载 package com.pisx.pd.eco.util;import java.io.*; import java.util.Collections; import java.util.HashMap; import java.util.Map;import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse;import org.springframewo…