55 、mysql的存储引擎、备份恢复以及日志备份、恢复

一、数据库的存储引擎:

1.1、存储引擎的概念

概念:存储引擎,就是一种数据库存储数据的机制,索引的机制,索引的技巧,锁定水平。

存储的方式和存储的格式。

存储引擎也属于mysql当中的组件,实际上操作的,执行的就是数据的读写I/O。

1.2、mysql的存储引擎的分类:

  • mysql5.5之后默认开始使用innodb,事务型速记存储引擎。支持ACID,支持行锁定。
  • myisam:mysql5.5之前的存储引擎,插入的速度和查询速度很快,但是不支持事务。
  • memory:内存型存储引擎,数据在写时,都保存在内存当中,一旦重启,所有数据全部消失。
  • csv:逗号分割数据的存储引擎,数据文件.csv文件保存的,execl.保存的文件就是一个普通的文本文件。
  • 不支持索引。

1.2.1、INNODB存储引擎:

show ENGINES;##查看存储引擎
/etc/my.cnf##配置文件也可以查看和更改
default-storage-engine=#更改默认的存储引擎

1、读写阻塞(锁表)和事务的隔离级别。

2、能够高效缓存数据和支持多种类索引。

3、表的索引的类型默认时BTREE

4、支持外键,支持全文索引。

5、对硬件的资源要求比较高。

6、行级锁定,会把行锁住,禁止操作。

1.2.2、模糊查询:

like进行查询时,会进行全表扫描,在扫描的过程中会锁定整个表。

没有创建索引的列,进行查询时,也会锁定整个表。

使用的是索引列,锁定条件的行,行锁定。

show ENGINES;
CREATE DATABASE xy102;
CREATE TABLE student(
id int(5),
name char(10),
age int(3),
sex char(2)
);
ALTER TABLE student add PRIMARY KEY(id);
show INDEX from student;
INSERT INTO student VALUES(1,'ly1',18,'男');
insert into student values(1,'小明',18,'男');
insert into student values(2,'小红',19,'女');
insert into student values(3,'小刚',19,'男');
insert into student values(4,'小绿',17,'女');
insert into student values(5,'小黑',20,'男');
SELECT * from student;
SELECT * from student WHERE id=1;
create table t1(id int primary key, name char(3), age int);
insert into t1 values(1,'aaa',22);
insert into t1 values(2,'bbb',23);
insert into t1 values(3,'aaa',24);
insert into t1 values(4,'bbb',25);
insert into t1 values(5,'ccc',26);
insert into t1 values(6,'zzz',27);
SELECT * from t1;

innodb行锁和索引的关系:

行锁是通过索引来实现的。

如果没有索引,innodb会使用默认的隐藏索引来对记录进行加锁。

加了索引就是所行。

不加索引就是锁表。

mysql默认就是自动提交写入。

oracle是提交才写入。

当指定条件是索引的时候,会锁住索引行。

1.3、innodb行锁和索引

CREATE table student(
id int(5),
name char(10),
age int(3),
sex CHAR(2)
);
insert into student values(1,'小明',18,'男');
insert into student values(2,'小红',19,'女');
insert into student values(3,'小刚',19,'男');
insert into student values(4,'小绿',17,'女');
insert into student values(5,'小黑',20,'男');
ALTER table student add PRIMARY key(id);xhell:begin;delete from student where id =1;navicat:UPDATE student SET age = 26 where name = '小明';
以上是操作索引列的行,导致整行锁定。mysql> begin;##begin开始,commit提交才写入,若不begin,直接命令行,自动写入。
Query OK, 0 rows affected (0.00 sec)mysql> delete from student where name ='小明';
Query OK, 1 row affected (0.00 sec)navicat:
UPDATE student SET age=23 WHERE id = 3;
以上是操作非索引列的行,导致全文锁定。

delete from t1 where id =1;

update t1 set age=20 where id=1;

update t1 set age=20 where id=1;

在这里插入图片描述

当指定条件不是索引的时候,会锁住全表。

1.4、死锁

死锁:事务相互等待对方的资源,最后形成一个环路造成的。

create table t1(id int primary key, name char(3), age int);
insert into t1 values(1,'aaa',22);
insert into t1 values(2,'bbb',23);
insert into t1 values(3,'aaa',24);
insert into t1 values(4,'bbb',25);
insert into t1 values(5,'ccc',26);
insert into t1 values(6,'zzz',27);mysql> begin;
Query OK, 0 rows affected (0.05 sec)mysql> delete from t1 where id = 5;
Query OK, 1 row affected (0.00 sec)begin;
SELECT * from t1 WHERE id =1 for UPDATE;
UPDATE t1 SET name = 'asd' WHERE id = 5;mysql> delete from t1 where id = 1;
Query OK, 1 row affected (0.00 sec)

在这里插入图片描述

在这里插入图片描述

发生了死锁,数据会自动选择一个事务作为受害者,回滚该事务以解除死锁。

mysql会终止其中一个事务,但是不会回滚。

for update 排他锁,当一个事务的操作未完成时,其他事务可以读取但是不能写入。

如何避免死锁的情况出现:

1、以固定的顺序访问表和行

2、大事务尽量拆陈小事务

3、为表添加一个合理的索引

二、mysql的备份和恢复和日志管理(配置文件当中的设置)

1、备份的目的

备灾 ,在生产环境中,数据的安全性非常重要。

造成数据丢失的原因:

1、程序出错

2、人为的问题

3、磁盘的故障。

备份的分类:

物理备份:对磁盘或者文件直接进行备份。

冷备份:脱机备份,先把指定的程序关闭,然后对资料进行备份。

热备份:

  • 联机备份,不用关闭程序就可以对资料进行备份。
  • 逻辑备份:根据数据库文件当中保存的sql语句,表结构,等等,以特定格式和命令对文件的内容进行还原。热备份的一种。只能对表备份,库没了没有办法恢复。主从复制可以恢复。

物理备份 全量备份:

把数据库的内容整个一次性的做备份。CREATE DATABASE xy103;
create table if not exists info1 (
id int(4) not null auto_increment,
name varchar(10) not null,
sex char(10) not null,
hobby varchar(50),
primary key (id));systemctl stop firewalld;
systemctl stop mysqldcd /usr/local/mysql/data

在这里插入图片描述

在这里插入图片描述

yum -y install xz`xz:`压缩工具,大文件的压缩比较快。## 2.1、打包整个数据库`tar -jcvf /opt/mysql_all_$(date +%F).xz /usr/local/mysql/data`##打包mysql整个文件的数据文件到/opt目录下。cd /opt

在这里插入图片描述

### 2.1.1、scp的备份scp root@192.168.168.11:/opt/mysql_all_2024-07-19.xz /opt/##远程复制cd /opt/tar -xf mysql_all_2024-07-19.xz systemctl stop mysqld.service ##物理备份需要关闭服务。cd /usr/local/mysql/rm -rf data/cd /opt/usr/local/mysql/cp -a data/ /usr/local/mysql/systemctl restart mysqld

2.2、mysql自带的备份

mysql自带的备份命令。可以备份库,也可以备份库里面的表。热备份

备份数据库xy102

mysqsldump -u root -p --databases xy102 > /opt/xy102.sql##必须要以sql为结尾。备份完成,删除表mysql -u root -p < /opt/xy102.sql
Enter password: 123456刷新即可完成恢复。

备份多个数据库

mysqldump -u root -p --databases xy102 xy103 > /opt/xy_all.sql
Enter password: 123456
[root@mysql1 opt]# mysql -u root -p < /opt/xy_all.sql 
Enter password: 123456

备份全部的库和表

 mysqldump -u root -p --all-databases > /opt/all.sql
Enter password: 123456[root@mysql1 opt]# mysql -u root -p < /opt/all.sql 
Enter password: 123456去另外一台mysqlscp root@192.168.168.11:/opt/all.sql /opt/
root@192.168.168.11's password: 123mysql -u root -p < /opt/all.sql 
Enter password: 123456

备份库里面的单表

mysqldump -u root -p 库名 表名 > /opt/xy102_t1.sqlmysqldump -u root -p xy102 t1 > /opt/xy102_t1.sql
Enter password: 
[root@mysql1 opt]# mysql -u root -p < /opt/xy102_t1.sql 
Enter password: 
ERROR 1046 (3D000) at line 22: No database selected
[root@mysql1 opt]# mysql -u root -p xy102 < /opt/xy102_t1.sql 
Enter password: 

备份库里面的多个表

mysql -u root -p xy102 < /opt/xy102_t1_student.sql 
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@mysql1 opt]# mysql -u root -p xy102 < /opt/xy102_t1_student.sql

备份的表在其他库恢复表

mysql -u root -p xy103 < /opt/xy102_t1_student.sql 
Enter password: ##xy102里面的t1表和student表在xy103库里面恢复。

2.3、增量备份:1、2、3

2.3.1、开启二进制日志的功能:

binlog 逻辑备份,会生成一个文件,这个里面包含了sql语句,要使用特定的方式和语句才能恢复。

/etc/my.cnflog-bin=mysql-bin
#开启二进制日志功能
binlog_format=MIXED
#记录二进制日志的文件格式

statement基于sql语句:只是记录用户操作的sql语句,高并发的情况下,记录操作的sql的语句的顺序可能会出错。导出数据时,就会有丢失,或者误差。效率高。

row基于行,记录每一行的数据,准确,高并发也不会出错,但是恢复的效率低。

mixed混合模式,正常情况下使用statement,高并发使用row,智能判断。

cd /usr/local/mysql/data/

在这里插入图片描述

mysqladmin -u root -p flush-logs
##刷新生成新文件进行记录mysql日志文件create table if not exists info1 (
id int(4) not null auto_increment,
name varchar(10) not null,
sex char(10) not null,
hobby varchar(50),
primary key (id));insert into info1 values(1,'user1','male','running');
insert into info1 values(2,'user2','female','singing');
insert into info1 values(3,'user3','female','singing');
insert into info1 values(4,'user4','female','singing');
insert into info1 values(5,'user5','female','singing');
insert into info1 values(6,'user6','female','singing');
insert into info1 values(7,'user7','female','singing');
insert into info1 values(8,'user8','female','singing');mysqladmin -u root -p flush-logs
##设置断点,再次刷新,日志更换保存文件
mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p
##恢复数据到数据库中,之前怎么建的,就怎么恢复

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001##使用解码工具对二进制日志文件查看

2.3.2、指定位置恢复

从指定位置1956恢复到结束

mysqlbinlog --no-defaults --start-position='1956' mysql-bin.000005 | mysql -u root -p
Enter password: 123456
##恢复从指定位置1956到结束

从1956-2774恢复

 mysqlbinlog --no-defaults --start-position='1956' --stop-position='2774' mysql-bin.000005 | mysql -u root -p
Enter password: 123456

2.3.3、按时间位置恢复

根据时间,时间外部格式####-#-##

 mysqlbinlog --no-defaults --start-datetime='####-#-## ##:##:##' --stop-datetime='####-#-## ##:##:##' mysql-bin.000005 | mysql -u root -p
Enter password: 123456mysqlbinlog --no-defaults --start-datetime='2024-7-20  1:27:20' mysql-bin.000005 | mysql -u root -p
##开始到结束mysqlbinlog --no-defaults --start-datetime='2024-7-20  1:27:20' --stop-datetime='2024-7-20  1:27:23' mysql-bin.000005 | mysql -u root -p
##时间间隔

/etc/my.cnf

log-bin=mysql-bin
#开启二进制日志功能
binlog_format=MIXED
#记录二进制日志的文件格式

打开通用查询日志

general_log=ON

查询日志的保存位置

general_log_file=/usr/local/mysql/data/mysql_general.log

错误的保存位置,错误日志默认是开启的

log-error=/usr/local/mysql/data/mysql_error.log

开启慢查询日志

slow_query_log=0N

设置慢查询的位置

slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log

#默认的慢查询时间是10秒,超过5秒的记录都会保存。

long_query_time=5

在这里插入图片描述

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

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

相关文章

Linux挂载磁盘目录

一、背景 由于安装oracle数据库&#xff0c;磁盘空间不足&#xff0c;已经加了存储&#xff0c;但是没有挂载&#xff0c;需要将/dev/sdb全部挂载到/oracle目录下 [rootdatabase-001 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk …

HTTPServer改进思路2(mudou库核心思想融入)

mudou网络库思想理解 Reactor与多线程 服务器构建过程中&#xff0c;不仅仅使用一个Reactor&#xff0c;而是使用多个Reactor&#xff0c;每个Reactor执行自己专属的任务&#xff0c;从而提高响应效率。 首先Reactor是一种事件驱动处理模式&#xff0c;其主要通过IO多路复用…

Linux实用操作三

文章目录 Linux实用操作三网络传输ping命令介绍&#xff1a;示例&#xff1a; wget命令介绍&#xff1a;示例&#xff1a; curl命令介绍&#xff1a;示例&#xff1a; 端口介绍&#xff1a;端口的划分&#xff1a;查看端口占用&#xff1a; 进程管理进程介绍&#xff1a;查看进…

基于WebGoat平台的SQL注入攻击

目录 引言 一、安装好JAVA 二、下载并运行WebGoat 三、注册并登录WebGoat 四、模拟攻击 1. 第九题 2. 第十题 3. 第十一题 4. 第十二题 5. 第十三题 五、思考体会 1. 举例说明SQL 注入攻击发生的原因。 2. 从信息的CIA 三要素&#xff08;机密性、完整性、可用性&…

【MySQL-17】存储过程-[变量篇]详解-(系统变量&用户定义变量&局部变量)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《Lin…

SpringBoot常用功能实现

1. 配置文件多环境配置 1.1 创建不同环境配置文件 文件名前缀和后缀为标准固定格式&#xff0c;不可以改变。 1.2 pom中加入文件配置 可以使用<activation>标签设置默认环境。 <profiles><profile><id>dev</id><activation><active…

内置华为视频终端API接口的中央控制系统

内置华为视频终端API接口的中控系统是一种高度集成化的智能控制系统&#xff0c;它通过将华为视频终端的控制功能集成到中控系统中&#xff0c;实现了对华为视频终端的远程控制和集中管理。以下是对该系统的详细介绍&#xff1a; 一、系统概述 该系统通过调用华为视频终端提供…

数据结构(队列及其实现)

概念与结构 概念&#xff1a;只允许在⼀端进⾏插⼊数据操作&#xff0c;在另⼀端进⾏删除数据操作的特殊线性表&#xff0c; 队列具有先进先出FIFO(First In First Out)原则。 ⼊队列&#xff1a;进⾏插⼊操作的⼀端称为队尾 出队列&#xff1a;进⾏删除操作的⼀端称为队头…

Python | Leetcode Python题解之第268题丢失的数字

题目&#xff1a; 题解&#xff1a; class Solution:def missingNumber(self, nums: List[int]) -> int:n len(nums)total n * (n 1) // 2arrSum sum(nums)return total - arrSum

texify - 识别数学/图像 PDF

文章目录 一、关于 texify例子训练 二、安装手动安装 三、使用1、使用技巧2、用于交互转换的应用程序3、转换图像4、Python 中导入并运行 四、限制五、基准测试运行自己的基准测试 六、其它商业用途感谢 一、关于 texify Texify是一种OCR模型&#xff0c;它将包含数学的图像或…

spring-retry详解

spring-retry详解 1.引入依赖2.Retryable基础使用3.Recover使用4.Retryable参数详解5.需要注意 重试机制对于大部分场景来说都是必要的&#xff0c;比如同步调用三方接口&#xff0c;三方接口、信息拉取等网络原因突然不通&#xff0c;有了重试就可以多一些容错机制&#xff0c…

HackTheBox--Knife

Knife 测试过程 1 信息收集 端口扫描 80端口测试 echo "10.129.63.56 knife.htb" | sudo tee -a /etc/hosts网站是纯静态的&#xff0c;无任何交互功能&#xff0c;检查网页源代码也未发现任何可利用的文件。 检查页面请求时&#xff0c;请求与响应内容&#xff0…

笔记小结:卷积神经网络之多输入多输出通道

本文为李沐老师《动手学深度学习》笔记小结&#xff0c;用于个人复习并记录学习历程&#xff0c;适用于初学者 彩色图像具有标准的RGB通道来代表红、绿和蓝&#xff0c;需要三个通道表示&#xff0c;故而只有单输入单输出是不够的。 对于单个输入和单个输出通道的简化例子&…

vscode配置latex环境制作【文档、简历、resume】

vscode配置latex环境制作【文档、简历、resume】 1. 安装Tex Live及vscode插件 可以参考&#xff1a;vscode配置latex环境制作beamer ppt 2. 添加vscode配置文件 打开vscode&#xff0c;按下Ctrl Shift P打开搜索框&#xff0c;搜索Preference: Open User Settings (JSON…

深入理解Linux网络(四):TCP接收阻塞

TCP socket 接收函数 recv 发出 recvfrom 系统调用。 进⼊系统调⽤后&#xff0c;⽤户进程就进⼊到了内核态&#xff0c;通过执⾏⼀系列的内核协议层函数&#xff0c;然后到 socket 对象的接收队列中查看是否有数据&#xff0c;没有的话就把⾃⼰添加到 socket 对应的等待队列⾥…

Conda和Pip有什么区别?

conda和pip是Python中两种常用的包管理工具&#xff0c;它们在用途、包来源以及环境管理等方面存在区别。以下是具体分析&#xff1a; 用途 conda&#xff1a;conda是Anaconda发行版中的包管理工具&#xff0c;可以管理包括非Python软件包在内的各种包。它是一个全面的环境管理…

为什么企业一定要多参加展会,参展有何好处?

在当今的商业环境中&#xff0c;展会已成为企业不可或缺的市场推广和交流平台。无论企业规模大小&#xff0c;参展都是一个极其有益的选择。以下&#xff0c;我们将深入探讨企业为何要多参加展会&#xff0c;以及参展所能带来的种种好处。 一、增强品牌影响力与知名度 展会是聚…

大数据量接口响应慢-传输优化

问题 接口一次性返回大量数据&#xff0c;导致JSON数据大小过大&#xff0c;带宽大小不足&#xff0c;导致接口响应时间过长 解决方案 通过数据传输压缩来降低传输数据的大小&#xff0c;从而提高传输效率 服务器端压缩 springboot项目配置application文件&#xff0c;通过…

视频翻译保留原音色pyvideotrans+clone-voice

剪映的视频翻译时长限制5分钟以内&#xff0c;需要积分2700首次有减免大概21.6元&#xff08;1秒9积分/1元100积分&#xff09; • 视频翻译配音工具pyvideotrans 将视频从一种语言翻译为另一种语言&#xff0c;并添加配音 打包链接&#xff1a;夸克网盘分享 升级补丁&#…

MySQL通过bin-log恢复数据

MySQL通过bin-log恢复数据 1.bin-log说明2.数据恢复流程2.1 查看是否开启bin-log2.3 查看bin-log2.4 执行数据恢复操作2.5 检查数据是否恢复 1.bin-log说明 mysqldump和bin-log都可以作为MySQL数据库备份的方式&#xff1a; mysqldump 用于将整个或部分数据库导出为可执行的S…